.NET

23 mar, 2012

Convertendo arquivos de vídeos com .NET e FFMPEG

Publicidade

Com o advento das tecnologias para exibição de vídeos na web, frequentemente lidamos com limitações dos fabricantes quanto ao formato dos mesmos. Por vezes, pesquisamos por players em Flash, SilverLight, ou adicionados a famosa tag <object> no html e temos a triste surpresa em ver que o formato de vídeo usado por nosso cliente não é o mesmo suportado pelo player ou pelo browser.

O formato mais utilizado na web é o FLV, por ser facilmente manipulado por aplicações em flash. Porém, quase sempre, é necessário algum tipo de conversão para obter o mesmo.

Esse artigo visa mostrar um método eficiente e eficaz para, quando necessário, realizar conversões de arquivos de vídeo. Vamos mostrar um exemplo de como fazê-lo integrado ao nosso código em .NET.

O Segredo está no uso da biblioteca ffmpeg, que é uma poderosa plataforma de conversão, gravação e exibição de áudio e vídeos. Esta biblioteca possui uma variedade imensa de métodos, mas, neste artigo, irei abordar apenas a conversão de arquivos de vídeos.

 As principais vantagens da FFMPEG são:

  1. Funciona por meio de linha de comando (por isso pode ser aproveitada em qualquer tecnologia de desenvolvimento de software de sua preferência: ASP.net, PHP, ASP, Java.. etc);
  2. É multi-plataforma. Segundo o fabricante, roda em ambiente Windows e Linux. (testei com sucesso no windows);
  3. Possui suporte a uma grande variedade de formatos de vídeos e áudio (lista de formatos no final do artigo);
  4. Por último, mas não menos importante, é de GRAÇA!

Usando na prática

É possível converter arquivos “DE” e “PARA” qualquer extensão suportada. Por exemplo, é possível converter arquivos de Mpeg para FLV, FLV para Mpeg, Mpeg para 3gp, Vob para Mpeg…

  1. Baixe  a última versão do ffmpeg;
  2. Descompacte o conteúdo em uma pasta de sua preferência;
  3. Abra o MS-DOS ou o console do linux, e navegue até a pasta onde descompactou o executável do ffmpeg;
  4. Execute a linha de comando para converter o arquivo de vídeo desejado.

 Linha de comando

 A linha de comando básica, para converter arquivos de vídeos, é composta dos seguintes pedaços:

  •  ffmpeg (chamada ao executável);
  • -i arquivo_entrada.extensao;
  • -f formato_de_saida  arquivo_de_saida.extensão.

 Exemplos:

  • ffmpeg –i video1.mpeg –f flv novovideo.flv;
  • ffmpeg –i video2.flv –f mov novovideo2.mov;
  • ffmpeg –i novovideo.flv  –f mpeg  video2.mpeg.

 Para arquivos que estão em outras pastas, use aspas duplas no nome dos mesmos:

  •  ffmpeg –i “c:\arquivo\video\novovideo.flv”  –f mpeg  “c:\arquivo\videompeg\video2.mpeg”

Existem também opções para selecionar o codec e a qualidade do vídeo e do som que será convertido. Adicionarei links úteis, no final do artigo, para a obtenção de mais exemplos e também para a documentação completa do ffmpeg.

Usando ffmpeg com .NET

 É possível chamarmos qualquer arquivo executável com .NET através da classe  System.Diagnostics.Process. Abaixo, segue um exemplo da execução do comando com .NET (C#):

//  ------------------------------------------------             
string caminhoFFmpeg = "C:\\ffmpeg\\ffmpeg.exe";
string origem = "origem.mpeg";
string saida = "arquivosaida.flv";
string formatosaida = "flv";
string comando = "-i \"" + origem + "\" -f " + formatosaida + " \"" + saida + "\"";

System.Diagnostics.ProcessStartInfo processStartInfo = new
System.Diagnostics.ProcessStartInfo(caminhoFFmpeg, comando);

System.Diagnostics.Process process = new System.Diagnostics.Process();
process.StartInfo = processStartInfo;

// Executa o comando..
bool processStarted = process.Start();
// ------------------------------------------------

Veja aqui a documentação da mesma.

Anexo 1: Um projeto pronto, didático, para utilizar conversão de arquivos com ffmpeg e .NET (C#)

Desenvolvi este projeto de demonstração para converter arquivos de vídeo e, ao mesmo tempo, exibir o comando enviado para o arquivo executável e mostrar também a mensagem de retorno da operação.

No código fonte é utilizado a classe System.Diagnostic.Process e você poderá ver como obter a mensagem de retorno fornecida pelo executável que estamos chamando.

Para baixar o código fonte, clique aqui (esse projeto foi feito com Visual Studio 2005).

 Anexo 2: Mais um projeto pronto, feito em .NET e ffmpeg

Nesse projeto, desenvolvido em .NET pela “Our Software”, o autor não exibe o retorno da operação, mas coloca opções avançadas em alguns formatos mais conhecidos de vídeos.  Baixar o código fonte, para usar como referência, também é muito válido.

Link para baixar: http://www.softwarediscountvoucher.com/blog/2009/07/05/net-ffmpeg-gui/

 Anexo 3: Lista de formatos suportados

3g2 3gp 4xm IFF ISS MTV RoQ a64 aac ac3
adts aea aiff alaw amr anm apc ape applehttp asf
asf_stream ass au avi avm2 avs bethsoftvid bfi bink c93
caf cavsvideo cdg crc daud dirac dnxhd dsicin dts dvd
dxa ea ea_cdata eac3 f32be f32le f64be f64le ffm ffmetadata
film_cpk filmstrip flac flic flv framecrc framemd5 g722 gif gsm
h261 h263 h264 idcin image2 image2pipe ingenient ipmovie ipod iv8
ivf lmlm4 lxf m4v matroska matroska webm md5 mjpeg mlp
mmf mov m4a mp2 mp3 mp4 mpc mpc8 mpeg mpeg1video
mpeg2video mpegts mpegtsraw mpegvideo mpjpeg msnwctcp mulaw mvi mxf mxf_d10
mxg nsv null nut nuv ogg oma psp psxstr pva
qcp r3d rawvideo rcv rpl rso rtp rtsp s16be s16le
s24be s24le s32be s32le sap sdp siff sox spdif svcd
swf thp tiertexseq tmv truehd txd u16be u16le u24be u24le
u32be u32le u8 vc1 vmd vob wav wc3movie wsvqa yuv4mpegpipe

Obs: para ver a lista de formas suportados, use o comando  -formats

Conclusão

A biblioteca ffmpeg é muito utilizada por desenvolvedores em todo o mundo, por ser robusta e muito rápida. Vale muito a pena estudá-la e conhecer suas opções de uso, para, então, usá-la como um recurso de automação em sistemas.

 Através da classe System.Diagnostics.Process podemos integrá-la facilmente em nossas aplicações .NET e obter o resultado de cada operação realizada.

Dezenas de softwares gratuitos e pagos, em diversas linguagens distintas, foram desenvolvidos apenas como interface para esta biblioteca. Provando que vale muito a pena investir tempo para aprendê-la.

Referências