sábado, 10 de dezembro de 2011

Cuidado com encoders AAC open source

O Kraftwerk recomendou um tal de "Free AAC Converter" no FGdH. Eu fiquei curioso, pois os dois encoders AAC open source mais populares -- o FAAC e a libavcodec (ffaac) -- são tenebrosos. Horríveis. Instalei o referido programa e adianto que ele provavelmente use a libavcodec para gerar AAC.

A propóstito, os trambiqueiros que desenvolvem esse programa estão violando a GPL, ou LGPL, dependendo das configurações que usaram para compilar o FFmpeg/Libav, pois não existe menção nenhuma sobre o uso das suas bibliotecas, nem muito menos o código fonte -- do programa inteiro, no caso da GPL, ou do FFmpeg/Libav apenas, no caso da LGPL --, que eles são obrigados a disponibilizar. E deveriam fazer o usuário concordar com a GPL/LGPL na hora da instalação do programa também, o que não fazem. Mais um para o Hall of Shame.

Na pasta do programa em "C:\Arquivos de Programas":

|   free-aac-converter-license.txt
|   free-aac-converter.exe
|   unins000.dat
|   unins000.exe
|   website.url
|  
+---audio-converter-profiles
|       formats.dat
|      
+---LibAV
|       avcodec-52.dll
|       avcore-0.dll
|       avdevice-52.dll
|       avfilter-1.dll
|       avformat-52.dll
|       avutil-50.dll
|       SDL.dll
|       swscale-0.dll

Ah, o programa gera por padrão arquivos .aac (stream AAC ADTS). Áudio AAC costuma ser muxado em MP4, para maior compatibilidade.

Voltando. Você converter um áudio lossless (sem perdas, extraído direto do CD) usando o FAAC ou a libavcodec (ffaac) é um crime. É um atentado contra o sinal de áudio. É muito, mas muito mais negócio converter para MP3 usando o LAME (ou alguma das dezenas de front ends para ele). Apesar do MP3, na especificação, ser um codec inferior ao AAC, a implementação de anos de estudo e ajuste fino no seu modelo psicoacústico resultaram num código que tira leite de pedra, que extrai da especificação cada gota que o codec pode oferecer. Exatamente o oposto que o FAAC e a libavcodec fazem com AAC. Especificação é muito diferente de implementação.

O LAME (que é um software LGPL) no seus modos VBR é imbatível entre todos os encoders MP3 do mercado. Para quem precisa de previsibilidade no tamanho final do arquivo, existem os modos ABR. Eles são modos VBR com bitrate confinado em limites mais rígidos e calculados para manter um bitrate médio constante. Fornecem arquivos com tamanho previsível e mantêm parte da virtude do modo VBR. Mesmo em CBR (bitrate constante), o LAME se sai bem. O recomendável, entretanto, é ficar entre VBR e ABR -- se possível o primeiro --, porque existem partes do áudio que exigem mais bitrate e outras que exigem menos. Com os modos VBR e ABR, o LAME consegue dosar o bitrate de acordo com a complexidade de cada trecho e isso resulta em melhor qualidade (e, no modo VBR, menor arquivo geralmente).

A respeito de encoder lossy conseguir "melhorar alguma cosia" é bobagem. É impossível. Pelo contrário, qualquer encoder lossy invariavelmente degradará o áudio que gerar. O que diferencia um bom encoder de um ruim é a grandeza desta degradação em relação a taxa de compressibilidade atingida.

Falando em números, o FAAC e a libavcodec (ffaac), ambos em 128kbps, entregam um áudio imprestável. Um bom encoder AAC teria que entregar um aúdio muito bom em 128kbps. O LAME em 128kbps ABR (-preset 128) entrega um áudio honesto. Não transparente, mas infinitamente melhor. Isso é claro pressupondo uma fonte lossless. A partir de uma fonte lossy, é caso perdido, pois você não tem referência para saber como o áudio original era de verdade. Mais: além do encoder ter que converter o áudio em si (em parte já desfigurado), terá que se virar com todos os artefatos que o primeiro encoder injetou e o código costuma não ser tunado para isso. Eu considero viável apenas para escutar em caixinhas de som xing ling ou fones de R$ 1,99.

