domingo, 25 de outubro de 2009

Uma grande ferramenta chamada FFMPEG [LINUX]


FFMPEG é uma pequena maravilha. FFMPEG oferece a solução para gravar, converter e fazer "stream" de áudio e vídeo. FFMPEG é multi-plataforma (Linux, Windows e Mac).

E é também mais de que tudo isto. Este projecto está dividido em vários componentes, dos quais estão: ffmpeg, ffserver, ffplay, libavutil, libavcodec, libavformat, libavdevice e libswscale.

São vários os programas que usam FFMPEG como "motor" para fazer conversões de formatos: MediaCoder, WinFF, MobileMediaConverter e outros tantos.

Vou dividir este artigo em várias partes, para melhor leitura e organização:

  • Parâmetros usados
  • Sintaxe da linha de comandos (terminal)
  • Exemplos de Conversão de Vídeo e Áudio



Parâmetros usados:
Parâmetros mais comuns

 -i ‘nome-do-ficheiro’   --- nome-do-ficheiro será o caminho ou 'Path' do ficheiro fontes (ou de entrada)
 
-y       --- Sobrescrever o ficheiro existente de saída sem pedir confirmação
 
-an     --- desactivar o áudio


Parâmetros relacionados com Audio:

-acodec mp3 --- usar o codec de áudio mp3 (por exemplo, mas também você pode indicar para usar outro. P.ex: ogg, aac, wma2, etc.)

-ar 44100  --- ajustar a taxa mostra de áudio (audio sampling rate) em Hz. Por defeito este valor é 44100.

-vol 256  --- mudar o volume do som (256=normal)

-ab 128  --- ajustar a taxa de bits de áudio (em bits/s). Por defeito este valor é 64

-ac 2  --- ajustar o numero de canais de som. Por defeito este valor é 1 (mono)

 
 
 


Parâmetros relacionados com Vídeo: 

-f asf   --- escolher um formato para o ficheiro de saída, por vezes também conhecido como "contentor" ( do inglês 'container'). Neste caso será asf.

-vcodec h264  --- especifica o codec de vídeo a ser usado. Neste caso será o codec h264, assim como poderia ser wmv3, theora, mpeg4 e um largo etecetera.

 -sameq  --- usar a mesma qualidade que o ficheiro de entrada (ou ficheiro a converter)

 -b 200   --- ajustar a taxa de bits de vídeo em bits/s. Por defeito este valor é 200 

-r 15  --- ajustar as imagens por segundo do vídeo (frame rate). Por defeito este valor é 25 


 

 Sintaxe da linha de comandos (terminal)

Uso Geral:

 ffmpeg –i ‘ficheiro-a-converter’ ‘ficheiro-convertido’


Exemplo:

 ffmpeg -i demo.mpg demo.flv

Neste exemplo FFMPEG converterá o vídeo demo.mpg para o formato de vídeo demo.flv


Exemplos de conversão de vídeos:

 Converter vídeos MOV para FLV usando FFMPEG:


ffmpeg -i video1.mov video1.flv                                                          
 Isto converterá o ficheiro video1.mov para video1.flv

Converter vídeos Mpeg para FLV usando FFMPEG:



ffmpeg -i video1.mpeg video1.flv
Isto converterá o ficheiro video1.mpeg para video1.flv

Converter vídeos AVI para FLV usando FFMPEG:


ffmpeg -i video1.avi -s 500×500 video1.flv

Isto converterá o ficheiro video1.avi para video1.flv e será feito um redimensionamento da resolução do vídeo para 500×500


Converter vídeos 3GP para FLV usando FFMPEG:


ffmpeg -i video1.3gp -sameq -an video1.flv

Isto converterá o ficheiro video1.3gp para video1.flv e serão conservados os ajustes originais de vídeo, sendo desactivada a pista de áudio do mesmo.


Converter vídeos MPEG para 3GP usando FFMPEG: 


ffmpeg -i video1.mpeg -ab 8.85k -acodec libamr_wb -ac 1 -ar 16000 -vcodec h263 -s qcif video2.3gp
Isto converterá o ficheiro video1.mpg para video2.3gp. Serão aplicados ajustes específicos para o formato 3gp, já que sendo um formato de dispositivos móveis requer uma adaptação tanto do áudio como do vídeo. Os valores podem variar conforme o dispositivo os requeira.

