A Cruzada dos DVDs

Começou quando eu meti na cabeça a idéia de assistir alguns dos animes fansubados do meu HD na televisão. Estava na hora de fazer o meu gravador valer o que custou. Minha primeira parada foi esta mensagem no fórum do Gentoo Linux, que ensina de forma bastante detalhada a converter um arquivo .avi em um DVD com menu e tudo. Eu não estava tão interessado assim no menu, mas o resto foi bem útil. Consegui executar o processo para 8 arquivos, o que levou uma noite inteira de codificação. Gravei o resultado no meu último e precioso DVD-R da Maxell, confiante de que ia tudo dar certo.

Não tocou.

Depois de pensar um pouco, vi que o problema era que eu havia codificado os vídeos no formato PAL. Eu devia ter percebido o óbvio: o formato PAL é o utilizado no Brasil, portanto todos aparelhos eletrônicos aqui funcionam com NTSC!

Descobri que tinha aqui comigo 3 DVD-Rs genéricos, e não perdi tempo em começar a desperdiçá-los. A segunda tentativa deu mais certo, já que os vídeos tocavam, mas não cabiam na tela. Pequenas faixas na borda ficaram de fora, impedindo a leitura de algumas legendas, e isso me irritava muito. Por isso, guardei o disco e parti para próxima tentativa.

A essa altura, eu já havia percebido que aquela história de colocar cada arquivo como um título separado, como era explicado no primeiro link, não ia dar certo se eu não colocasse um menu no DVD. Como isso ia ser muito trabalho para pouco benefício (já que os discos seriam para uso pessoal), eu achei este outro tutorial, que explicava algumas alterações simples para que cada arquivo fosse um capítulo.

Novamente confiante, passei outra noite codificando os vídeos em formato de cinema (16:9), convencido de que as famosas barras pretas no fundo da tela seriam a solução. Ledo engano: elas simplesmente foram colocadas por cima da imagem, atrapalhando ainda mais a visão.

O motivo de eu estar usando DVD-Rs para fazer isso é que o meu único DVD+RW estava com um arranhão feio, o que causava erros horrendos na gravação lá na marca dos 1.2GB. Depois da terceira falha consecutiva, comecei a fazer os testes com um único arquivo (que ficava com cerca de 500MB) e a usar o DVD+RW mesmo. Por que não pensei nisto antes? Só Deus sabe.

Na página 5 do tópico de fórum que contém o primeiro tutorial, eu achei informações sobre uma macumba chamada pre-clipping. Este é um processo que adiciona barras pretas ao redor do vídeo e faz um “zoom” da imagem para que ela caiba no novo espaço reduzido. Isto deveria ser feito pelos comandos que eu estava usando anteriormente, mas por algum motivo não era. O jeito, então, era fazer isso manualmente. As informações da mensagem salvadora são reproduzidas aqui para facilitar a compreensão:

Seja p a razão entre a largura e a altura do vídeo resultante. Para vídeo PAL (720×576) isto é 1.25, e para vídeo NTSC (720×480) isto é 1.5. Seja axb a resolução do vídeo original. O número de pre-clipping, portanto, é dado por ( ( a / p ) – b ) /2 .

No meu caso, o vídeo resultante era NTSC e a resolução original era 640×480. O número de pre-clipping foi 26. Após testar isso com o DVD+RW e um único arquivo, eu vi que a imagem ainda ficava um pouquinho fora da tela, portanto eu aumentei p para 1.54, o que resultou em um número de pre-clipping de 32 e em um encaixe melhor. E, assim, finalmente, eu conseguia construir um DVD assistível.

O resultado final foi um script em Ruby que automatiza o processo todo, recebendo apenas os nomes dos arquivos e até duas opções. Ele funciona melhor se os arquivos estiverem nomeados como “01.avi”, “02.avi”, etc., ou seja, com números na ordem sequencial em que devem aparecer no DVD. Note que o script só funciona em Linux, e que você deve ter instaladas em sua máquina todas as ferramentas mencionadas nos tutoriais, já que são elas que fazem todo o serviço. Também é necessário possuir o intérprete de Ruby. As opções aceitas são “–input_resolution” para a resolução dos vídeos originais utilizada no cálculo do pre-clipping (o padrão é 640×480) e “–bitrate” para o bitrate dos arquivos mpeg gerados, o que afeta seu tamanho (o default é 1800, o que dá uns 350MB por arquivo).

O resultado é uma imagem .ISO do DVD, pronta para ser gravada.

NOTA: É necessário ter muito tempo nas mãos, e muito, mas muito espaço em disco mesmo, para criar um DVD.


#! /usr/bin/env ruby

require 'getoptlong'
OutputRatio = 1.54

nomes = []


def adjust_clip(x, y)

clip_size = (((x.to_i / OutputRatio) - y.to_i) / 2)
clip_size = -1 * clip_size if clip_size > 0
int_clip = clip_size.to_i
return int_clip if int_clip % 2 == 0

return int_clip - 1

end

clip_size = -32
bitrate = 1800

options = GetoptLong.new(["--input_resolution", "-r", GetoptLong::REQUIRED_ARGUMENT],
["--bitrate", "-b", GetoptLong::REQUIRED_ARGUMENT])

options.each do |opt, arg|
case opt
when "--input_resolution"
x, y = arg.split('x')
clip_size = adjust_clip(x, y)
when "--bitrate"
bitrate = arg
end
end

File.open("ffmpeg.cfg", "w") do |cfg|
cfg.write <<-FIM
[mpeg2video]
vrc_minrate=0
vrc_maxrate = 5000
vrc_buf_size = 1792
FIM
end

ARGV.each do |filename|
if File.exist?(filename)
nome, extensao = filename.split('.')
break unless system <<-FIM
transcode -i "#{filename}" -y ffmpeg --export_prof dvd-ntsc --export_asr 2 --pre_clip=#{clip_size},#{clip_size} -w #{bitrate} -o #{nome} -D0 -b224 -N 0x2000 -s2 -m #{nome}.ac3 -J modfps=clonetype=3 --export_fps 29.97
FIM
break unless system("mplex -f 8 -o #{nome}.mpg #{nome}.m2v #{nome}.ac3")
nomes << nome
else
break
end
end

File.open("dvdauthor.xml", "w") do |xml|
xml.write <<-FIM
<dvdauthor dest="DVD">
<vmgm />
<titleset>
<titles>
<pgc>
FIM
nomes.each do |nome|
xml.write(" <vob file=\"#{nome}.mpg\"/>\n")
end
xml.write <<-FIM
</pgc>
</titles>
</titleset>
</dvdauthor>
FIM
end

system("dvdauthor -x dvdauthor.xml")
system("mkisofs -o image.iso -dvd-video DVD/")

~ por mestrebira em 11/02/2006.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

 
%d blogueiros gostam disto: