0

也许有人可以帮助我。在 bash 中,我不知道该怎么做。我需要做一个 bash 脚本。在标准输入,我有这种格式的 .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 的情况下做到这一点,我会鼓掌。谢谢!

4

1 回答 1

2

你的 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;
'
于 2013-10-17T17:24:22.973 回答