FaciLinux

Guide Facili per Linux

Riprendiamo l'articolo "Scaricare un mp3 da un video di Youtube da linea di comando".
E se si volesse normalizzare il volume di un file audio scaricato da YouTube?
In realtà l'audio di YouTube viene già in qualche modo normalizzato e l'unica elaborazione con un certo senso sarebbe quella di alzarne il volume ossia una normalizzazione di picco.

Normalizzazione di un file audio

Il processo di normalizzazione dell'audio è l'applicazione di una quantità costante di guadagno a una registrazione audio per portare l'ampiezza a un livello target. Poiché la stessa quantità di guadagno viene applicata all'intera registrazione, il rapporto segnale-rumore e la dinamica relativa rimangono invariati.

Esistono due principali tipi di normalizzazione audio:

  • peak normalization o normalizzazione del picco che regola la registrazione in base al livello di segnale più alto presente nella registrazione
  • loudness normalization o normalizzazione del volume che regola la registrazione in base al volume percepito

Peak normalization

In questo tipo di normalizzazione il guadagno viene modificato per portare il più alto valore dei singoli campionamenti PCM o il picco del segnale analogico a un dato livello (solitamente 0 dBFS, il livello più alto consentito in un sistema digitale).

Poiché cerca solo il livello più alto, questo tipo di normalizzazione non tiene conto del volume apparente dell'audio.

Loudness normalization

