Archivio

Archive for marzo 2020

Nero AAC Codec

30 marzo 2020 1 commento
Logo AAC

AAC (Advanced Audio Coding) è un formato di compressione audio con perdita di informazione nato nel 1997 con l’obiettivo di sostituire MP3, risalente al 1993, fornendo un migliore rapporto qualità/bitrate e superando alcune limitazioni intrinseche del vecchio formato.

La diffusione su larga scala di AAC ha richiesto anni ed è stata molto meno rapida rispetto a quella del formato MP3 – si può dire che sia tuttora in corso – probabilmente per una serie di motivi: innanzi tutto prima dell’MP3 non esisteva nulla di simile, per cui chiaramente in mancanza di alternative, MP3 ha avuto vittoria facile; inoltre la qualità e il rapporto di compressione di MP3 rimangono tutto sommato adeguati per l’ascolto musicale; infine – ma forse è il motivo più importante – è richiesta una licenza di brevetto per tutti i produttori o sviluppatori di codec AAC. Questo fatto ha tagliato le gambe ai progetti open source, che si ritrovano tuttora impossibilitati a distribuire versioni pronte all’uso dei loro codec, potendone rilasciare solo ed esclusivamente il codice sorgente. In questo modo, viene lasciato all’utente finale l’onere di generare i file eseguibili a partire dai sorgenti, cosa improponibile per utenti che non siano informatici particolarmente intraprendenti.

Tra i codec storicamente più diffusi vi sono l’Apple AAC Codec, incorporato nel programma iTunes, e il Nero AAC Codec, scaricabile gratuitamente da VideoHelp. Quest’ultimo è un codificatore di buona qualità, stabile e abbastanza semplice da utilizzare; l’unico aspetto negativo è che il suo sviluppo è stato abbandonato dal 2010, per cui non sono assolutamente da attendersi evoluzioni rispetto all’attuale versione 1.5.4.0 del 18 febbraio 2010. Persino sul sito ufficiale di Nero non ve n’è più traccia ormai da alcuni anni.

Volendo utilizzare questo codificatore per comprimere musica in alta qualità in sostituzione della codifica MP3 ad elevato bitrate (tipicamente 320 kbps), è possibile configurarlo in modo da ottenere la massima qualità di uscita con il minimo bitrate possibile.

L’eseguibile neroaacenc ammette una serie di parametri da riga di comando, i più importanti sono i seguenti tre: -if, -of e -q. I primi due sono obbligatori e servono a definire rispettivamente il file sorgente in formato WAV e il file di destinazione, a cui conviene dare estensione m4a in modo da non confondersi con gli mp4 audio/video; l’ultimo parametro serve invece a definire la qualità della codifica, e ammette un valore decimale compreso tra 0 e 1 (ad es. 0.25, 0.6, 0.75, ecc.), dove 0 rappresenta la qualità minima e 1 quella massima; questo parametro è opzionale e assume il valore predefinito di 0.5. La qualità determina anche il bitrate medio e di conseguenza la dimensione finale dei file prodotti. A titolo indicativo, il bitrate medio che tipicamente si ottiene con la massima qualità è circa 400 kbps, mentre con l’impostazione predefinita di 0.5 si ha un bitrate intorno ai 170 kpbs.

Uno dei modi per ridurre la quantità di informazione sonora da memorizzare è applicare un filtro passa basso al segnale in ingresso, questo consente di cancellare parte dei toni più acuti – tipicamente sopra i 16 kHz – in tutti quei casi in cui essi sono mascherati da suoni più forti presenti alle frequenze inferiori. Questa tecnica è largamente utilizzata sia da AAC che da MP3 e le modalità di filtraggio sono tutt’altro che banali proprio allo scopo di scartare solo ciò che più probabilmente non è udibile.

La frequenza e l’intensità con cui questo filtro interviene è strettamente legata al bitrate desiderato (ovvero alla qualità), per cui tanto più si alzerà il parametro della qualità, tanto meno il filtro entrerà in azione. Nel caso di Nero AAC Codec, c’è una soglia precisa oltre la quale tale filtro viene disattivato e quindi viene preservato lo spettro completo del segnale originale. La riga di comando da utilizzare è la seguente:

neroaacenc -q 0.740002 -if input.wav -of output.m4a

Il bitrate medio dei file prodotti sarà intorno ai 290 kbps, che è comunque inferiore ai 320 kbps degli MP3 compressi a qualità massima. Per avere un’idea della qualità dei file risultanti, oltre ovviamente ad ascoltarli, è possibile confrontare lo spettrogramma di un file codificato in questa maniera con quello del relativo file non compresso. Per questa prova scegliamo il primo movimento della Nona sinfonia di Beethoven diretta da Karajan nel 1983 e pubblicata su CD l’anno seguente (Deutsche Grammophon 410 987-2).