Converter vídeos FLV para MP4 usando FFMPEG:

ffmpeg -i video1.flv -vcodec h264 -r 25 -b 200 -ab 128 -acodec mp3 -ac 2 -ar 44100 video1.mp4 

Isto converterá o ficheiro video1.flv para video1.mp4
O vídeo gerado video1.mp4 terá o codec de vídeo h264, com 25 imagens por segundo ( -r 25), taxa de bits =200 bits/s ( -b 200), taxa de bits de audio =128 ( -ab 128), codec de áudio mp3 ( -acodec mp3), 2 canais de áudio ( -ac 2 ), com frequência de mostra de áudio de 44100 Hz ( -ar 44100 )


Converter um vídeo em imagens usando FFMPEG:

ffmpeg -i video.mpg imagem%d.jpg

Com este comando serão criadas várias imagens: imagem1.jpg, imagem2.jpg, … Para las imagens resultantes podem ser utilizados os formatos PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TIFF ou SGI.


Converter um vídeo para ver no seu iPod/iPhone usando FFMPEG:

ffmpeg -i entrada.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320×180 -title X saida.mp4

* Vídeo original: entrada.avi
* Codec de áudio: aac
* Bitrate de áudio: 128kb/s
*Codec de vídeo: mpeg4
* Bitrate do vídeo: 1200kb/s
* Tamanho de vídeo: 320×180 (resolução)
* Vídeo gerado: saida.mp4


Converter um vídeo para ver na sua SONY PSP usando FFMPEG:

ffmpeg -i entrada.avi -b 300 -s 320×240 -vcodec xvid -ab 32 -ar 24000 -acodec aac saida.mp4

* Vídeo original: entrada.avi
* Codec de áudio: aac
* Bitrate de áudio: 32kb/s
* Codec de vídeo: xvid
* Bitrate de vídeo: 1200kb/s
* Tamanho de vídeo: 320×180 (resolução)
* Vídeo gerado: saida.mp4


Converter um ficheiro de vídeo .avi a um ficheiro de imagem .gif usando FFMPEG:


ffmpeg -i entrada.avi saída.gif

Tenha cuidado com o vídeo que escolhe para converter a gif, já que se o vídeo for muito grande, a conversão será demorada e o gif resultante será também um ficheiro bastante grande.



Converter um vídeo .avi a formato .dv usando FFMPEG:


ffmpeg -i entrada.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 saida.dv
Ou então:
  ffmpeg -i entrada.avi -target pal-dv saída.dv

Converter um vídeo .avi para .mpeg para reprodutores de DVD usando FFMPEG:


ffmpeg -i entrada.avi -target pal-dvd -ps 2000000000 -aspect 16:9 saida.mpeg


* -target pal-dvd: Formato de saída
* -ps 2000000000: Tamanho máximo do ficheiro em bits (no exemplo, 2Gb)
* -aspect 16:9: Panorâmico


Converter um vídeo .avi para formato divx usando FFMPEG:

ffmpeg -i entrada.avi -s 320×240 -vcodec msmpeg4v2 saida.avi

* -vcodec msmpeg4v2: Formato divx (msmpeg4v2)
* -s 320x240: resolução do vídeo a criar. Pode alterar a resolução conforme aquela que deseje.


Converter um vídeo Ogg Theora a Mpeg DVD usando FFMPEG:

ffmpeg -i entrada.ogm -s 720×576 -vcodec mpeg2video -acodec mp3 saida.mpg


Converter um vídeo .avi para  SVCD mpeg2 usando FFMPEG:
 
Para PAL:

 ffmpeg -i entrada.avi -target pal-svcd saida.mpg

Para NTSC:

ffmpeg -i entrada.avi -target ntsc-svcd saida.mpg

Converter um vídeo .avi para VCD mpeg2 usando FFMPEG:
Para PAL:

ffmpeg -i entrada.avi -target pal-vcd saida.mpg

Para NTSC:

ffmpeg -i entrada.avi -target ntsc-vcd saida.mpg


 Codificação de um vídeo com várias "passadas" usando FFMPEG:

ffmpeg -i entrada -pass 2 -passlogfile ffmpeg2pass saida


Fazer um vídeo com um conjunto de imagens usando FFMPEG:
 (Neste exemplo pode usar como máximo 9 imagens)

