DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 
DevWare  
Novidade: DevMedia lança o DevWare - Saiba mais!

.NET e FFMPEG: Convertendo arquivos de vídeos: Mpeg, FLV, Mov, 3Gp, Vcd, Vob ( e vários outros)

Esse artigo visa mostrar, de forma introdutória, um método eficiente e eficaz para realizar conversões de arquivos de vídeo, em diversos formatos, e mostrar um exemplo de como integrar esta funcionalidade ao nosso código em .NET.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você gostaria de comentar o que não lhe agradou?

Problema

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  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 o mesmo.


Objetivo 

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

O Segredo está no uso da biblioteca ffmpeg (http://ffmpeg.org/) 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 no site http://ffmpeg.org/ , na seção downloads.
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

Obs: Para arquivos que estão em unidades de disco ou pastas, diferentes do executável do ffmepg, 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();
//  ------------------------------------------------ 

Este é um link para a documentação da mesma: http://msdn.microsoft.com/pt-br/library/system.diagnostics.process.aspx
            

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 a mensagem de retorno da operação.

Nele você verá como chamar a classe System.Diagnostic.Process e obter a mensagem de retorno fornecida pelo executável que estamos chamando.



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


Nesse projeto, desenvolvido em .NET, 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, é muito válido.




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, dv, dvd, dxa, ea, ea_cdata, eac3, f32be, f32le, f64be, f64le, ffm, ffmetadata, film_cpk, filmstrip, flac, flic, flv, framecrc, framemd5, g722, gif, gsm, gxf, h261, h263, h264, idcin, image2, image2pipe, ingenient, ipmovie, ipod, iv8, ivf, lmlm4, lxf, m4v, matroska, matroska,webm, md5, mjpeg, mlp, mm, mmf, mov, mov,mp4,m4a,3gp,, mp2, mp3, mp4, mpc, mpc8, mpeg, mpeg1video, mpeg2video, mpegts, mpegtsraw, mpegvideo, mpjpeg, msnwctcp, mulaw, mvi, mxf, mxf_d10, mxg, nc, nsv, null, nut, nuv, ogg, oma, psp, psxstr, pva, qcp, r3d, rawvideo, rcv, rl2, rm, rpl, rso, rtp, rtsp, s16be, s16le, s24be, s24le, s32be, s32le, s8, sap, sdp, shn, siff, smk, sol, sox, spdif, srt, svcd, swf, thp, tiertexseq, tmv, truehd, tta, tty, txd, u16be, u16le, u24be, u24le, u32be, u32le, u8, vc1, vc1test, vcd, vfwcap, vmd, vob, voc, vqf, w64, wav, wc3movie, webm, wsaud, wsvqa, wtv, wv, xa, yop, yuv4mpegpipe


Obs: para ver a lista de formas suportados, obtendo diretamente do executável ffmpeg.exe, 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 estudar sobre a mesma, conhecer suas opções de uso, e 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


http://ffmpeg.org/ffmpeg.html (ffmpeg documentation)

http://www.videohelp.com/tools/ffmpeg (Gui Interfaces for ffmpeg)

http://www.webologist.co.uk/blog/converting-mpg-to-flv-using-ffmpeg (Converting MPG to FLV Using FFMPEG )

http://www.ehow.com/how_6796344_convert-flv-mpeg-ffmpeg.html (How to Convert FLV to MPEG With FFMPEG)

http://www.softwarediscountvoucher.com/blog/2009/07/05/net-ffmpeg-gui/  (.NET ffmpeg GUI)

http://msdn.microsoft.com/pt-br/library/system.diagnostics.process.aspx (Documentação da microsoft para a classe system.diagnostics.process)


Rafael álvares Rend
Micro-Empresário desde 2009 e Analista de sistemas/programador desde 2005. Certificado MCP e MCTS; Diariamente trabalha com .NET, PHP e ASP Clássico.
O que você achou deste post?

    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
[Fechar] Você precisa estar logado para dar seu feedback.

Clique aqui para efetuar o login

Caso não tenha um cadastro DevMedia, clique aqui para se cadastrar (gratuito)
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03