Fórum Ubuntu Linux - PT

Suporte Técnico => Programação e Scripts => Tópico iniciado por: xluisfernando em 08 de Julho de 2010, 17:14

Título: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: xluisfernando em 08 de Julho de 2010, 17:14
Pesquisei em tutoriais diferentes, entre eles:
Carlos Morimoto http://www.gdhpress.com.br/blog/converter-video/
Fernando Silvério da Silva http://www.vivaolinux.com.br/artigo/Tutorial-convertendo-DVD-para-AVI-com-mencoder?pagina=1
Cristiano http://www.vivaolinux.com.br/dica/Copiando-CDs-e-DVDs-pelo-terminal-com-facilidade

Com base neles, desenvolvi:
Citar
#!/bin/sh
#Este script realiza a conversao de um filme presente em midia DVD
#para um arquivo de video em formato avi, mantendo uma boa qualidade.
#Para utiliza-lo seu sistema precisara ter instalado em seu PC:
# O criador de CD/DVD (Brasero, K3b...)
# O Mplayer
# O Mencoder
# O W32codecs (No Synaptic e possivel verificar/instalar esses pacotes)
#Depois de conferir a instalacao desses pacotes, copie e cole o script
#(do #/bin/sh ao rm /tmp/dvd.iso) dentro de um editor (gedit, kedit,
# kwrite) e salve dentro da pasta de usuario. Em seguida execute pelo
#terminal/console sudo chmod +x nomedoarquivo Depois e so digitar no
#terminal ./nomedoarquivo que o processo sera iniciado
#Luis Fernando de Lima Junior

cat /dev/sr0 > /tmp/dvd.iso; eject
#Esse comando cria uma imagem a partir do DVD, dentro da pasta /tmp.
#Ao ser concluida a imagem o comando ejeta a midia do gravador de disco

iso="/tmp/dvd.iso"

mencoder -dvd-device $iso dvd://1 -alang pt -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1100:vpass=1 -ffourcc XVID -ofps 23.976 -vf crop=h=365 -zoom -xy 652 -o /dev/null

mencoder -dvd-device $iso dvd://1 -alang pt -oac mp3lame -lameopts cbr:mode=2:br=128:vol=10 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1100:vpass=2 -ffourcc XVID -ofps 23.976 -vf crop=h=365 -zoom -xy 652 -o /tmp/convertido.avi

mv /tmp/convertido.avi /home/$USER/Vídeos
#Esse comando foi pensado para uma instalacao Ubuntu, que ja vem com
#uma pasta /Videos dentro da pasta de usuario.

rm /tmp/dvd.iso

Testei em meu PC e funcionou. Não percebi perda de qualidade na conversão, mas agradeceria se outros mais experientes apontassem sugestões e melhorias. Afinal, todos somos open source.

Edit:

Corrigi (acho) algumas falhas no script que prejudicavam a qualidade do vídeo. Troquei o codec lavic mpeg4 pelo xvid e ficou assim:
Citar
#!/bin/sh
#Este script realiza a conversao de um filme presente em midia DVD
#para um arquivo de video em formato avi, mantendo uma boa qualidade.
#Para utiliza-lo seu sistema precisara ter instalado em seu PC:
# O criador de CD/DVD (Brasero, K3b...)
# O Mplayer
# O Mencoder
# O W32codecs (No Synaptic e possivel verificar/instalar esses pacotes)
#Depois de conferir a instalacao desses pacotes, copie e cole o script
#(do #/bin/sh ao rm /tmp/dvd.iso) dentro de um editor (gedit, kedit,
# kwrite) e salve dentro da pasta de usuario. Em seguida execute pelo
#terminal/console sudo chmod +x nomedoarquivo Depois e so digitar no
#terminal ./nomedoarquivo que o processo sera iniciado
#Luis Fernando de Lima Junior

cat /dev/sr0 > /tmp/dvd.iso; eject
#Esse comando cria uma imagem a partir do DVD, dentro da pasta /tmp.
#Ao ser concluida a imagem o comando ejeta a midia do gravador de disco

iso="/tmp/dvd.iso"

mencoder -dvd-device $iso dvd://1 -alang pt -oac copy -ovc xvid -xvidencopts bitrate=1100 -vf lavcdeint,scale -zoom -xy 720 -o /dev/null

mencoder -dvd-device $iso dvd://1 -alang pt -oac mp3lame -lameopts cbr:mode=2:br=128:vol=10 -ovc xvid -xvidencopts bitrate=1100 -vf lavcdeint,scale -zoom -xy 720 -o /tmp/convertido.avi

mv /tmp/convertido.avi /home/$USER/Vídeos
#Esse comando foi pensado para uma instalacao Ubuntu, que ja vem com
#uma pasta /Videos dentro da pasta de usuario.

