segunda-feira, 18 de maio de 2009

Como Converter Vídeos no Linux?

  • Introdução

Converter arquivos de vídeos e som no Linux, abrangendo os mais variados formatos e codecs, pode ser uma tarefa razoavelmente simples, bastando conhecer o programa certo. Nesta dica vamos apresentar o programa "ffmpeg". Este conversor de áudio e vídeo é extremamente flexível e poderoso, em linha de comando, permitindo que você faça as suas conversões remotamente, em seu servidor, ou mesmo escreva programas de conversão que fiquem rodando no servidor, esperando a próxima tarefa para ser disparada. O ffmpeg não só converte mídias, como também muda o bitrate, redimensiona o vídeo, dentre muitas outras opções avançadas.
Para baixar o ffmpeg, vá até a página oficial do projeto:

http://ffmpeg.mplayerhq.hu/

Ou use o seu gerenciador de pacotes favorito. Pode ser instalado via apt-get com o comando:

apt-get install ffmpeg

Observe que o ffmpeg necessita de algumas bibliotecas de áudio e vídeo, como a libavcodec e a libavformat. Para instalá-lo "na mão", procure antes as versões requeridas destas bibliotecas e as instale. Para conhecer a sintaxe e escrever a linha de comando correta, veja a página do manual "man ffmpeg" ou o FAQ oficial:

http://ffmpeg.mplayerhq.hu/faq.html

Existem versões do ffmpeg para várias plataformas, o que facilita o seu uso ou a implementação em um laboratório de convesão profissional. Abaixo, um breve tutorial de alguns parâmetros:


  • Conversão simples
Um arquivo pode ser convertido de maneira simples apenas com o comando:

ffmpeg -i arquivo.wmv arquivo.avi

O parâmetro "-i" indica o arquivo fonte. O formato do arquivo de saída é automaticamente reconhecido pelo ffmpeg, a partir da sua extensão.


  • Sugerindo um Codec de Vídeo

Se você quiser um codec específico, como Xvid ou DivX (versão 4+), use a opção -vcodec, passando o codec desejado (mpeg4, para o caso citado).

ffmpeg -i arquivo.wmv -vcodec mpeg4 arquivo.avi


  • Sugerindo um Codec de Áudio

Assim como o vídeo do seu arquivo pode ser comprimido, igualmente o áudio também o pode, reduzindo drasticamente o tamanho do arquivo final. Em alguns casos, como mídias para celulares, é necessário que o áudio esteja em AAC+ (AAC Plus), sob pena de não ser executado. Assim, utilize a opção -acodec, passando o codec desejado (libfaac, para o caso citado).

ffmpeg -i arquivo.wmv -vcodec mpeg4 -acodec libfaac arquivo.avi


  • Como converter vídeos para iPod?

ffmpeg -i arquivo.wmv -acodec libfaac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv -trellis 2 -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X output.mp4

Este comando acima contém diversas configurações do áudio e do vídeo necessárias para que seu vídeo seja convertido no formato suportado pelo iPod. Veja mais destas opções adiante...


  • Definindo o bitrate do áudio e do vídeo
O bitrate do áudio e do vídeo são definidos separadamente, com os parâmetros:

-ab: é uma opção apenas do áudio, que define o bitrate em bits/s.
-b: é uma opção apenas do vídeo, que define o bitrate em bits/s.


  • Definindo o Frame Rate (quadros por segundo)
Basta usar a opção "-r" seguida do número desejado. Por exemplo, para forçar 25 quadros por segundo, use:

ffmpeg -i arquivo.wmv -r 25 arquivo.avi

Mas, cuidado: alguns codecs só suportam pequeno número de framerates padronizados. Se este for seu caso, a informação de framerate será ignorada.


  • Como ripar DVD com o ffmpeg??
Para este também tem uma "fórmula", com toda a configuração necessária!! Segue:

ffmpeg -i cap_1.vob -f avi -vcodec mpeg4 -b 800k -g 300 -bf 2 -acodec libmp3lame -ab 128k cap.avi


  • Como ler a entrada padrão, ou escrever para a saída padrão?
Basta usar, em lugar do nome do arquivo, o caracter "-".


  • Como fazer um vídeo a partir de figuras?
