Bash, сдвиг секунд в файле srt

Может кто-нибудь может мне помочь. В bash я не знаю как это сделать. Мне нужно сделать bash-скрипт. На STDIN у меня есть файл.srt субтитров в этом формате:

num
HH:MM:SS,SSS --> HH:MM:SS,SSS
text line 1
text line 2
...

ЧЧ: ММ: СС,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

Я думаю, мне нужно захватить все ЧЧ: ММ: СС и сначала преобразовать их в секунды. Если кто-то может сделать это без sed, я буду аплодировать. Спасибо!

1 ответ

Ваш шифтер.ш:

#!/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;
'
Другие вопросы по тегам