rm /tmp/dvd.iso
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: Kamei Hyoga em 09 de Julho de 2010, 17:38
Só não entendi essa parte:

Citar
#Para utiliza-lo seu sistema precisara ter instalado em seu PC:
# O criador de CD/DVD (Brasero, K3b...)

Pelo que vi no código, nada disso é usado na criação do AVI. Claro que o que estou falando é um detalhe insignificante hehe

Talvez para incrementar um pouco, você poderia deixar o vbitrate como uma variável a ser definida pelo usuário. Acho que aumentando um pouco a qualidade do som, também ficaria melhor.

Dá uma pesquisada sobre Zenity se quiser dar uma praticidade aos usuários que tem medo de terminal hahaha


Parabéns pelo programa.
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: velox256 em 09 de Julho de 2010, 17:55
O bacana disso é que o cara que postou esse script aqui fez a mesma coisa lá no Fórum do Guia do Hardware; eu pedi pra ele colocar o script entre quotes pra formatação do fórum não alterar o conteúdo mas foi o mesmo que falar pras paredes...


Só não entendi essa parte:

Citar
#Para utiliza-lo seu sistema precisara ter instalado em seu PC:
# O criador de CD/DVD (Brasero, K3b...)

Pelo que vi no código, nada disso é usado na criação do AVI. Claro que o que estou falando é um detalhe insignificante hehe

Talvez para incrementar um pouco, você poderia deixar o vbitrate como uma variável a ser definida pelo usuário. Acho que aumentando um pouco a qualidade do som, também ficaria melhor.

Dá uma pesquisada sobre Zenity se quiser dar uma praticidade aos usuários que tem medo de terminal hahaha


Parabéns pelo programa.
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: xluisfernando em 10 de Julho de 2010, 12:15
O bacana disso é que o cara que postou esse script aqui fez a mesma coisa lá no Fórum do Guia do Hardware; eu pedi pra ele colocar o script entre quotes pra formatação do fórum não alterar o conteúdo mas foi o mesmo que falar pras paredes...


Só não entendi essa parte:

Citar
#Para utiliza-lo seu sistema precisara ter instalado em seu PC:
# O criador de CD/DVD (Brasero, K3b...)

Pelo que vi no código, nada disso é usado na criação do AVI. Claro que o que estou falando é um detalhe insignificante hehe

Talvez para incrementar um pouco, você poderia deixar o vbitrate como uma variável a ser definida pelo usuário. Acho que aumentando um pouco a qualidade do som, também ficaria melhor.

Dá uma pesquisada sobre Zenity se quiser dar uma praticidade aos usuários que tem medo de terminal hahaha


Parabéns pelo programa.
Desculpe-me velox. Lá no Gdh eu já coloquei no quote, mas tinha esquecido de fazer o mesmo aqui. (Eu não imaginava que isso fizesse tanta diferença)

Kamei Hyoga. Acho que você está certo. Eu não tinha certeza de como o comando cat criaria a imagem e pensei que talvez ele precisasse de algum pacote referente ao gravador.

Estou estudando a utilização de caixas de diálogo zenity, mas quando testei esse script a coisa foi tão automática que não vi onde encaixar isso. Por exemplo, eu editei o menu de aplicativos e criei uma entrada na parte de multimidia, atrelada ao comando ./DVD-AVI.sh /home/$USER Com isso, ao clicar no atalho ele fez o processo de maneira silenciosa, sem abrir um terminal (Não tinha nem como estava o saber o andamento)

Talvez o zenity possa ser usado na questão de definir os valores de vbitrate (que ainda estou estudando para entender melhor os efeitos). Outra possibilidade é a alteração do idioma de audio, que deixei por padrão em português.

O que eu queria mesmo fazer é colocar uma linha que analisasse a imagem e definisse audio em português ou audio em inglês com legenda em português
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: Kamei Hyoga em 10 de Julho de 2010, 15:33
Primeiro me veio a utilização nas caixas de entrada do vbitrate e também num diálogo para a escolha do destino do arquivo final.

Isso que você falou sobre a questão do áudio e legenda, também pode ser feito com o zenity. A pessoa escolhe a forma que quer o arquivo final (audio e legenda) e o processo se inicia.

Então na prática o usuário poderia definir um valor de vbitrate (ou deixar o valor padrão, caso não conheça disso) e escolher se quer o vídeo só dublado, ou com áudio original e legenda em portugues.
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: xluisfernando em 10 de Julho de 2010, 16:24
Kamei Hyoga

Estava pesquisando sobre bitrate em:
www.biglinux.com.br/klaos/mencoder.pdf
http://www5.mplayerhq.hu/DOCS/HTML/en/
http://www5.mplayerhq.hu/DOCS/HTML/en/menc-feat-quicktime-7.html#menc-feat-quicktime-7-bitrate

