2008-07-06

DVD9 para DVD5: Coisas que podem dar errado

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:
    1. Extrair os canais (vídeo, áudio e legendas)
    2. 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
    3. Eliminar os primeiros DELTA segundos dos canais de áudio:
      ffmpeg -i ARQ.ac3 -ss DELTA -acodec copy arqtemp.ac3
      mv arqtemp.ac3 ARQ.ac3
    4. 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
    5. 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:
    1. 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
    2. Extrair as legendas de um canal da forma usual:
      mkdir -p tNsS
      spuunmux -o tNsS/sub -s S -p palette.rgb tN.mpg
    3. 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.
    4. 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
    5. Extrair as legendas de todos os canais desejados normalmente.
    6. 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).

Nenhum comentário: