No processo de converter DVD9 em DVD5, algumas coisas podem não funcionar direito. Eis uma lista de problemas encontrados e como resolvê-los:
- Um arquivo de áudio (AC3) está corrompido: O arquivo no formato AC3 é composto por uma série de frames que começam com os bytes [0b 77]. Às vezes, é necessário eliminar o lixo que aparece antes do primeiro frame. Para isso, deve-se determinar a posição do primeiro byte válido (o primeiro 0b seguido por 77 do primeiro frame) e eliminar o que vem antes. Uma maneira é:
inicial=`hexdump -e "\"%_ad \" 1/1 \"%02x\n\"" ARQ.ac3 \
| awk '/ 77$/ {if (OK==1) print $1}; {OK=0}; / 0b$/ {OK=1}' \
| head -1`
tail -c +$inicial ARQ.ac3 >arqtemp.ac3
mv arqtemp.ac3 ARQ.ac3 - As legendas estão transparentes: às vezes os arquivos PNG contendo as legendas podem estar com o texto semi-transparente. Neste caso, é necessário converter cada um dos PNGs, eliminando a transparência do texto (mas não do fundo):
for i in DIR/sub*.png; do
convert $i -channel Alpha -level 99%,100% arqtemp.png
mv arqtemp.png $i
done - Preciso eliminar uma parte do video: Às vezes, pode ser desejável eliminar parte de uma trilha. Essa parte pode estar no início, meio ou fim. Segue a seqüência de passos necessária para eliminar um pedaço no início:
- Extrair os canais (vídeo, áudio e legendas)
- Eliminar os primeiros DELTA segundos do canal de vídeo:
ffmpeg -i ARQ.m2v -ss DELTA -vcodec copy arqtemp.m2v
mv arqtemp.m2v ARQ.m2v - Eliminar os primeiros DELTA segundos dos canais de áudio:
ffmpeg -i ARQ.ac3 -ss DELTA -acodec copy arqtemp.ac3
mv arqtemp.ac3 ARQ.ac3 - Modificar o tempo das legendas em DIR/sub.xml:
delta=DELTA
cat DIR/sub.xml | perl -e '
while (<stdin>) {
if (!/start=.*end=/) {
print($_);
} else {
$s = $_;
$s =~ s/.* start="([0-9:.]*)".*/$1/;
@s = split(/:/, $s);
$s = $s[0] * 3600 + $s[1] * 60 + $s[2] - '$delta';
$s = sprintf("%02d:%02d:%05.2f", $s / 3600,
($s % 3600) / 60, 0.0 + $s - int($s / 60) * 60);
$e = $_;
$e =~ s/.* end="([0-9:.]*)".*/$1/;
@e = split(/:/, $e);
$e = $e[0] * 3600 + $e[1] * 60 + $e[2] - '$delta';
$e = sprintf("%02d:%02d:%05.2f", $e / 3600,
($e % 3600) / 60, 0.0 + $e - int($e / 60) * 60);
$l = $_;
$l =~ s/start="[0-9:.]*"/start="$s"/;
$l =~ s/end="[0-9:.]*"/end="$e"/;
print ($l);
}
}' \
>arqtemp.xml
mv arqtemp.xml DIR/sub.xml - Modificar o tempo dos capítulos em dvd.xml.
- As cores da legenda estão erradas: O problema é na definição de cores do arquivo palette.rgb. Para gerar um arquivo que produza legendas com as cores certas, deve-se primeiro gerar um com as cores erradas, identificar a posição de cada cor e depois substituir a cor no arquivo palette.rgb pela cor correta:
- Gerar um arquivo palette.rgb com o seguinte conteúdo:
ff0000
ff8000
ffc000
ffff00
c0ff00
00ff00
00ffc0
00ffff
00c0ff
0080ff
0000ff
8000ff
c000ff
ff00ff
ff00c0
ff0080 - Extrair as legendas de um canal da forma usual:
mkdir -p tNsS
spuunmux -o tNsS/sub -s S -p palette.rgb tN.mpg - Abrir um dos arquivos PNG gerados (por exemplo, tNsS/sub00000.png) e verificar a cor das letras, do contorno e, se houver, dos pontos de transição entre as letras e o contorno.
- Substituir o arquivo palette.rgb por um que tenha as seguintes cores:
- ffc000 no lugar da cor das letras
- 000000 no lugar da cor do contorno das letras
- 806000 no lugar da cor dos pontos de transição entre as letras e o contorno, se houver
- 00ff00 em todas as outras posições
- ffc000 no lugar da cor das letras
- Extrair as legendas de todos os canais desejados normalmente.
- Abrir um dos novos arquivos PNG gerados (por exemplo, tNsS/sub00000.png) e verificar se as cores estão corretas. Se não estiverem, alguma coisa foi feita errada (ver também observação sobre legendas transparentes).
- Gerar um arquivo palette.rgb com o seguinte conteúdo: