Bash,在srt文件中移位秒

时间:2013-10-17 17:02:41

标签: bash datetime stdin srt

也许有人可以帮助我。在bash中,我不知道该怎么做。 我需要做一个bash脚本。在stdin我有这种格式的.srt字幕文件:

num
HH:MM:SS,SSS --> HH:MM:SS,SSS
text line 1
text line 2
...
HH:MM:SS,SSS文本标题的开头和结尾。

脚本必须移动秒。 (可以是+或 - )

示例:

$cat bmt.srt
5
00:01:02,323 --> 00:01:05,572
Hello, my frieds!
6
....

$./shifter.sh +3<mbt.srt
5
00:01:05,323 --> 00:01:08,572
Hello, my frieds!
6

我想,我需要抓住所有HH:MM:SS并首先将它们转换为秒。 如果有人能在没有sed的情况下做到这一点,我会鼓掌。谢谢!

1 个答案:

答案 0 :(得分:1)

你的shifter.sh:

#!/bin/sh
export DELTA=$1
perl -pe '
    BEGIN {
        sub to_secs {
            my ($h,$m,$s) = split(/:/, shift);
            $h*3600 + $m*60 + $s;
        }
        sub to_str {
            my $secs = shift;
            my $s = $secs % 60;
            my $h = int($secs / 3600);
            my $m = int(($secs - $h*3600) / 60);
            sprintf("%d:%02d:%02d", $h, $m, $s);
        }
    }
    s/(\d+:\d\d:\d\d)/ to_str(to_secs($1) + $ENV{DELTA}) /ge;
'