Eu fiz esta pergunta em #awk IRC e @ geirha escreveu os grandes scripts abaixo. O script pode ser usado por outras pessoas. Problema de sobreposição de legendas é comum devido a erro humano durante a legendagem de um filme!
Suponha que suas linhas de tempo estejam no formato abaixo:
A --> B
e C --> D
Substituindo B por 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
O código acima compara B e C desta forma:
Se B > C = > em seguida, execute esse comando encantador para substituir B.
Se B < C = > Não faça nada!
Substituindo C por 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
Para usar scripts em uma quantidade de arquivos srt em uma pasta:
for file in *.srt
do xxx "$file" > "$file.tmp" && mv "$file.tmp" "$file";
done
Substitua xxx pelos códigos de script corretos!