ffmpeg -f image2 -r 1 -i imagem%d.jpg -r 25 video.avi
Isto gera um vídeo com um segundo por cada imagem, aproximadamente. Se deseja que seja mais lento, digamos, uns 5 segundos por imagem, use:

ffmpeg -f image2 -r 0.2 -i imagem%d.jpg -r 25 video.avi


Fazer um vídeo com um conjunto de imagens usando FFMPEG:
 (Neste exemplo pode usar mais de 10 imagens (até 99 imagens))


ffmpeg -f image2 -r 0.2 -i imagem%02d.jpg -r 25 video.avi

Se deseja usar até como máximo 999 imagens, simplesmente substitua no comando imagen%02d.jpg por imagem%03d.jpg

NOTA 1: As suas imagens a utilizar devem estar todas dentro da mesma pasta, e o comando executado de FFMPEG deve ser desde essa mesma pasta onde tem as imagens !
NOTA 2: As imagens devem ter nomes consecutivos. Por exemplo se usa a expressão “imagem%02d.jpg” esta servirá para todas as imagens com nomes do tipo: imagem00.jpg, imagem01.jpg, imagem02.jpg, imagem03.jpg... até 99 imagens... ou use "nome-do-ficheiro" (aquele que quiser) em vez de "imagem", mas desde que sejam nomes consecutivos iguais. 
NOTA 3: Para usar com a expressão “imagem%02d.jpg”, esta servirá para os seguintes nomes: imagem000.jpg, imagem001.jpg, imagem002.jpg, imagem003.jpg, ... imagem999.jpg, etc… até 999 imagens.



Unir dois videos usando FFMPEG:


Quando queremos unir 2 vídeos desde o terminal, devemos usar o comando cat para concatenar (juntar) os vídeos. O problema é que existem poucos formatos de video que podem ser unidos com este comando (MPEG-1, MPEG-2 PS, DV).
Portanto, deve primeiro converter os vídeos a mpeg, juntá-los e depois voltar a converter ao formato que esteja a trabalhar.

Por exemplo, se queremos unir video1.avi e video2.avi, o processo seria o seguinte:

1. Converter os vídeos a mpeg:


ffmpeg -i vídeo1.avi -sameq vídeo1.mpeg
ffmpeg -i vídeo2.avi -sameq vídeo2.mpeg

2. Unir os vídeos usando cat:

cat vídeo1.mpeg vídeo2.mpeg > vídeo_temporario.mpeg

3. Reconverter o vídeo resultante ao formato desejado:

ffmpeg -i vídeo_temporario.mpeg -sameq video_final.avi
O uso da opção -sameq indica a FFMPEG que use a mesma qualidade (resolução, bitrate) no vídeo de saída.




Obter informação de um video usando FFMPEG:

Simplesmente escreva:

ffmpeg -i nome-do-video.avi

Pode usar este comando para qualquer tipo de ficheiro (.avi, .mpg, wmv, asf, etc...) que FFMPEG tenha suporte.



 Exemplos de conversão de áudio:


Conversão de áudio aac para mp3 usando FFMPEG com Meta-data:


ffmpeg -i audio1.aac -ar 22050 -ab 32 -map_meta_data audio1.mp3:audio1.aac audio1.mp3

Isto converterá o ficheiro audio1.aac para audio1.mp3 ficando o áudio com uma frequência de 22.05 Khz e uma taxa de bits de áudio de 32Khz. Será também copiada a meta-data do ficheiro .aac para o ficheiro .mp3


Conversão de áudio WMV para MP3 usando FFMPEG:


ffmpeg -i audio1.wmv audio1.mp3

Isto converterá o ficheiro audio1.wmv para audio1.mp3


Conversão de áudio WMV para FLV usando FFMPEG:


ffmpeg -i audio1.wmv audio1.flv

Isto converterá o ficheiro audio1.wmv para audio1.flv, no entanto será gerado apenas conteúdo de áudio.


Conversão de áudio AMR para MP3 usando FFMPEG:


ffmpeg -i audio1.amr -ar 22050 audio1.mp3

Isto converterá o ficheiro audio1.amr para audio1.mp3 ficando com a taxa de áudio a 22.05 Khz


Conversão de áudio aac para mp3 usando FFMPEG:


ffmpeg -i audio1.aac -ar 22050 -ab 32 audio1.mp3

Isto converterá o ficheiro audio1.aac para audio1.mp3
ficando com a taxa de áudio a 22.05 Khz e a taxa de bits a 32 Khz


