Tecnologia e non solo

aprile 2, 2013

FFmpeg DRC audio con Sox

Filed under: Debian,Video — telperion @ 11:10 am

FFmpeg non dispone di un compressore della dinamica dell’audio (DRC), utile per evitare esplosioni fragorose e dialoghi inudibili, ma grazie a sox e alle pipe si può procedere cosi:

ffmpeg -i 'FILE_INPUT.mkv' -vn -f sox - | sox -t sox - -c 2 -b 16 -t wav - compand 0.0,1 6:-70,-43,-20 -5 -90 0.1 | ffmpeg -y -i - -c:a libfaac -b:a 112k -f mp4 out.m4a

Nella prima parte ffmpeg estrae l’audio da un file (avi, mkv, mp4, flv) e lo passa alla pipe in formato sox (-f sox), poi sox converte la pipe in wav 16bit 2 canali, applica la compressione dinamica (compand) e lo passa ad un’altra pipe che alimenta ffmpeg che comprime il flusso nell’esempio, in aac 112Kb/s nel file out.m4a, il tutto senza giganteschi file wav intermedi su disco.
Al termine potremo sostituire l’audio originale con out.m4a con il drc (sbalzi di volume contenuti) tramite lo stesso ffmpeg o con mkvmerge gui.

Volendo è possibile fare anche il muxing finale in un unico passaggio:

ffmpeg -i video_originale.mkv -vn -f sox - | sox -t sox - -c 2 -b 16 -t wav - compand 0.0,1 6:-70,-43,-20 -5 -90 0.1 | ffmpeg -y -i video_originale.mkv -i - -map 0:0 -map 1:0 -f matroska -c:v copy -c:a libfaac -b:a 112k out_drc.mkv

ottenendo cosi “al volo” il file out_drc.mkv con l’audio compresso.

Potete anche conservare l’audio originale ed aggiungere il secondo audio drc:

ffmpeg -i video_originale.mp4 -vn -f sox - | sox -t sox - -c 2 -b 16 -t wav - compand 0.0,1 6:-70,-43,-20 -5 -90 0.1 | ffmpeg -y -i video_originale.mp4 -i - -map 0:0 -map 0:1 -map 1:0 -f matroska -c:v copy -c:a:0 copy -c:a:1 libfaac -b:a:1 112k -metadata:s:1 language=ita -metadata:s:2 language=ita_drc out_2audio_drc.mkv

ottenendo cosi “al volo” il file out_2audio_drc.mkv con l’audio originale (ita) e con l’audio compresso (ita_drc) che potrete selezionare nel player.

Dettagli di out_2audio_drc.mkv:

Input #1, wav, from 'pipe:':
Duration: N/A, bitrate: 1536 kb/s
Stream #1:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, stereo, s16, 1536 kb/s
Output #0, matroska, to 'out_2audio_drc.mkv':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isom
encoder : Lavf54.63.104
Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p, 720x404, q=2-31, 524 kb/s, 23.98 fps, 1k tbn, 24k tbc
Metadata:
creation_time : 2013-03-31 13:30:26
handler_name : GPAC ISO Video Handler
Stream #0:1(ita): Audio: aac ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, 105 kb/s
Metadata:
creation_time : 2013-03-30 15:21:57
handler_name : GPAC ISO Audio Handler
Stream #0:2(ita_drc): Audio: aac ([255][0][0][0] / 0x00FF), 48000 Hz, stereo, s16, 112 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #1:0 -> #0:2 (pcm_s16le -> libfaac)
size= 994464kB time=00:44:11.90 bitrate=3072.0kbits/s 4 bitrate= 749.6kbits/s
video:0kB audio:994464kB subtitle:0 global headers:0kB muxing overhead 0.000003%
frame=63577 fps=839 q=-1.0 Lsize= 242544kB time=00:44:11.90 bitrate= 749.2kbits/s
video:169871kB audio:70512kB subtitle:0 global headers:0kB muxing overhead 0.899096%

real 1m16.032s
user 2m23.386s
sys 0m3.234s

Ovviamente il codec audio è arbitrario, potete usarne uno qualsiasi tra quelli disponibili e compatibili con il formato di uscita, idem per il formato di uscita.
Video ed audio originali restano inalterati (copy).

Per maggiori info su compand:
man sox e cercate compand.

Alcuni preset per compand qui.

Utilizzati:

Debian sid 64bit

ffmpeg version 1.2 Copyright (c) 2000-2013 the FFmpeg developers
built on Mar 25 2013 18:25:52 with gcc 4.7 (Debian 4.7.2-5)

sox: SoX v14.4.1

%d blogger hanno fatto clic su Mi Piace per questo: