Supra-sumo em Compressão de Video

Andei estudando tecnologias de compressão de vídeo e é um mundo fascinante. Tudo sobre Linux.

DivX e Xvid são compressores ainda bons mas de gerações anteriores. O mais moderno e avançado é o H.264 também conhecido por MPEG-4 AVC, padrão ISO. Uma das melhores implementações desse compressor é livre: o projeto x264.

E sobre containers, um dos mais completos hoje em dia é o MP4. Um mesmo arquivo MP4 pode conter uma trilha de vídeo, outra de vídeo em outros ângulos, outra de audio em inglês, outra de audio em português, e outras de legendas em várias linguas, em Unicode, menu como o de um DVD, informação sobre capítulos etc. Isso é um significativo avanço em relação ao container AVI da Microsoft que não suportava nada disso. Pode-se fazer um backup de um DVD para um arquivo MP4, incluindo toda a sua interatividade, menus e capítulos.

Apesar do nome sugestivo, MP4 não é a evolução do MP3. Afirmar isso é como dizer que .gif evoluiu para .tar, coisa que não faz sentido. A evolução do MP3 é AAC e HE-AAC. MP4 (um formato de container) pode conter streams MP3 (um formato de audio), como fiz abaixo, mas o mais natural e moderno é um MP4 conter streams AAC.

Converti um vídeo de 53 segundos que fiz com minha câmera. Veja a comparação:

  Original.avi Comprimido.mp4
Geral 53s, 15.077 kb/s, 640×480, 30 quadros por segundo 53s, 2.495 kb/s, 640×480, 30 quadros por segundo
Tamanho 100.326.316 Bytes 16.639.145 Bytes
Trilha de vídeo 99.697.780 Bytes, compressão Motion JPEG 15.952.188 Bytes, compressão H.264
Trilha de audio 586.888 Bytes, formato PCM mono 11,024 Hz 657.699 Bytes, compressão MP3 mono 22,05 Hz 64kbps
Overhead do container 41.648 Bytes ou 0.04% do tamanho do arquivo 29.258 Bytes ou 0.18% do tamanho do arquivo

Há duas discrepâncias aqui:

  1. O tamanho relativo do container deveria ter diminuido.
    O overhead do container MP4 é bem menor que AVI, mas como o tamanho do vídeo diminuiu muitíssimo, isso distorceu a relação do tamanho do container com o do arquivo. Se transferíssemos sem recomprimir os streams de audio e vídeo do AVI p/ MP4, veríamos uma significativa queda de overhead do container.
  2. O tamanho da trilha de audio aumentou.
    O fato é que tive sérios problemas para compactar o audio. Minha câmera grava som em formatos tão baixos que tive que aumentar a freqüência do sinal para o arquivo ser aceito pelo LAME. E ai usei bitrates talvez altos de mais para a compressão. Mas ganhei tanto com o H.264 que nem vou esquentar a cabeça.

O vídeo final é de alta qualidade (comparado com o original), e não consegui perceber diferença entre eles. Olhei várias vezes, com muita atenção.

Eu ainda fiz questão de alta qualidade, e mantive o bitrate em 2495 kbps. Poderia ter diminuido mais ainda o tamanho se fizesse compressão em 2 passos. Filmes em formato Xvid (MPEG-4 ASP) que se baixa da Internet, em boa qualidade, tem aproximadamente 850 kbps. É esperado que se dermos só 850 kbits para o H.264 trabalhar 1 segundo de vídeo, obteremos resultados melhores comparados ao Xvid.