Extrair o som de um vídeo e guardá-lo como um ficheiro MP3 usando FFMPEG:


ffmpeg -i video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 audio.mp3
  
*
Vídeo original: video.avi
* Codec de áudio: mp3
* Bitrate de áudio: 192kb/s
* Ficheiro gerado: audio.mp3


 
 
Adicionar o som de um ficheiro de áudio a um vídeo usando FFMPEG:
 

ffmpeg -i audio.wav -i video_entrada.avi video_saida.mpg

Extrair o áudio de um DVD a MP3 com FFMPEG:

Navegue pela estrutura das pastas do seu DVD e procure o ficheiro com a extensão .VOB que contém o áudio que deseja extrair. Executar o seguinte comando situando o seu terminal no caminho do ficheiro .VOB a trabalhar:

ffmpeg -i FICHEIRO.VOB -ab 192 ~/resultado.mp3

-i : indicamos um ficheiro de entrada
FICHEIRO.VOB: nome do ficheiro de vídeo do qual queremos extrair o áudio.
-ab 192 : bitrate de áudio a 192 (boa qualidade de áudio)
~/resultado.mp3 : destino e nome do ficheiro MP3 resultante (neste caso o destino é a nossa pasta /home).

Se o ficheiro de áudio resultante contém partes que não nos interessam, sempre podemos cortar essas partes com um editor de áudio.


Existem, no entanto muitas mais opções, e combinações das mesmas para fazer conversões de todo o tipo. O uso de FFMPEG e de todas as opções é muito extenso, podendo obter mais informação desde a página oficial do projecto.

Nesta mensagem apenas tento recompilar alguns exemplos mais comuns da utilização desta aplicação, através de fontes várias, experiência própria, e informação da página oficial... tentando assim ter os exemplos mais comuns para o meu uso e para quem precisar.

Se acha que falta algo nesta mensagem, seja algum exemplo que ache útil para outros utilizadores, ou alguma opção de codificação/descodificação que ache importante, sinta-se á vontade em deixá-lo no seu comentário e terei todo o gosto de adicionar á lista aqui apresentada.

Deixe o seu comentário. Ele vale mais que   visitas ;-)

Página oficial de FFMPEG: http://ffmpeg.org/ 

Cumprimentos e boas (des)codificações !