Aqui tenho tudo em LAME -V 2. Boa qualidade, tamanho pequeno, arquivos que tocam em qualquer coisa: DVD player, aparelho de som, som automotivo, celular pé-de-boi, cafeteira, máquina de lavar... :-)

4 comentários:

  1. Outro codec cuja as implementações opensource são bem porcas é o AC3. Bom, o codec em si é nojento (tem os mesmos problemas típicos do MP3, mas por ser um pouco mais antigo faltam algumas coisas nele que o MP3 tem), mas aparentemente as únicas implementações do codec opensource ou tem um algoritmo psicoacústico muito simples ou tem muitos bugs para ser utilizável.

    Voltando ao MP3, o último teste ABX com MP3 mostra que o LAME já não é imbatível em bitrates médios (~128kbps) como era antes. Na verdade, ele empata com praticamente qualquer outro codec comercial disponível hoje, mas é bem mais lento que a concorrência (http://listening-tests.hydrogenaudio.org/sebastian/mp3-128-1/results.htm). Em altos bitrates ele deve continuar imbatível, mas duvido que alguém consiga realmente fazer um ABX de MP3 com bitrates maiores que 192kbps sem ser em samples críticos.

    Minha coleção hoje é composta basicamente de arquivos em FLAC+MP3. Os MP3s eu não mexo (apesar que estou tentando passar tudo que tenho de importante em MP3 para FLAC também). Os FLACs eu converto para OGG Vorbis V5 (~160kbps) para ouvir nos DAPs e a qualidade é soberba. A compatibilidade pode não ser das melhores, mas considerando que ambos meus DAPs (SGS II e Sansa Clip+) suportam Vorbis, porque não? Fora que só OGG foi pensado para gapless playback, assim consigo ouvir meus álbuns de show sem pausas e sem gambiarras.

    ResponderExcluir
  2. Obrigado pelas informações.

    Vorbis é sem dúvida um bom codec, mas não tão bem suportado. E quanto à reprodução gapless de MP3 só funciona com players específicos, que entendem a tag de informações do LAME. No foobar2000 funciona perfeitamente, mas fora ele, em tudo que é aparelho que toco gapless não funciona. Como você disse, não existe previsão na especificação para isso, ao contrário do Vorbis.

    E falando na Xhip.Org, o Opus é um codec promissor. Será o codec livre de royalties com eficiência similar ao AAC que teremos no futuro.

    http://opus-codec.org/

    No Hydrogenaudio foram feitos alguns testes de audição e ele se saiu bem (não é para produção ainda, nem o bitstream foi congelado). Estou com preguiça de procurar o link. :-(

    ResponderExcluir
  3. Sim, eu acompanho o CELT (a "fusão" dele com o codec do Skype, recém aberto, resulta no Opus) a algum tempo e ele aparentemente vai ser um codec realmente de próxima geração, inclusive assim que o bitstream ser congelado e surgirem as primeiras implementações "sérias" aposto que ele vai vencer todo e qualquer codec, principalmente em bitrates baixos. Outro destaque dele é o baixíssimo delay, o que permite que ele seja usado para VoIP e outras atividades que necessitam de baixo delay (uma delas que eu vi e pode ser muito interessante seria um show ao vivo com dois cantores tocando em partes distintas do globo).

    Existe uma outra maneira de fazer gapless em MP3 mas como eu disse, é gambiarra. Basicamente é criar um algoritmo para ao notar um silêncio no fim da música fazer um corte e carregar a próxima no buffer. Mas é uma solução bem tosca e pode causar alguns problemas caso seja mal implementada. Se eu não me engano, o iPod faz isso, assim como o player que eu uso no Android (PowerAMP).

    ResponderExcluir