Forma d'onda originale
Forma d’onda originale del 1º mov. della 9ª sinfonia di Beethoven diretta da Karajan nel 1983

Di seguito sono riportati in sequenza animata gli spettrogrammi del segnale originale e di quello compresso con Nero AAC Codec utilizzando il parametro -q sopraindicato:

Comparazione tra spettrogramma WAV (originale) e AAC prodotto con neroaacenc -q 0.740002
Comparazione tra spettrogramma WAV (originale) e AAC prodotto con neroaacenc -q 0.740002

Come si può notare, gli spettri sono praticamente identici, è difficile individuare differenze significative, a parte un taglio degli acuti oltre i 20.500 Hz che comunque di norma sarebbero già fuori dall’udibile. È interessante confrontare questo risultato con quello che invece si può ottenere utilizzando il formato MP3, per questo si riporta di seguito un’analoga sequenza animata dove però al posto dello spettrogramma del segnale compresso con AAC, viene preso in considerazione quello del corrispondente MP3 codificato a 320 kbps utilizzando LAME --preset insane che è l’opzione che garantisce la massima qualità possibile:

Comparazione tra spettrogramma WAV (originale) e MP3 prodotto con lame --preset insane
Comparazione tra spettrogramma WAV (originale) e MP3 prodotto con lame --preset insane

Come si nota a occhio, la codifica MP3, nonostante il bitrate maggiore, presenta un taglio più marcato alle alte frequenze e in generale lo spettrogramma è un po’ più alterato rispetto a quello della codifica AC3, soprattutto nella banda superiore ai 16 kHz. Questo non significa necessariamente che all’ascolto si possano notare delle differenze, anzi quasi certamente non è così considerando pure che la quasi totalità delle frequenze sotto i 20 kHz risulta preservata, ma dimostra che il segnale è stato alterato rispetto alla sua forma originaria.

Dunque, poiché la codifica AAC con un bitrate medio di circa 290 kbps produce un segnale molto simile a quello originario e visibilmente più fedele rispetto alla codifica MP3 migliore possibile (320 kbps), il passaggio al nuovo formato risulta senz’altro raccomandabile ove non vi siano altri impedimenti dovuti, ad esempio, all’incompatibilità con i dispositivi di utilizzo abituale.

Configurare Exact Audio Copy in modo che utilizzi Nero AAC Codec con le impostazioni sopraindicate è cosa abbastanza semplice, si tratta di impostare la stringa di parametri seguente:

%ishigh%-q 0.740002%ishigh% -if %source% -of %dest%

Configurazione di Nero AAC Codec in Exact Audio Copy

Approfondimenti

Un’altra prova interessante è quella di ridurre il parametro -q scendendo al di sotto del valore magico 0.740002 (ad esempio 0.740001). Quello che accade è che si attiva il filtro passa basso, per cui si ottiene uno spettrogramma del tipo seguente, dove si vedono due frequenze di taglio, una sui 16 kHz e un’altra più netta intorno ai 18 kHz:

Comparazione tra spettrogramma WAV (originale) e AAC prodotto con neroaacenc -q 0.740001
Comparazione tra spettrogramma WAV (originale) e AAC prodotto con neroaacenc -q 0.740001

È evidente come non ci sia confronto con la situazione precedente; ancora una volta, però, questo non significa che vi sarà una differenza apprezzabile all’ascolto, tuttavia si può con certezza dire che il segnale risultante è abbastanza diverso da quello originale.

In conclusione, se lo scopo è quello di produrre dei file compressi di alta qualità, allora conviene utilizzare il valore 0.740002 qui suggerito (oppure 0.75 per semplicità), o eventualmente valori anche superiori; se invece lo scopo è di risparmiare spazio e quindi ridurre il bitrate, allora può essere il caso di sperimentare valori di -q intorno al valore predefinito e valutare poi “a orecchio” la qualità del risultato, tenendo a mente che, di norma, la codifica AAC è più efficiente rispetto a quella MP3, per cui, a parità di bitrate, il risultato dovrebbe essere migliore. A questo proposito, ecco un ultimo confronto tra tre spettrogrammi: il primo è quello del segnale originale (WAV), il secondo è relativo alla codifica AAC con -q 0.740002 e il terzo alla codifica MP3 eseguita sempre con LAME ma con parametro --preset 320, che, a dispetto di quanto richiesto, ha prodotto in realtà un file con bitrate molto simile a quello del file AAC:

Comparazione tra spettrogramma WAV, AAC neroaacenc -q 0.740002 e MP3 lame --preset 320
Comparazione tra spettrogramma WAV, AAC neroaacenc -q 0.740002 e MP3 lame --preset 320

Un articolo che prende in esame i formati MP3 e AAC è MP3 and AAC explained di Karlheinz Brandenburg; per la verità è un articolo piuttosto datato ma può comunque aiutare a comprendere i principi che sono alla base della compressione audio lossy.