9 comentários:

  1. Cara, será que é possível converter para AMV?

    ResponderEliminar
  2. Com o FFMPEG directamente julgo que não, mas você pode fazer a conversão online através deste sitio:
    http://media-convert.com/conversion/
    Ou então,se não gostar do resultado, baixe este ficheiro:
    http://amv-codec-tools.googlecode.com/files/amv-ffmpeg-linux-i386-20071030
    Vá ás propriedades do ficheiro amv-ffmpeg-linux-i386-20071030, e dê-lhe permissão de execução. Meta-o na pasta onde tem o video que quer converter e desde a consola, introduza:
    ./amv-ffmpeg-linux-i386-20071030 -i nome_do_ficheiro_a_converter.mpg -f amv -s 160x128 -r 16 -qscale 2 -mbd 2 -g 1 -ac 1 -ar 22050 ficheiro_convertido.amv
    A opção -s 160x128 é a resolução do video. Mude-a ao seu gosto, e claro, mudo os nomes dos ficheiros (nome_do_ficheiro_a_converter.mpg e ficheiro_convertido) no comando de exemplo que indiquei

    ResponderEliminar
  3. Muito obrigado...artigo claro e objetivo!

    ResponderEliminar
  4. Oi estou usando uma máscara, front end, Hyper video converter.

    No codec mencoder consegui fazer, mas não no ffmpeg.

    Apareceram as seguintes mensagens:


    Tenho o lame para mp3 instalados mas apareceu uma mensagem referente a não aceitar mp3 no hyper video converter.

    Conversão de rmvb para avi.

    ffmpeg version 0.7.13, Copyright (c) 2000-2011 the FFmpeg developers
    built on Jun 13 2012 14:01:54 with gcc 4.4.5
    configuration: --enable-libdc1394 --prefix=/usr --extra-cflags='-Wall -g ' --cc='ccache cc' --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-x11grab --enable-libgsm --enable-libtheora --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libspeex --enable-nonfree --disable-stripping --enable-avfilter --enable-libdirac --disable-decoder=libdirac --enable-libfreetype --enable-libschroedinger --disable-encoder=libschroedinger --enable-version3 --enable-libopenjpeg --enable-libvpx --enable-librtmp --extra-libs=-lgcrypt --disable-altivec --disable-armv5te --disable-armv6 --disable-vis
    libavutil 50. 43. 0 / 50. 43. 0
    libavcodec 52.123. 0 / 52.123. 0
    libavformat 52.111. 0 / 52.111. 0
    libavdevice 52. 5. 0 / 52. 5. 0
    libavfilter 1. 80. 0 / 1. 80. 0
    libswscale 0. 14. 1 / 0. 14. 1
    libpostproc 51. 2. 0 / 51. 2. 0
    [NULL @ 0x852a140] Unsupported video codec
    [rm @ 0x85215e0] max_analyze_duration 5000000 reached at 5063000
    Input #0, rm, from '/media/hdm/downloads_hd2/supernatural 7x14.rmvb':
    Metadata:
    title :
    author :
    copyright :
    comment :
    Duration: 00:41:29.57, start: 0.000000, bitrate: 458 kb/s
    Stream #0.0: Audio: cook, 44100 Hz, stereo, s16, 64 kb/s
    Stream #0.1: Video: rv40, yuv420p, 624x352, 382 kb/s, 12.05 fps, 12 tbr, 1k tbn, 12 tbc
    Stream #0.2: Data: [0][0][0][0] / 0x0000
    Unknown encoder 'mp3'

    falha:
    http://farm9.staticflickr.com/8156/7528110270_bd0210fb67_b.jpg

    Configuração ffmpeg:
    http://farm9.staticflickr.com/8285/7528144550_4ccf4e1a8b_b.jpg

    mesmo mudando o encoder para aac de áudio não deu

    Aqui é o link da pergunta no vol:
    http://www.vivaolinux.com.br/topico/Multimidia/Erro-ffmpeg-no-hyper-video-converter/

    ResponderEliminar
  5. Olá Marco Brainiac. Já vi que usa o Squueze, eu estou no Wheezy, mas com o ffmpeg jamais consegui converter ficheiros para o formato.rmvb, daí ter feito a mensagem relativa aos rmvb usando o MENCODER. Também existe outra ferramenta (front-end) que é o FF multi Converter e dá bons resultados embora não dê para fazer conversões para o formato rmvb.... e os resultados são muito bons comparando com muitos outros front-ends que exprimentei. Vi o seu link do viva o linux e se você tiver sorte, espero que comparta algo que consiga. Obrigado por passar por cá. Cumprimentos.

    ResponderEliminar
  6. Isso mesmo debian Squeeze KDE

    OI amigo vou procurar algum codec rmvb ou algo do gênero, achando reparto aqui.

    Obrigado pela atenção

    Boa semana

    ResponderEliminar
  7. Alguem saberia me dizer o motivo ???
    - uma mesma linha de comando funciona em um arquivo e em outro nao.

    > ok
    ffmpeg -i C:\FFMPEG\input.mp4 -filter:v scale=-1:480 -c:v h264 -b:v 512k -minrate 512k -maxrate 512k -bufsize 512k -r 23 -c:a copy C:\FFMPEG\output.MP4

    > erro
    ffmpeg -i C:\FFMPEG\input.mkv -filter:v scale=-1:480 -c:v h264 -b:v 512k -minrate 512k -maxrate 512k -bufsize 512k -r 23 -c:a copy C:\FFMPEG\output.MP4

    ResponderEliminar
    Respostas
    1. Provavelmente pelo tipo de ficheiro que o mkv é. O mkv é um contentor que dentro dele pode incluir várias pistas de áudio, vídeo e legendas. Mas há outras ferramentas que suportam este tipo de ficheiros como o avidemux que é o que eu costumo usar para fazer conversões. No entanto se mal não recordo se quiser usar no terminal julgo que o melhor seria usar o mencoder. Cumprimentos.

      Eliminar

É favor manter a boa educação nos comentários. Qualquer comentário ofensivo, racista, desprestigioso, apenas com objectivo de inundar o blogue ou comentários de publicidade não solicitada serão eliminados. Serão aceites comentários em Português, Espanhol e Inglês. Comentarios en Portugues, Español y Ingles seran aceptados. Comments in Portuguese, Spanish and English will be accepted.