Índice das dicas

Recompilando o ffmpeg com suporte a x264 e aac

Por Carlos E. Morimoto em 3 de outubro de 2009 às 14h23

10

Se você tem um smarphone com o S60, ou um iPod Touch/iPhone, pode usar meu script converter-video.sh para converter vídeos no Linux e assim poder assistí-los em qualquer lugar.

No caso dos aparelhos com o S60, você pode usar o próprio Real Player que vem pré-instalado e no caso do iPod Touch/iPhone usar o dTunes ou o AVPlayer, que estão disponíveis (para aparelhos desengaiolados) através do Cydia.

01

O grande problema é que o ffmpeg distribuído no Debian Lenny e no Ubuntu vem com o suporte a x264 e aac desativado (por questões de patentes), impossibilitando a conversão. Como sempre, existe uma solução, mas ela envolve recompilar o ffmpeg a partir dos fontes, o que devido ao grande número de dependências, não é uma tarefa simples. De qualquer maneira, aqui vão os passos necessários:

No Ubuntu, adicione o repositório do Medibuntu, incluindo a linha a seguir no "/etc/apt/sources.list":

deb http://packages.medibuntu.org/ intrepid free non-free

Em seguida, instale a chave do repositório usando o apt-get e atualize as listas do apt:

sudo apt-get install medibuntu-keyring
sudo apt-get update

No Debian, adicione o repositório do Debian-Multimedia, incluindo no "/etc/apt/sources.list":

deb http://www.debian-multimedia.org lenny main
deb-src http://www.debian-multimedia.org etch main

E instale a cheve do repositório usando o apt:

apt-get install debian-multimedia-keyring
apt-get update

O próximo passo é remover os pacotes do ffmpeg e do x264 anteriormente instalados, abrindo o caminho para a instalação dos novos pacotes:

sudo apt-get purge ffmpeg x264 libx264-dev

Chegamos então à instalação dos pacotes com as bibliotecas e ferramentas que serão usadas durante a compilação. A lista é um pouco longa:

sudo apt-get install build-essential subversion git-core \
checkinstall yasm texi2html libfaac-dev libfaad-dev libmp3lame-dev \
libsdl1.2-dev libtheora-dev libx11-dev libxvidcore4-dev zlib1g-dev

Falta agora o mais importante, que é baixar o código fonte, gerar o pacote e instalá-lo. Estes passos foram retirados do howto disponível no Tutorials&Tips do ubuntu Forum e funcionam tanto no Debian Lenny quanto nas versões atuais do Ubuntu.

Comece baixando o código fonte do pacote x264 usando o git:

cd
git clone git://git.videolan.org/x264.git

Ele criará a pasta "x264" dentro do seu diretório home. Acesse-a e use os tradicionais "./configure" e "make" para compilar o pacote:

cd x264
./configure
make

O passo final é usar o checkinstall para gerar o pacote .deb e instalá-lo. Os comandos anteriores podem ser usados com seu login de usuário, mas este último precisa ser executado como root, daí o uso do sudo:

sudo checkinstall --fstrans=no --install=yes --pkgname=x264 \
--pkgversion "1:0.svn" --default

Agora faça o mesmo para o ffmpeg, baixando os fontes usando o svn e gerando o pacote .deb com o checkinstall. No final do processo, o pacote será instalado e uma cópia será salva na pasta /root/ffmpeg (o arquivo ffmpeg_3:0.svn.deb), permitindo que você o instale em outras máquinas com a mesma versão do sistema:

cd
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-nonfree --enable-pthreads \
--enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora \
--enable-libx264 --enable-libxvid --enable-x11grab
make
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg \
--pkgversion "3:0.svn" --default

Com isso você terá a versão completa do ffmpeg instalada e poderá converter os vídeos usando o script, ou usando os passos manuais descritos no livro de smartphones: http://www.hardware.com.br/livros/smartphones/realplayer.html

No Windows você pode fazer a conversão usando o Super, que é também gratuito.

10 comentáriosPor Carlos E. Morimoto. Revisado 24 de março de 2011 às 14h51

Comentários

 
por Fabio Lima CE (anônimo) em 5 de outubro de 2009 às 23h26
Eu reparei algumas diferenças entre o FFMPEG no Linux e no Windows (que eu achei dentro da pasta do VDownloader).

Exemplos:
Nomes de codecs no Windows: aac, amr_nb, faad
Nomes de codecs no Linux: libaac, libamr_nb, libfaad

Bitrate no Windows: 128 (subentende-se 128000)
Bitrate no Linux: 128k (usa-se k ou 128000)

Nota importante: -b 128 no linux é 128 bps mesmo, e não 128000 bps como no windows. No Linux, caso o usuário coloque um bitrate muito baixo como 128 bps o FFMPEG vai assumir o valor padrão que é 64k (64000 bps). No caso de vídeo o valor default é 200k (avi, xvid etc).