Un altro tipo di normalizzazione si basa sulla misurazione del volume. Il guadagno viene modificato per portare l'ampiezza media a un livello target. Questa media può essere una semplice misurazione della potenza media (come il valore RMS) oppure può essere una misura del volume percepito dall'uomo (come l' EBU R128).

Normalizzazione a riga di comando

Per normalizzare un file audio a riga di comando in Linux possiamo usare ffmpeg-normalize

ffmpeg-normalize

La pagina web di riferimento è https://github.com/slhck/ffmpeg-normalize

Prerequisiti per l'installazione sono: - python 2.7 o 3 - ffmpeg v3.1 o successivi

Per installarlo utilizzare questo comando

pip3 install ffmpeg-normalize

Alcuni esempi

  • normalizzare (EBU R128) un file mp3 (è necessario specificare encoder e output)
    ffmpeg-normalize input.mp3 -c:a libmp3lame -b:a 320k -o output.mp3
  • normalizzare (peak normalization) un file mp3
    ffmpeg-normalize input.mp3 --normalization-type peak --target-level 0 -c:a libmp3lame -b:a 320k -o output.mp3 ffmpeg-normalize input.mp3 -nt peak -t 0 -c:a libmp3lame -b:a 320k -o output.mp3

Integrazione con youtube-dl

Per integrare la normalizzazione audio con youtube-dl si usa lo switch --exec

Per es. una normalizzazione EBU R128

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 https://www.youtube.com/watch?v=xymjDyGIvQ4 --exec 'ffmpeg-normalize {} -c:a libmp3lame -b:a 320k -o output.mp3 && rm {} && mv output.mp3 {}'

Per es. una normalizzazione peak

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 https://www.youtube.com/watch?v=xymjDyGIvQ4 --exec 'ffmpeg-normalize {} --normalization-type peak --target-level 0 -c:a libmp3lame -b:a 320k -o output.mp3 && rm {} && mv output.mp3 {}'

Come già detto l'audio di YouTube viene già normalizzato e una normalizzazione EBU R128 potrebbe risultare controproducente.

Esempio

Scarichiamo una traccia audio da YouTube e la rinominiamo orig.mp3

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 https://www.youtube.com/watch?v=xymjDyGIvQ4 --exec 'mv {} orig.mp3'

e analizziamone il volume

$ ffmpeg -i orig.mp3 -filter:a volumedetect -f null /dev/null

[Parsed_volumedetect_0 @ 0x55a943b5e2c0] n_samples: 20695734
[Parsed_volumedetect_0 @ 0x55a943b5e2c0] mean_volume: -15.7 dB
[Parsed_volumedetect_0 @ 0x55a943b5e2c0] max_volume: -3.0 dB
[Parsed_volumedetect_0 @ 0x55a943b5e2c0] histogram_2db: 1
[Parsed_volumedetect_0 @ 0x55a943b5e2c0] histogram_3db: 18
[Parsed_volumedetect_0 @ 0x55a943b5e2c0] histogram_4db: 1696
[Parsed_volumedetect_0 @ 0x55a943b5e2c0] histogram_5db: 76023

Ora applichiamo una normalizzazione EBU R128

ffmpeg-normalize orig.mp3 -c:a libmp3lame -b:a 320k -o ebur128.mp3

e poi una peak con volume target 0 db

ffmpeg-normalize orig.mp3 --normalization-type peak --target-level 0 -c:a libmp3lame -b:a 320k -o peak0.mp3

Ora analizziamo il volume dei due file normalizzati

$ ffmpeg -i ebur128.mp3 -filter:a volumedetect -f null /dev/null

[Parsed_volumedetect_0 @ 0x555d11c94780] n_samples: 20695734
[Parsed_volumedetect_0 @ 0x555d11c94780] mean_volume: -24.4 dB
[Parsed_volumedetect_0 @ 0x555d11c94780] max_volume: -10.1 dB
[Parsed_volumedetect_0 @ 0x555d11c94780] histogram_10db: 382
[Parsed_volumedetect_0 @ 0x555d11c94780] histogram_11db: 2813
[Parsed_volumedetect_0 @ 0x555d11c94780] histogram_12db: 6570
[Parsed_volumedetect_0 @ 0x555d11c94780] histogram_13db: 31148

$ ffmpeg -i peak0.mp3 -filter:a volumedetect -f null /dev/null

[Parsed_volumedetect_0 @ 0x5636f8793780] n_samples: 20695734
[Parsed_volumedetect_0 @ 0x5636f8793780] mean_volume: -12.7 dB
[Parsed_volumedetect_0 @ 0x5636f8793780] max_volume: -0.0 dB
[Parsed_volumedetect_0 @ 0x5636f8793780] histogram_0db: 16
[Parsed_volumedetect_0 @ 0x5636f8793780] histogram_1db: 1741
[Parsed_volumedetect_0 @ 0x5636f8793780] histogram_2db: 76022

Come si può vedere l'audio normalizzato EBU R128 risulta più basso di volume dell'originale

Risorse:
https://github.com/slhck/ffmpeg-normalize http://www.audiosonica.com/it/recensioni/post/16881/Loudness_e_sua_normalizzazione

Sfruttando il software illustrato nell'articolo "Scaricare un video di Youtube da linea di comando", è possibile anche ottenere un file audio da un video o una playlist di Youtube.

Il processo è composto da due passi principali:

  1. viene scaricato il media nel formato originario (.webm)
  2. il media viene convertito nel formato desiderato (.mp3)

Per il passo di conversione il software youtube-dl si appoggia a:

  • avconv
  • ffmpeg (consigliato)

Andiamo quindi ad installare il software ffmpeg con il comando

sudo apt-get update
sudo apt-get install ffmpeg
ffmpeg -version

Per convertire in un file mp3 un video di Youtube possiamo utilizzare il comando

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 https://www.youtube.com/watch?v=xymjDyGIvQ4

dove

-i - ignora gli errori
--extract-audio - estrae la traccia audio
--audio-format mp3 - converte l'audio in formato mp3
--audio-quality 0 - imposta la qualità audio migliore

Se vogliamo aggiungere i tag ID3 partendo dai metadati del video di Youtube basta aggiungere lo switch --add-metadata

youtube-dl -i --extract-audio --audio-format mp3 --audio-quality 0 --add-metadata https://www.youtube.com/watch?v=xymjDyGIvQ4

Può alle volte essere necessario (o comodo) scaricare in locale un video pubblicato su youtube. Esistono plugin per i maggiori browser che permettono di eseguire questa azione, o anche applicazioni grafiche; è però possibile eseguire facilmente questo compito anche da una finestra di terminale, utilizzando il software youtube-dl. Tale software è spesso già disponibile pacchettizzato nei repository ufficiali della propria distribuzione, quindi, usando ad esempio un pc con Debian o Ubuntu, per l'installazione basta aprire un terminale e digitare:

sudo apt-get install youtube-dl

A volte però il programma non è disponibile nei respository, oppure quello pacchettizzato è una versione obsoleta e non più funzionante; la soluzione consiste allora nel recarsi sul sito del progetto e scaricare l'ultima release, ecco come fare:

  • Puntare un browser all'indirizzo https://rg3.github.io/youtube-dl/
  • Cliccare sul pulsante Download
  • Seguire le istruzioni fornite per ottenere il software

Youtuble-dl offre moltissime opzioni per un utilizzo avanzato (compreso, ad esempio, il download di intere playlist), tutta la documentazione aggiornata è disponibile sul sito del progetto, a questo indirizzo: https://github.com/rg3/youtube-dl/blob/master/README.md#readme Per un utilizzo "base" segnalo che basta invocare il comando seguito dall'URL del video youtube che si vuole scaricare perché youtube-dl si occupi di scaricare tale video con il formato predefinito. Supponiamo di voler scaricare questo video

della Linux Foundation, il comando da digitare a terminale sarà semplicemente:

youtube-dl https://www.youtube.com/watch?v=11VGDAOVEag

Per conoscere i formati in cui un video è disponibile occorre aggiungere il flag -F:

youtube-dl -F https://www.youtube.com/watch?v=11VGDAOVEag
[youtube] 11VGDAOVEag: Downloading webpage
[youtube] 11VGDAOVEag: Downloading video info webpage
[info] Available formats for 11VGDAOVEag:
format code  extension  resolution note
249          webm       audio only DASH audio   50k , opus @ 50k, 626.23KiB
250          webm       audio only DASH audio   66k , opus @ 70k, 833.89KiB
140          m4a        audio only DASH audio  129k , m4a_dash container, mp4a.40.2@128k, 1.68MiB
251          webm       audio only DASH audio  134k , opus @160k, 1.65MiB
171          webm       audio only DASH audio  136k , vorbis@128k, 1.66MiB
160          mp4        256x144    144p  112k , avc1.4d400c, 12fps, video only, 1.43MiB
278          webm       256x144    144p  133k , webm container, vp9, 24fps, video only, 1.33MiB
133          mp4        426x240    240p  251k , avc1.4d4015, 24fps, video only, 3.22MiB
242          webm       426x240    240p  304k , vp9, 24fps, video only, 2.71MiB
243          webm       640x360    360p  559k , vp9, 24fps, video only, 4.82MiB
134          mp4        640x360    360p  623k , avc1.4d401e, 24fps, video only, 4.94MiB
244          webm       854x480    480p 1018k , vp9, 24fps, video only, 8.16MiB
135          mp4        854x480    480p 1114k , avc1.4d401e, 24fps, video only, 9.08MiB
247          webm       1280x720   720p 2056k , vp9, 24fps, video only, 15.98MiB
136          mp4        1280x720   720p 2216k , avc1.4d401f, 24fps, video only, 16.75MiB
248          webm       1920x1080  1080p 3608k , vp9, 24fps, video only, 29.37MiB
137          mp4        1920x1080  1080p 4155k , avc1.640028, 24fps, video only, 32.52MiB
17           3gp        176x144    small , mp4v.20.3, mp4a.40.2@ 24k, 1.08MiB
36           3gp        320x180    small , mp4v.20.3, mp4a.40.2, 2.99MiB
18           mp4        640x360    medium , avc1.42001E, mp4a.40.2@ 96k, 7.80MiB
43           webm       640x360    medium , vp8.0, vorbis@128k, 9.82MiB
22           mp4        1280x720   hd720 , avc1.64001F, mp4a.40.2@192k (best)

Infine, per scaricare in un formato predefinito, basta usare il flag -f seguito dal numero corrispondente (prima colonna dell'output precedente) al formato voluto. Volendo quindi scaricare il video in formato mp4 a una risoluzione di 426x240 il comando diventerà quindi:

youtube-dl -f 133 https://www.youtube.com/watch?v=11VGDAOVEag

Un'ultima nota; youtube-dl non scarica solo i video di youtube, come il nome potrebbe erroneamente far pensare: la lista di siti supportati è infatti molto ampia (https://rg3.github.io/youtube-dl/supportedsites.html)