Ffmpeg Audio Stereo a Mono usando solo el canal izquierdo


12

Uso el siguiente comando para extraer partes de video de un registro '.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

La transmisión de audio es estéreo, pero el canal derecho solo grabó ruido. Aquí están las informaciones de entrada:

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

Me gustaría que la transmisión de audio de la salida sea mono (solo con el canal izquierdo original). Ya hice pruebas usando la opción '-ac 1', pero en este caso los dos canales se fusionan y pierdo ~ 6dB de ganancia.

¿Qué opción debo usar para descartar el canal derecho y la salida con transmisión de audio mono?

EDITAR: salida ffmpeg con la opción 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%

Respuestas:


11

Puede modificar un archivo de video directamente sin tener que volver a codificar la transmisión de video. Sin embargo, la transmisión de audio tendrá que volver a codificarse.

Canal izquierdo a mono:

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

Canal izquierdo a estéreo:

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

Si desea utilizar el canal correcto, escriba en 0.1.1lugar de 0.1.0.

Trabajando con ffmpeg versión 3.1.3.


también conocido como cómo solucionar el error de corrupción del canal derecho de
Shadowplay

Vale la pena mencionar que cuando se usa con -c:a copyaudio no se modificará a pesar de que le gustaría tener una copia directa de un solo canal.
termil0r

4

El siguiente es un ejemplo de trabajo confirmado con ffmpeg versión 2.4.1-tessus:

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

Más información en la página de canales de audio de FFMPEG .


Por cierto, para cualquiera que necesite el paso adicional de volver a estéreo pero que ambos canales mantengan el volumen completo (es decir, básicamente copiando el canal izquierdo sobre el canal derecho), puede hacerloffmpeg -i inputfile.wav -map_channel 0.0.0 -map_channel 0.0.0 outputfile.wav
Kev

2

Manipulación de canales de audio con ffmpeg

Capítulo Silenciar un canal

Este ejemplo silenciará el primer canal (el canal izquierdo) pero mantendrá el segundo canal como está:

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

en su caso es necesario silenciar el canal derecho. ¿Correcto?


Opción no reconocida 'map_channel'.
Eric

1
@Eric Supongo (ya que no ha incluido la salida) que su versión de ffmpeg es demasiado antigua, o en realidad es de Libav y no de FFmpeg . Pruebe con una nueva: ffmpeg.org/download.html
slhck

@ArcherGodson - ¿Podemos activar el silencio del canal silenciado modificando la misma unidad de ffmpeg?
Prakash V Holkar

2

Resolví el problema usando la última versión de Ffmpeg (2.0.1). La siguiente línea de comando hace el trabajo:

/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

Por cierto, esta publicación fue muy instructiva!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.