Então pensei: A sugestão de alteração do valor vbitrate é para reduzir o tamanho do video avi? Pergunto isso porque pelo que percebi nas referências é comum utilizar valores de 600, 800 e 900. Como no script o valor é 1100 não encontrei uma referência para o valor máximo.

Pensei em um diálogo simples, como: Deseja converter o filme com áudio em português? (se sim, fica parecido com o que está, se não, substituo -alang pt por -alang en -slang pt)

Deseja que o vídeo tenha a melhor qualidade de imagem possível? (Isso fará com que o vídeo convertido ocupe mais espaço em disco...)

Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: Kamei Hyoga em 11 de Julho de 2010, 05:27
Sim, dessa forma mesmo fica ótimo.

O pouco que sei, e lembro, sobre bitrate é que um valor muito alto só aumenta o tamanho mesmo, quase não dando pra perceber a diferença, entre, por exemplo, um feito com 2000 e outro com 8000. Não lembro exatamente o valor, mas se você colocar dessa forma, ficará muito bom.

Qualidades:

Baixa (600)
Média (800)
Alta (900)
Muito Alta (1100)

Isso só como exemplo.

Outra coisa é usar 2 passadas para converter o vídeo em melhor qualidade, conforme é apresentado no primeiro link do VOL, que você postou.

Mais informações sobre bitrate: http://www.digital-digest.com/nickyguides_translated/quality_br.htm
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: xluisfernando em 11 de Julho de 2010, 20:31
Estou testando possibilidades com as janelas zenity. Especialmente para permitir o acompanhamento do processo com alguma barra de evolução e a escolha de configurações como idioma e qualidade de imagem.

Testei esse script a partir de um atalho que criei para o menu aplicativo. Nesse teste percebi que é muito chato ficar esperando sem saber. Eu só tinha noção do andamento do processo pelo uso do processador. Demorou 45 minutos para fazer a conversão de um DVD de 3,8 Gb.

O pior é que nem se percebe quando terminou.
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: Kamei Hyoga em 11 de Julho de 2010, 21:56
Um modo de avisar, menos "intrusivo" (porque as vezes você está digitando algo e a janela que avisa do fim do processo, some devido a um clique ou tecla pressionada bem na hora que aparece, nem dando pra saber o que aconteceu), é:

Código: [Selecionar]
zenity --notification --text="Conversão terminada. Verifique a pasta $DESTINO"

Onde DESTINO é a variável que contém o endereço da pasta onde o usuário escolheu guardar o arquivo, caso ele tenha essa opção.
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: irtigor em 12 de Julho de 2010, 09:45
O pior é que nem se percebe quando terminou.

Você pode usar o osd-notify, no 10.04 você precisa instalar o libnotify-bin, exemplo de uso:
notify-send "Teste"
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: Kamei Hyoga em 12 de Julho de 2010, 10:27
irtigor, cara gostei muito dessa tua dica! Já vou usar em todos os meus scripts!!
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: xluisfernando em 05 de Agosto de 2010, 17:56
Tentei aperfeiçoar o script com pelo menos uma caixa de diálogo com barra de progresso, mas estou apanhando do zenity. Como objeto de estudo, selecionei a primeira parte do script, que criava a imagem e criei um outro script a parte:

Citar
#!/bin/sh
cat /dev/sr0 > /tmp/dvd.iso; eject
mv /tmp/dvd.iso /home/$USER/Vídeos

Então, tentei usar o zenity:

Citar
#!/bin/sh
cat /dev/sr0 > /tmp/dvd.iso | zenity --progress\
--auto-close\
--auto-kill\
--title="Criando Imagem"\
--text= ; eject
mv /tmp/dvd.iso /home/$USER/Vídeos

O problema é que as janela se forma corretamente, mas ela ou aparece antes do início do processo (que só se inicia se clico no botão OK), ou depois de que o mesmo já foi concluído, isso, dependendo das variações de posição da linha de comando zenity (tentei várias)

Estou usando o script, pois como sou professor e costumo usar filmes em sala de aula, achei mais prático converter o DVD para  um video AVI, para rodá-lo diretamente do HD do notebook em um datashow. Mas, a operação demora mais de meia hora e enquanto ela ocorre eu só consigo saber se ela ainda está ocorrendo pela taxa de utilização do processador.

Minha ideia é colocar uma barra de progresso para orientar quem for usar o script, mas estou esbarrando em algum detalhe.
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: seatle_94 em 11 de Outubro de 2010, 11:48
Olá xluisfernando

