segunda-feira, 15 de setembro de 2008

Recompilar FFMPEG com suporte para MP3, AAC e AMR

O FFmpeg

O FFmpeg é uma ferramenta completa para gravar, converter e efetuar streaming de audio e vídeo. Inclui a libavcodec, uma poderosa biblioteca de codecs para audio e vídeo. O FFmpeg é desenvolvido no linux, mas pode ser compilado na maioria dos sistemas operacionais, incluindo o Windows.

Na última compilação do FFmpeg, não estava habilitado o suporte à medias em formato mp3, aac e amr. Esse tutorial mostra como recompilar o FFmpeg habilitando o surporte à esses formatos de mídia. O tutorial foi testado no ubuntu linux versão 8.04.1, no entando com algumas modificações pode facilmente ser adaptado para compilar o software em outros sistemas.

Para copiar os códigos fonte diretamente do site do cvs, utilizei o subversion. Para instalar o subversion digite no terminal:


sudo apt-get install subversion



Para organizar nosso processo, sugiro criar o diretório /proj em /tmp que conterá o código fonte do ffmpeg e dos codecs para compilação:

cd /tmp
mkdir proj



O próximo passo é fazer o download do código fonte do ffmpeg:

svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg


ou

wget http://ffmpeg.mplayerhq.hu/ffmpeg-export-snapshot.tar.bz2



Vamos descompactar o arquivo com os fontes e renomear a pasta original para ffmpeg:

sudo tar -jxvf ffmpeg-export-snapshot.tar.bz2
mv ffmpeg-export-snapshot ffmpeg




Bibliotecas e Dependências

Antes de compilar o ffmpeg, verifiquei a necessidade de softwares adicionais para que a compilação possa se dar corretamente. Para compilar, é necessário ter um compilador C/C++ instalado e algumas outras bibliotecas para auxiliar na compilação. Lembrando que no meu caso, estou executando os procedimentos no ubuntu linux, verifique a necessidade de instalar essas bibliotecas no seu sistema.

Instalando o g++ (~32MB) 4.2.3:

sudo apt-get install g++



Instalando o comando patch (2.5.9.4):

sudo apt-get install patch



Instalando pacotes autotools:

sudo apt-get install automake (autoconf automake m4)
sudo apt-get install libtool ( autotools-dev libtool )
sudo apt-get install yasm ( autotools-dev libtool )



Demais pacotes:

sudo apt-get install build-essential


Feita a instalação das ferramentas, vamos iniciar a compilação do ffmpeg propriamente dito. Antes de instalar as bibliotecas auxiliares, vamos compilar o código fonte original do ffmpeg para garantir que a configuração das bibliotecas e mesmo a integridade do código fonte esteja ok:

cd /tmp/proj/ffmpeg
sudo ./configure
make
make install


Se tudo correu bem até aqui, um arquivo binário chamado ffmpeg deve ter sido gerado. É o nosso programa já compilado no formato original.


Bibliotecas Externas (codecs)

Sugiro que seja criada uma pastas codecs em /tmp/proj para que os códigos fonte das bibliotecas externas sejam armazenados, em seguida criar uma pasta chamada lib em /tmp/proj para que sejam armazenadas as bibliotecas compiladas.

- mp3lame:
-----------------

Download do código fonte para a pasta /tmp/proj/codecs:
http://prdownloads.sourceforge.net/lame/lame-3.97.tar.gz?download

Descompactar e mover para a pasta dos fontes do ffmpeg:

cd /tmp/proj/codecs
tar xvfz lame-3.97.tar.gz
mv lame-3.97 ../ffmpeg



baixar o patch de correção para o diretório /tmp/proj/codecs e mover para a pasta /tmp/proj/ffmpeg/lame-3.97:

wget http://arrozcru.no-ip.org/ffmpeg_patches/lame.diff



no diretório /tmp/proj/ffmpeg/lame-3.97, aplique o patch de correção:

patch -p0 < ../lame.diff


Para compilar o mp3lame, gerando as libs no diretório /tmp/proj/lib:

./configure --prefix=/tmp/proj/lib --disable-shared --enable-static --disable-frontend --enable-yasm
make
make install




- faad2
----------

Download do código fonte para a pasta /tmp/proj/codecs:
http://prdownloads.sourceforge.net/faac/faad2-2.6.1.tar.gz?download

baixar o patch de correção para o diretório /tmp/proj/codecs e mover para a pasta /tmp/proj/ffmpeg:

wget http://arrozcru.no-ip.org/ffmpeg_patches/faad2-2.6.1.patch



Descompactar e mover para a pasta ffmpeg:

tar xvfz faad2-2.6.1.tar.gz
mv faad2 ../ffmpeg



no diretório /tmp/proj/ffmpeg, aplique o patch de correção:

patch -p0 < faad2-2.6.1.patch



Compilar o faad2, gerando as libs no diretório /tmp/proj/lib:

cd faad2
sh bootstrap
./configure --prefix=/tmp/proj/lib --enable-static --disable-shared
make LDFLAGS="-no-undefined"
make install



- faac
-----------

Download do código fonte para a pasta /tmp/proj/codecs:
http://prdownloads.sourceforge.net/faac/faac-1.26.tar.gz?download

Descompactar e mover para a pasta ffmpeg:

tar xvfz faac-1.26.tar.gz
mv faac ../ffmpeg



baixar o patch de correção para o diretório /tmp/proj/codecs e mover para a pasta /tmp/proj/ffmpeg:
wget http://arrozcru.no-ip.org/ffmpeg_patches/faac-1.26.patch

no diretório /tmp/proj/ffmpeg, aplique o patch de correção:

patch -p0 < faac-1.26.patch



Compilar o faac, gerando as libs no diretório /tmp/proj/lib

cd faac
sh bootstrap
./configure --prefix=/tmp/proj/lib --enable-static --disable-shared
make LDFLAGS="-no-undefined"
make install



- amr_nb
-----------

É necessário o unzip e o wget para instalação desse codec, assim como acesso a Internet.

Download do código fonte para a pasta /tmp/proj/codecs:
http://ftp.penguin.cz/pub/users/utx/amr/amrnb-7.0.0.0.tar.bz2

Descompactar e mover para a pasta ffmpeg:

tar -jxvf amrnb-7.0.0.0.tar.bz2
mv amrnb-7.0.0.0 ../ffmpeg



Compilar o amr_nb, gerando as libs no diretório /tmp/proj/lib

cd amrnb-7.0.0.0
./configure --prefix=/tmp/proj/lib --enable-static --disable-shared
make
make install



- amr_wb
-----------

É necessário o unzip e o wget para instalação desse codec, assim como acesso a Internet.

Download do código fonte para a pasta /tmp/proj/codecs:

wget http://ftp.penguin.cz/pub/users/utx/amr/amrwb-7.0.0.2.tar.bz2



Descompactar e mover para a pasta ffmpeg:

tar -jxvf amrwb-7.0.0.2.tar.bz2
mv amrwb-7.0.0.2 ../ffmpeg



Compilar o amr_wb, gerando as libs no diretório /tmp/proj/lib

cd amrwb-7.0.0.2
./configure --prefix=/tmp/proj/lib --enable-static --disable-shared
make
make install



Recompilar FFmpeg usando codecs já compilados

Para recompilar o ffmpeg, deve-se indicar os codecs que serão adicionados no ./configure e também o caminho dos includes e libs dos codecs:

./configure --enable-libmp3lame --enable-libfaad --enable-gpl --enable-libfaac --enable-gpl --enable-libamr-nb --enable-nonfree --enable-libamr-wb --enable-nonfree -extra-ldflags=-L/tmp/proj/lib/lib --extra-cflags=-I/tmp/proj/lib/include
make
make install



Desse forma geramos uma nova versão do ffmpeg com suporte a audio mp3, aac e amr.

Para maiores detalhes consulte:
http://arrozcru.no-ip.org/ffmpeg_wiki/tiki-index.php?page=HomePage

Para detalhes de como recompilar o ffmpeg especificamente para o ubuntu linux, esse endereço oferece uma descrição detalhada:
https://wiki.ubuntu.com/ffmpeg

Nenhum comentário: