Ffmpeg Audio Stereo to Mono utilisant uniquement le canal gauche

12

J'utilise la commande suivante pour extraire des parties vidéo d'un enregistrement «.MTS» (vidéo).

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

Le flux audio est stéréo mais le canal droit n'a enregistré que du bruit. Voici les informations d'entrée:

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

Je voudrais que le flux audio de la sortie soit mono (avec le canal gauche d'origine uniquement). J'ai déjà fait des tests en utilisant l'option '-ac 1', mais dans ce cas les deux canaux sont fusionnés et je perds ~ 6dB de gain.

Quelle option dois-je utiliser pour supprimer le canal droit et la sortie avec un flux audio mono?

EDIT: sortie ffmpeg avec option 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%
Eric
la source

Réponses:

11

Vous pouvez modifier un fichier vidéo directement sans avoir à ré-encoder le flux vidéo. Cependant, le flux audio devra être ré-encodé.

Canal gauche vers mono:

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

Canal gauche vers stéréo:

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

Si vous souhaitez utiliser le bon canal, écrivez à la 0.1.1place de 0.1.0.

Travailler avec ffmpeg version 3.1.3.

qubodup
la source
aka comment corriger le bug de corruption du canal droit de
shadowplay
Il convient de mentionner que lors de l'utilisation avec l' -c:a copyaudio ne sera pas modifié même si vous souhaitez avoir une copie directe de canal unique.
termil0r
4

Ce qui suit est un exemple de travail confirmé avec ffmpeg version 2.4.1-tessus:

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

Plus d'informations sur la page des canaux audio de FFMPEG .

user49692
la source
BTW pour tous ceux qui ont besoin de l'étape supplémentaire de revenir à la stéréo, mais ayant les deux canaux restent à plein volume (c'est-à-dire, copiant essentiellement le canal gauche sur le canal droit), vous pouvez le faireffmpeg -i inputfile.wav -map_channel 0.0.0 -map_channel 0.0.0 outputfile.wav
Kev
2

Manipulation des canaux audio avec ffmpeg

Chapitre Couper un canal

Cet exemple mettra en sourdine le premier canal (le canal gauche) mais gardera le deuxième canal tel quel:

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

dans votre cas, son besoin de couper le canal droit. droite?

ArcherGodson
la source
Option non reconnue 'map_channel'.
Eric
1
@Eric Je suppose (puisque vous n'avez pas inclus la sortie) que votre version de ffmpeg est trop ancienne, ou qu'elle est en fait de Libav et non de FFmpeg . Essayez avec une version plus récente: ffmpeg.org/download.html
slhck
@ArcherGodson - Pouvons-nous réactiver le canal muet en modifiant le même ffmpeg coammnd
Prakash V Holkar
2

J'ai résolu le problème en utilisant la dernière version de Ffmpeg (2.0.1). La ligne de commande suivante fait le travail:

/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

Btw, ce post a été très instructif!

Eric
la source