Eu acho que essas diferenças são devido a recentes atualizações na interface do programa para se adequar aos nomes "verdadeiros" dos codecs no Linux, além de permitir bitrates mais precisos.
 
por realmagnum (anônimo) em 5 de outubro de 2009 às 20h06
Morimoto, no livro de Smartphones, indicado neste texto, fala para fazer a conversão usando o seguinte comando:

$ ffmpeg -i video.avi -f mp4 -vcodec mpeg4 -b 256000 -r 15 -s 320x240 -acodec aac -ar 44100 -ab 64 -ac 2 video-convertido.mp4

Contudo, o vídeo convertido ficou sem áudio. Consegui resolver substituindo o "aac" por "libfaac". Foi um erro de digitação do livro ou eu usei um codec diferente? Existe o codec "aac"? Como eu poderia instalá-lo?

De qualquer forma, muito obrigado pela dica. Usando o "libfaac" já resolvi meu problema imediato. O meu N85 exibiu o filme corretamente, usando somente o reprodutor nativo.
 
por Eduardo Kalinowski (anônimo) em 5 de outubro de 2009 às 09h27
Não sei quanto ao Ubutu, mas no Debian não precisa recompilar o ffmpeg para ter suporte a x264, aac e outras coisas que a versão oficial dos repositórios não tem. Basta instalar a versão existente no http://www.debian-multimedia.org , que já tem tudo isso incluído.
 
por Fabio Lima CE (anônimo) em 4 de outubro de 2009 às 16h55
Ótimo artigo. Pra complementar, essas distribuições Debian-like não são as únicas que têm suporte reduzido de formatos. O Fedora também disponibiliza um FFMPEG sem suporte aos formatos de mídia mais comuns em dispositivos móveis.

Para quem usa Fedora e derivados talvez seja interessante ler esta postagem, que fala sobre compilação do FFMPEG Fedora:

http://blogdofabiolima.blogspot.com/2009/03/como-compilar-o-ffmpeg-no-fedora.html

Eu particularmente adoro o FFMPEG. Uso ele pra tudo que envolve manipulação de vídeo. Sempre prefiro ele, porque me dá liberdade de escolher diversos parâmetros de conversão de audio e vídeo.

Mas quando encontrei comecei a usar o Mencoder, reparei que ele possui maior flexibilidade que o FFMPEG. Exige mais parâmetros e dá suporte a mais formatos. O problema é que o bixo tem uma sintaxe mais complicada.
 
por MaxRaven (anônimo) em 4 de outubro de 2009 às 15h22
Só confirmando, funciona perfeito, pena que o operador do soft é burro e esqueceu de colocar as legendas embutidas no filme.
 
por Mota (anônimo) em 4 de outubro de 2009 às 07h45
Eu aqui prefiro usar o Mencoder mesmo:

$ mencoder arquivo.avi -vf scale=320:240 -of lavf -lavfopts format=mp4 -oac faac -faacopts br=64 -ovc x264 -x264encopts bitrate=450:threads=2 -ofps 15 -o teste.mp4

O "threads=2" é opcional e provavelmente só vai ter um efeito positivo se usado em processadores multicore.

Não testei se o arquivo gerado funciona em smartphones, mas pelo menos funciona em qualquer player(não somente no MPlayer) desde que se tenha os codecs instalados é claro.
 
por MaxRaven (anônimo) em 4 de outubro de 2009 às 06h32
Só pra tirar a duvida to ripando um dvd aqui (tava adiando, preguiça de esperar o tempo que leva e deixar o pc ocupado, mas como vou sair agora) usando o x264 e o aac como pode ver aqui:
http://yfrog.com/5gprintvwp

Quando chegar em casa vejo como ficou e digo se ficou bom. Até pq nunca usei o handbrake em linux, só no win.
 
por Carlos E. Morimoto em 4 de outubro de 2009 às 05h53
Não sei sobre o handbrake, mas quase todos os conversores para Linux utilizam o ffmpeg/mencoder para realizar a conversão, assim como no caso do meu script. Resolvendo o problema do ffmpeg, você resolve junto os problemas da turma toda.
O maior problema nessa caso é que não existe ainda um sistema simples para recompilar pacotes no Linux em casos como esses. Você pode ver que recompilar o ffmpeg é quase tão complicado quanto gerar um novo executável do kernel... Poderia ser mais simples.
 
por MaxRaven (anônimo) em 4 de outubro de 2009 às 05h25
Usar o HandBrake para fazer a conversão não resolveria o problema de ter de recompilar tudo?
Se não me engano ele já vem com as libs embutidas e também é multiplataforma.
http://handbrake.fr
 
por DivisionByZero (anônimo) em 4 de outubro de 2009 às 00h22
Uhmmm ... Será que alguém não poderia fazer isto tudo e disponibilizar o .deb para o pessoal instalar? Pelo menos tá ensinado como fazer aqui.