Ffmpeg Audio Stereo su Mono usando solo il canale sinistro


12

Uso il seguente comando per estrarre parti video di un record '.MTS' (video).

ffmpeg -i 00402.MTS -s 1280x720 -r 25 -ss 0:00:05.38608 -vcodec libxvid -qscale:v 2 -acodec ac3 -ar 48000 -ab 256k -t 0:00:06.613917 m001_mono.avi

Il flusso audio è stereo ma il canale giusto ha registrato solo rumore. Ecco le informazioni di input:

Stream #0.0[0x1011]: Video: h264 (High), yuv420p, 1440x1080 [PAR 4:3 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0.1[0x1100]: Audio: ac3, 48000 Hz, stereo, s16, 256 kb/s

Vorrei che il flusso audio dell'uscita fosse mono (solo con il canale sinistro originale). Ho già effettuato dei test utilizzando l'opzione '-ac 1', ma in questo caso i due canali vengono uniti e perdo ~ 6dB di guadagno.

Quale opzione devo usare per scartare il canale giusto e l'output con flusso audio mono?

EDIT: output di ffmpeg con opzione map_channel

/home/eric/buildsys/ffmpeg-2.0.1/ffmpeg -i 00402.MTS -s 1280x720 -r 25 -ss 0:00:05.38608    -vcodec libxvid -qscale:v 2 -acodec ac3 -ar 48000 -ab 256k -t 0:00:06.61391 -map_channel -1 -map_channel 0.1.0 m001_test.avi
ffmpeg version 2.0.1 Copyright (c) 2000-2013 the FFmpeg developers
 built on Sep 24 2013 05:31:18 with gcc 4.8 (Debian 4.8.1-10)
configuration: --extra-cflags=-I../static/include --extra-ldflags='-L../static/lib -static' --enable-gpl --enable-version3 --enable-static --disable-shared --disable-debug --enable-runtime-cpudetect --enable-libmp3lame --enable-libx264 --enable-libspeex --enable-libvorbis --enable-libvpx --enable-libfreetype --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-gray --enable-libopenjpeg --disable-ffserver
libavutil      52. 38.100 / 52. 38.100
libavcodec     55. 18.102 / 55. 18.102
libavformat    55. 12.100 / 55. 12.100
libavdevice    55.  3.100 / 55.  3.100
libavfilter     3. 79.101 /  3. 79.101
libswscale      2.  3.100 /  2.  3.100
libswresample   0. 17.102 /  0. 17.102
libpostproc    52.  3.100 / 52.  3.100
Input #0, mpegts, from '00402.MTS':
Duration: 00:01:18.25, start: 0.455556, bitrate: 12217 kb/s
Program 1 
Stream #0:0[0x1011]: Video: h264 (High) (HDMV / 0x564D4448), yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 25 fps, 50 tbr, 90k tbn, 50 tbc
Stream #0:1[0x1100]: Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, stereo, fltp, 256 kb/s
File 'm001_test.avi' already exists. Overwrite ? [y/N] y
-map_channel is forwarded to lavfi similarly to -af pan=0x3:c1=c0.
[pan @ 0x248a560] This syntax is deprecated. Use '|' to separate the list items.
[pan @ 0x248a560] Pure channel mapping detected: M 0
Output #0, avi, to 'm001_test.avi':
Metadata:
ISFT            : Lavf55.12.100
Stream #0:0: Video: mpeg4 (libxvid) (xvid / 0x64697678), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 tbn, 25 tbc
Stream #0:1: Audio: ac3 ([0] [0][0] / 0x2000), 48000 Hz, stereo, fltp, 256 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (h264 -> libxvid)
Stream #0:1 -> #0:1 (ac3 -> ac3)
Press [q] to stop, [?] for help
frame=  166 fps= 23 q=2.0 Lsize=    4012kB time=00:00:06.64 bitrate=4950.3kbits/s    
video:3787kB audio:207kB subtitle:0 global headers:0kB muxing overhead 0.464949%

Risposte:


11

Puoi modificare direttamente un file video senza dover ricodificare il flusso video. Tuttavia, il flusso audio dovrà essere ricodificato.

Canale da sinistra a mono:

ffmpeg -i video.mp4 -map_channel 0.1.0 -c:v copy mono.mp4

Canale sinistro su stereo:

ffmpeg -i video.mp4 -map_channel 0.1.0 -map_channel 0.1.0 -c:v copy stereo.mp4

Se vuoi usare il canale giusto, scrivi 0.1.1invece di 0.1.0.

Lavorare con ffmpeg versione 3.1.3.


aka come correggere il bug di corruzione del canale destro di
Shadowplay

Vale la pena ricordare che quando si utilizza con l' -c:a copyaudio non verrà modificato anche se si desidera avere una copia diretta del singolo canale.
termil0r

4

Quello che segue è un esempio funzionante confermato con ffmpeg versione 2.4.1-tessus:

ffmpeg -i stereo.wav -map_channel 0.0.0 left.wav

Maggiori informazioni sulla pagina del canale audio di FFMPEG .


A proposito di chiunque abbia bisogno del passaggio extra per tornare allo stereo ma avere entrambi i canali a tutto volume (cioè, fondamentalmente copiando il canale sinistro sopra il canale destro), puoi farloffmpeg -i inputfile.wav -map_channel 0.0.0 -map_channel 0.0.0 outputfile.wav
Kev

2

Manipolazione dei canali audio con ffmpeg

Capitolo Disattiva l'audio di un canale

Questo esempio disattiva il primo canale (il canale sinistro) ma mantiene il secondo canale così com'è:

ffmpeg -i stereo.wav -map_channel -1 -map_channel 0.0.1 output.wav

nel tuo caso è necessario disattivare l'audio del canale destro. destra?


Opzione non riconosciuta 'map_channel'.
Eric

1
@Eric Sto supponendo (dal momento che non hai incluso l'output) che la tua versione di ffmpeg è troppo vecchia, o in realtà è di Libav e non di FFmpeg . Provane
slhck,

@ArcherGodson - È possibile riattivare l'audio del canale disattivato modificando lo stesso coammnd di ffmpeg
Prakash V Holkar,

2

Ho risolto il problema utilizzando l'ultima versione di Ffmpeg (2.0.1). La seguente riga di comando rende il lavoro:

/home/eric/buildsys/ffmpeg-2.0.1/ffmpeg -i 00402.MTS -s 1280x720 -ss 0: 00: 05.38608 -vcodec libxvid -qscale: v 2 -acodec ac3 -ar 48000 -ab 256k -t 0: 00: 06.61391 -af pan = 1: c0 = c0 m001_mono.avi

A proposito, questo post è stato molto istruttivo!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.