11 thoughts on “Supra-sumo em Compressão de Video”

  1. Avi,

    Você só se esqueceu de mencionar que o H.264 e o AAC são tecnologias que serão incorporados ao SBTVD – nossa TV digital que chegará em Dez/2007.

    Abraços,
    Mafort

  2. Carlos, obrigado por lembrar isso.

    Todas as tecnologias ligadas ao padrão MPEG-4 estão sendo largamente adotadas em equipamentos de mídia como set-top boxes, DVD players, etc.

    Seu próximo DVD player, ou Bluray, ou HD-DVD, o de R$120, já vai conter essas tecnologias, e poderá tocar o arquivo MP4 que gerei neste estudo. Se quiser gastar mais um pouco, poderá comprar um equipamento que tem WiFi embutido, que pode acessar seus arquivos diretamente no seu computador, no quarto dos fundos.

  3. Desisti do LAME para comprimir o audio p/ MP3. Ele parece ser otimizado para comprimir audio de maior qualidade, e simplesmente falha ao tentar compactar o som da minha câmera.

    Desta vez tentei comprimir com o FAAC, e deu certo. Então:

    Original: 586.888 Bytes, formato PCM mono 11,024 Hz
    Comprimido: 133.614 Bytes, formato AAC stereo 20 kbps 22,050 Hz (o faac duplicou o sinal sem eu pedir)

    Ganhei 442 kBytes comprimindo o audio para 23% do tamanho original.

  4. Muito interessante o artigo pois só compactava com Xvid estou tendo uma certa dificuldade em relação ao x264 pois ele acusa de nao estar compilado com suporte a mp4 tentei compilar o gpac + x264 mais nao deu muito resultado estou utilizando o ubuntu feisty gostaria de saber se possui algum site que possa baixar o binario com o suporte a mp4…..

  5. Klaos, o GPAC compila fácil. Pelo menos no meu Fedora 6. Você mesmo pode compila-lo.

    Mas dá para se virar sem ele. Siga aquele manual do link para usar o mencoder para gerar um stream YUV puro num pipe, e rode o x264 assim:

    bash$ x264 -o output.h264 ….

    Ele vai gerar um stream de vídeo sem MP4. Aí você pode empacotar isso com o audio (que vc deve ter compactado separadamente) num container AVI ou MP4 assim:

    bash$ ffmpeg -i output.h264 -i audio.mp3 -acodec copy -vcodec copy final.mp4
    bash$ ffmpeg -i output.h264 -i audio.mp3 -acodec copy -vcodec copy final.avi

    Não testei esses comandos, mas é +/- por ai.

    Você pode também usar o próprio ffmpeg ou mplayer/mencoder para codificar o audio e vídeo (com x264) juntos, num passo só. Veja o manual dos dois.

  6. Para tocar esses vídeos em Windows, a melhor alternativa é baixar o K-Lite Codec Pack que contém todos os codec, demultiplexadores e ferramentas necessárias. Inclui também o excepcional Media Player Classic que é altamente configurável.

    Pode-se tocar inclusive filmes com legendas separadamente. Esse pacote é tão poderoso quanto o MPlayer no Linux. E não instala spyware nem virus.

    Ele está disponível em 3 versões: basic, standard e full, e a diferença é a quantidade de codecs, etc. Recomendo usar a full de uma vez.

  7. Naquele artigo que eu escrevi, usei um AVI pois eu tinha feito um teste com um vídeo que peguei do youtube 😉

    O lance de usar o xvid não é uma preferência não, estou começando a fuçar com vídeo agora e ainda não tinha achado um padrão interessante de compactação. Ainda estou na fase de experimentação. O ‘fugir do mp4’ como falei é pra quela turma que quer disponibilizar na rede os seus videos, já que o xvid é um formato, não tão bom quanto o h.264, porém mais popular.

    Com relação a esses features que você comentou, eu nunca testei. Acho que vou fazer mais alguns testes hoje. 😀

  8. Ola

    Voce sabe de algum software conversor “on-line” de stream AAC de audio que entra pela porta SPDIF do micro?!
    Pergunto pois gostaria de decodificar o sinal do receptor digital de TV nas 5.1 caixinhas do computador.

    Obrigado,

    Elton

Leave a Reply to Avi Cancel reply

Your email address will not be published. Required fields are marked *