Primeiramente, coloque todas as figuras no mesmo diretório e as renomeie para um padrão qualquer, como img001.jpg, img002.jpg, img003.jpg, e assim por diante. Depois, execute o comando:

ffmpeg -f image2-i img%d.jpg saida.mpg


  • Como inspecionar as streams presentes em um arquivo?
Um arquivo de vídeo, por exemplo, pode estar em um formato dito container, ou seja, uma espécie de cápsula onde se podem encontrar diversas streams de áudio, vídeos e legendas. Com o ffmpeg é possível se extrair cada uma delas, ou mesmo formar um arquivo novo com determinadas streams específicas de arquivos diferentes. Para inspecionar um arquivo e descobrir quais streams existem nele, basta executar o comando:

ffmpeg -i arquivo.mp4

As streams estão no fim da mensagem, normalmente numeradas no padrão "0.0", "0.1", etc. Exemplo:

Duration: 00:01:48.48, start: 0.000000, bitrate: 550 kb/s
Stream #0.0(und): Audio: libfaad, 44100 Hz, stereo
Stream #0.1(und): Video: h264, yuv420p, 480x200, 23.97 tb(r)

Indica que a primeira stream é de áudio e a segunda de vídeo. O codec da primeira é libfaad, com 44100 Hz de freqüência e bitrate de 550 kb/s. Não tem stream de legenda neste arquivo.


  • Como trabalhar com legendas?
Para incluir uma legenda, basta usar uma das opções:

-scodec codec: define o codec da legenda (subtitle codec). O padrão de arquivos VOB, por exemplo, é o codec dvdsub. Se você não sabe qual é o codec e simplesmente quer copiar o existente no arquivo original, use a opção copy em lugar do nome do codec.

-newsubtitle: adiciona uma legenda inteiramente nova para seu arquivo de saída!! Pode ser esta sua opção!!

Como vou saber onde está a minha legenda?? Bom, é preciso primeiro inspecionar um arquivo, conforme demonstrado no item acima, e escolher a stream correta. Para montar seu arquivo final com streams de diversos arquivos, inclusive de legenda, siga a orientação abaixo...


  • Como montar um arquivo de partes de outros?
Simples e fácil: basta identificar as streams de cada arquivo fonte e usar a opção -map. Exemplo:

ffmpeg -i filme.vob -i audio.wav -map 0:0 -map 1:0 etc...

Este trecho de comando indica 2 arquivos de entrada, o arquivo "0" e o "1", e indica, pela opção map, que deve compor o arquivo de saída com a primeira stream do primeiro arquivo "0" e a primeira stream do arquivo "1".


Diversas outras opções e exemplos presentes na página de manual e no FAQ bem documentado do projeto!! Um tutorial avançado e detalhado encontra-se aqui.
O ffmpeg é livre e gratuito, seguro e poderoso!! Boa sorte!!

(Gostou?? Detestou?? COMENTE!!!)

16 comentários:

Anônimo disse...

Parabéns. Grande tutorial.

Anônimo disse...

Bom tutorial. Uma dúvida, vc sabe como inserir legendas em um video com o ffmpeg?

Marco André Lopes Mendes disse...

Muito útil este tutorial. Eu gostaria de ver mais opções, principalmente na conversão de vídeos grandes vindos de filmadoras para postar em sites de vídeos, como youtube e blip.tv.

No meu caso, são palestras, então o importante é que o áudio fique muito bom. Já a imagem não é a prioridade. Normalmente os vídeos originais são em formato mpeg.

Um grande abraço

Fitti disse...

Muito bom tutorial. Uma questão: qual o melhor conversor? O ffmpeg ou o mecncoder?

ma disse...

muito bom.
muito mesmo.

O Pajé disse...

Obrigado, pessoal, pela força!!!

Respondendo às perguntas, uma a uma...
Primeiramente a pergunta de Fitti:

O Mencoder é um outro conversor acessado por linha de comando, GNU, que vem com o famosos player MPlayer. Com a experiência que eu tenho, de anos no mundo da informática, posso dizer com muita propriedade: a melhor ferramenta é aquela que te serve melhor. Ou seja, se você sempre usou o MEncoder e ele te serve bem, continue com ele!!

