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;
'