Melhorando a qualidade dos vídeos FLV

Em um post anterior, eu mostrei como podia fazer um screencast do compiz-fusion e disponibilizá-lo no Dokuwiki, como flv (o mesmo formato do YouTube). Apesar da boa compressão, a qualidade do vídeo é sofrível, cheios de “quadrados” (pixelização) e outros artefatos indesejáveis. Depois de uma procura no Google e alguns testes em casa, acho que encontrei a situação ótima: a melhor qualidade possível em um tamanho ainda pequeno de arquivo. Eu gravei o vídeo com o gtk-recordmydesktop e foi gerado o arquivo .ogg. O que eu encontrei, e que depois pareceu óbvio, é que todas as transformações de tamanho, bitrate, etc. devem ser aplicadas antes da conversão para o flv. A primeira transformação foi converter o .ogg para .avi, em 640×400 e remover o som. Eu fiz isto com o mencoder

mencoder -ovc xvid -nosound -xvidencopts bitrate=1100 -vf scale=640:400 -o out.avi out.ogg
Só neste passo, o arquivo passou de 14.6M para 2M! As conversões de avi para flv só compactam 50%, portanto se quiser disponibilizar o .avi, já é uma solução. A conversão para flv é legal para evitar que usuários de outros sistemas, que não tem o mplayer, fiquem reclamando de codecs, etc. A conversão avi→flv sempre foi melhor que a ogg→flv, nos meus testes, gerando vídeos com menos artefatos. Usando o mencoder baixado do http://www.debian-multimedia.org, eu fiz
mencoder out.avi -o compizfusion4.flv -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3

As versões mais novas do mencoder não aceitam mais a opção -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames . É só retirá-la.

A opção -lavfopts i_certify_that_my_video_stream_does_not_use_b_frames é obrigatória, depois do aviso do mencoder, sobre arquivos inválidos. O resultado final está embaixo: quem lê através de feeds, terá que visitar o blog 8-)

You need to install a Flash Player to watch this video!

Para comparação, embaixo tem o vídeo feito com a receita original, convertendo diretamente do .ogg para o .flv com

ffmpeg -i out.ogg -r 30 -s 640x400 -f flv compizfusion1.flv

You need to install a Flash Player to watch this video!

Note que é mais difícil ler a legenda dos ícones, no final do vídeo. A comparação pode ser mais justa se você assistir os vídeos em tela cheia.