Desvantagens do MEncoder:
Suporta apenas os codecs que o MPlayer entende, ou seja, pode ser um pouco mais limitado que o ffmpeg.

Vantagem principal do MEncoder:
Existem vários frontends gráficos para ele, inclusive Konverter, do KDE.

Ambos são muito poderosos e podem facilmente executar grande número de tarefas.

O Pajé disse...

Olá pessoal!!

Atualizei o tutorial para compreender mais detalhes, inclusive como se inserir legendas. Confiram!!

O Pajé disse...

Olá Marcos!!

Os vídeos do Youtube (e demais portais compartilhadores de vídeo, em geral) suportam áudio a 44100Hz e stereo. O formato do vídeo normalmente é 480x200 de resolução, com 23.97 fps.
A opção de 44100Hz já é a freqüência padrão do ffmpeg, mas, se quiser alterar, utilize a opção "-ar freq".

Para converter seus arquivos, basta usar as opções descritas neste tutorial, ajustando principalmente o tamanho do vídeo, em pixels (opção -pix_fmt). Tente inspecionar um arquivo mpg de sua filmadora (conforme descrito no fim deste tutorial) e ver qual a configuração da stream de áudio. Possivelmente você nem precisará mexer em nenhum detalhe... mas, se precisar, lembre-se de que a qualidade de seu áudio precisa ser boa no momento da filmagem, para garantir uma boa manipulação.
Outra opção é, caso seu som não esteja legal, usar uma mesa de som e um amplificador para capturar melhor sua voz, e um bom microfone, claro.
Espero ter ajudado!!

NeoStrider disse...

Fala pagé! blz?!
Só hoje vi teu comentário la no meu blog (o blogspot não me avisa) e ja re-fiz o upload do pacote:

http://batterypoweredgames.blogspot.com/2009/05/angstron-2-droid-hunter-beta-test-2.html

Legal ver o interesse de alguem que também é do Rio!
[]s

NeoStrider disse...

Oi Pajé. Foi mal o spam ai,mas agora é a definitiva (ja no sourceforge):
http://batterypoweredgames.blogspot.com/2009/07/angstron-2-droid-hunter-release.html

O Pajé disse...

Beleza, rapaz!! Muito obrigado!! Já estou baixando!!

Marcelo disse...

Obrigado pelo post. Animal. Consegui realmente utilizar o ffmpeg, consegui converter o arquivo de wmv p avi com codec mpeg4 mas num passou no DVD player. Apenas o micro.

Mto grato, de qqr forma :)

abs

simba

O Pajé disse...

Olá Marcelo!!

Obrigado pelos elogios!!
Para um vídeo passar no DVD Player, ele precisa estar dentro das especificações de codecs e configurações suportados pelo aparelho. Faça o seguinte para tentar resolver o problema: inspecione com o ffmpeg um arquivo que funciona em seu DVD (ffmpeg -i arquivo.avi) e compare os detalhes da saída deste comando com o arquivo que você gerou. Veja se os bitrates correspondem, se há algo diferente nos codecs de vídeo e áudio, etc.

Grande abraço,

Gabriel

Wilson Cohen disse...

Grande Pagé!
Bem explicadinho
Cara, pela primeira vez na minha vida me animei pra usar o ffmpeg.Já tinha desistido há muito tempo. Nesses dias meu filho precisou fazer um video pra escola feito no celular em 3gp e tinha que passar pra wmv. Passei uma madruga tentando convertê-lo. Apesar de ter feito a conversão pelo Zamzar online (depois de uma longa batalha perdida pelo ffmpeg), achei teu blog altamente incentivador.
brigadão brother
vamo pra cima dele de novo!

Grande tutorial
Brigado cara
Valeus

O Pajé disse...

Grande Wilson!! Muito obrigado pelo elogio ao artigo!! Não sabe como eu fico feliz de ver as pessoas lendo estes artigos e simplificando suas vidas!! Espero poder ajudar sempre!!

Fernando Nascimento disse...

minha duvida é a seguinte... quero converter qualquer video upado no meu servidor de streaming para o formato .mp4

Qual codigo devo inserir no script, visto que ja ta tudo instalado!
Não sei o comando!