Me chamo Fernando (sou o criador do artigo do viva o linux que voce postou "FEHH).

Esse sprit seu é legal, parabéns, mas não te aconcelho a fazer-lo diretamente:

1º - A questão das tarjas pretas que iria sair sem configuração certa, pois cada filme é um caso diferente igual falei no meu tutorial. Se você deixa-las lá, vai consumir um alto número de bitrate

2º - Bitrate = quanto maior mais qualidade e maior o tamanho final do video, existem bastante calculadoras de bitrate na net, nativas e emuladas com o wine. Vária muito, escala da imagem 16:3 4:8 etc. Dá uma conferida!

3º - Bitrate do audio: Para filmes com muito efeito sonoro ou show te aconcelho 160 ou 192, 128 é quase um padrão para qualquer filme, caso o filme for algum trama ou etc que nao contem muitos efeitos sonoros pode-se usar ate 96. Vale a mesma coisa para o video, quanto maior o bitrate maior o arquivo final de audio.


Eu estou fazendo um script quase igual ao seu, mas com ate pré-visualização. Gosto muito de editar videos e busco aperfeiçoar meus métodos e compartilhar. Caso queira me add no msn para conversarmos, fernandofdutra(arroba)gmail.com.
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: asghan em 11 de Outubro de 2010, 12:13
O bitrate seria a taxa de compressão, geralmente DVD de 4.7Gb tem valor de 5mbps, lembrando q Bluray o mínimo é 15mbps, então indicaria um valor de 5000 para manter a mesma qualidade do arquivo
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: seatle_94 em 11 de Outubro de 2010, 14:16
asghan

5000 de bitrate geraria um arquivo quase do tamanho do DVD original.


Sendo que, uma boa conversão, mantém uma qualidade ótima, ainda mais usando o método de 2 passadas de bitrate.
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: asghan em 11 de Outubro de 2010, 19:57
asghan

5000 de bitrate geraria um arquivo quase do tamanho do DVD original.


Sendo que, uma boa conversão, mantém uma qualidade ótima, ainda mais usando o método de 2 passadas de bitrate.


Sim a minha sugestão é manter a mesma qualidade, só não entendi 2 passadas de bitrate
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: seatle_94 em 16 de Outubro de 2010, 10:31
Certo:

2 passadas e Bitrate significa, o mencoder (no nosso caso) faz uma varredura na primeira vez no video todo, vendo aonde sera necessário mais "capricho" para melhorar a qualidade final do video na segunda passada.


Faça um testes! Pegue um dvd e converta usando as 2 passadas num bitrate aceitavel para o tamanho, filmes ate 1:30 em 700megas acima desse tempo, coloque em 1200. A qualidade fica quase identica ao dvd original, cerca de 90%.
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: asghan em 16 de Outubro de 2010, 12:33
Valew pela dica !
Título: Re: Script para conversão de filme presente em mídia DVD para vídeo formato AVI
Enviado por: xluisfernando em 07 de Fevereiro de 2011, 23:58
Depois de usar esse script por algumas vezes eu percebi algumas falhas no processo de conversão, que dependo do DVD resultavam em defeitos na imagem do vídeo. Em alguns casos, ficava quadro a quadro.

Então, fiz uma alteração e em vez de usar o codec lavic mpeg4 passei a usar o xvid:
Citar
#!/bin/sh
#Este script realiza a conversao de um filme presente em midia DVD
#para um arquivo de video em formato avi, mantendo uma boa qualidade.
#Para utiliza-lo seu sistema precisara ter instalado em seu PC:
# O criador de CD/DVD (Brasero, K3b...)
# O Mplayer
# O Mencoder
# O W32codecs (No Synaptic e possivel verificar/instalar esses pacotes)
#Depois de conferir a instalacao desses pacotes, copie e cole o script
#(do #/bin/sh ao rm /tmp/dvd.iso) dentro de um editor (gedit, kedit,
# kwrite) e salve dentro da pasta de usuario. Em seguida execute pelo
#terminal/console sudo chmod +x nomedoarquivo Depois e so digitar no
#terminal ./nomedoarquivo que o processo sera iniciado
#Luis Fernando de Lima Junior

cat /dev/sr0 > /tmp/dvd.iso; eject
#Esse comando cria uma imagem a partir do DVD, dentro da pasta /tmp.
#Ao ser concluida a imagem o comando ejeta a midia do gravador de disco

iso="/tmp/dvd.iso"

mencoder -dvd-device $iso dvd://1 -alang pt -oac copy -ovc xvid -xvidencopts bitrate=1100 -vf lavcdeint,scale -zoom -xy 720 -o /dev/null

mencoder -dvd-device $iso dvd://1 -alang pt -oac mp3lame -lameopts cbr:mode=2:br=128:vol=10 -ovc xvid -xvidencopts bitrate=1100 -vf lavcdeint,scale -zoom -xy 720 -o /tmp/convertido.avi

mv /tmp/convertido.avi /home/$USER/Vídeos
#Esse comando foi pensado para uma instalacao Ubuntu, que ja vem com
#uma pasta /Videos dentro da pasta de usuario.

rm /tmp/dvd.iso