У меня есть серия файлов srt (субтитры к фильмам), некоторые из их временных шкал перекрывают друг друга на видео! Это означает, что некоторые временные линии отображаются примерно на 1-2 секунды длиннее, чем в фильме, и конфликтуют со следующими!
, например:
1
00:00:01.000 --> 00:00:07.000
The following content is provided
2
00:00:04.000 --> 00:00:10.000
under a Creative Commons license.
'07 ' перекрывает '04'!
Я хочу перезаписать первую часть временных шкал на 2-й части их предыдущей строки. Будьте осторожны, чтобы все временные линии не мешали друг другу. некоторые из них являются правильными и короче их следующего графика времени! Вмешательство только для некоторых из них.
Я задал этот вопрос на #awk IRC, который @geirha записал ниже больших сценариев. Сценарий может быть применимым для других людей. Подзаголовки перекрывающаяся проблема распространены из-за Человеческой ошибки во время введения субтитров фильма!
Предположим, что Ваши временные шкалы находятся в ниже формата:
A --> B
C --> D
Замена B с C:
gawk '
BEGIN {
RS = "";
OFS = FS = "\n";
getline;
n = split($0, prev_rec);
split($2, prev_time, / --> /);
}
{
split($2, a, / --> /);
if (a[1] < prev_time[2])
prev_rec[2] = prev_time[1]" --> "a[1];
for (i=1;i<=n;i++)
print prev_rec[i];
printf("\n");
n = split($0, prev_rec);
split($2, prev_time, / --> /)
}
END {
print
}' SUBTITLE.srt > RESULT.srt
Вышеупомянутый код сравнивает B и C таким образом:
Если B> C => затем выполненный, что, очаровывая команду для замены B.
Если B <C => ничего Не Делают!
Замена C с B:
gawk '
BEGIN {
RS="";
OFS=FS="\n";
prev="00:00:00"
}
{
split($2,a,/ --> /);
if
(a[1] < prev) $2=prev" --> "a[2];
print $0"\n"; prev=a[2]
}' SUBTITLE.srt > RESULT.srt
Использовать сценарии на некоторой сумме srt файлов в папке:
for file in *.srt
do xxx "$file" > "$file.tmp" && mv "$file.tmp" "$file";
done
Замените xxx правильными кодами сценария!