Diminuindo a frustração com o FLV no Mplayer
Muita gente deve ter uma rotina diária similar à minha: no trabalho, pra relaxar, abre o YouTube e procura por versões ao vivo de músicas de diversos artistas. Essas músicas estão lá aos montes, e hoje em dia são minha preferência a ter que procurar por elas no aMule (ou torrent ou qualquer outra coisa).
Depois de assistir um bom vídeo no YouTube gosto de baixá-lo para o meu HD. Há vários plugins do Firefox que me permitem baixar esses vídeos (eu recomendo o UnPlug).
Uma vez que baixei esse arquivo utilizo o Mplayer para visualizá-lo. E aí começa a “frustração” do título. Os vídeos FLV são executados de forma que o áudio nunca está sincronizado com a imagem: em geral o áudio “sai na frente”, e a impressão que se tem é que estamos vendo as imagens em câmera lenta.
Isso ocorre pois o Mplayer não tenta calcular a taxa de frames por segundo de um arquivo FLV. O próprio manual do software recomenda que, se você sabe essa taxa, então você deve forçá-la manualmente na hora de executar o arquivo. Segundo pessoas deste fórum o FLV controla seus quadros não por FPS, mas por timestamp. Cada frame guarda seu timestamp, e acredito que isso seja a origem do problema.
Ah, sim: não parece existir um programa para Linux que, tendo como entrada um vídeo FLV, informe qual sua taxa FPS.
Ao descobrir isso corri para o meu gnome-terminal e comecei meus testes. A propósito, você força uma determinada taxa de frames por segundo (FPS) no Mplayer da seguinte forma (29 FPS, no exemplo):
mplayer -fps 29 nome_do_arquivo.flv
Chutando valores entre 25 e 30 descobri que um de meus vídeos favoritos tem FPS igual a 27.5. Maravilha, nunca mais precisarei assistir esse vídeo com delay! Será que o YouTube converte todos os arquivos para o mesmo FPS? Mais alguns testes e… a frustração. Não, cada vídeo no YouTube tem um FPS diferente.
Pensei em duas soluções para resolver o problema (uma de duas):
- Descobrir por tentativa e erro o FPS de todos os meus arquivos e incluir essa taxa no nome do arquivo, para saber como definir esse parâmetro na hora de tocar o vídeo no Mplayer
- Converter meus arquivos para outro formato utilizando o
ffmpeg(esse programa pode ser instalado no Ubuntu através doapt-get).
A primeira solução parece, de longe, a mais cansativa. Pelas minhas tentativas o processo de descobrir o FPS exato de um vídeo pode ser muito rápido ou muito demorado, dependendo do arquivo. Converter os arquivos para FLV parece a solução mais inteligente. Encontrei alguns tutoriais copiados uns dos outros em sites nacionais que davam dicas de como fazer a conversão de FLV para MPEG (aqui e aqui). Tentei converter apenas um vídeo seguindo os parâmetros indicados. Ele ficou sem som.
Espero que alguma alma solidária leia este post e compartilhe idéias melhores… por enquanto eu desisto.

November 5th, 2007 às 11:37 am
Já usei o flvtool2 [http://inlet-media.de/flvtool2] para fazer algumas “correções” em arquivos FLV. Acho que um simples flvtool2 -UP arquivo.flv , pode resolver seu problema.
November 5th, 2007 às 2:52 pm
Olá, Leonardo, obrigado pela dica.
Fiz o teste que você recomendou - instalei o flvtool2 a partir do Ruby Gems. Pelo que entendi as opções P e U imprimem metadados sobre o arquivo FLV e atualizam o arquivo com esses metadados, respectivamente. Entre esses metadados está o framerate. Para todos os arquivos que testei, no entanto, o framerate calculado estava errado. Vou procurar me informar melhor a respeito desse software.
January 2nd, 2008 às 11:00 am
Use o comando ffplay video.flv
Funciona muito bem!
Um abraço!! Rodrigo.