domingo, 25 de Outubro de 2009

Uma grande ferramenta chamada FFMPEG



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 Video: 

-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)


 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 videos 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 saida.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 saida.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 video 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 videos a mpeg:


ffmpeg -i video1.avi -sameq video1.mpeg
ffmpeg -i video2.avi -sameq video2.mpeg

2. Unir os vídeos usando cat:

cat video1.mpeg video2.mpeg > video_temporario.mpeg

3. Reconverter o video resultante ao formato desejado:

ffmpeg -i video_temporario.mpeg -sameq video_final.avi
O uso da opção -sameq indica a FFMPEG que use a mesma qualidade (resolução, bitrate) no video 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.

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

Cumprimentos e boas (des)codificaçoes !








0 comentários:

Enviar um comentário

É 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.

Notícias GNU/Linux