canaux stéréo ffmpeg en deux canaux mono


11

Je voulais savoir s'il existe un moyen de diviser la stéréo en deux fichiers wav mono. Ma première supposition était

ffmpeg -threads "16" -i "$2" -map 0:1:1 "$3"

car mon exemple de vidéo contient les informations suivantes:

Audio
ID                                       : 2
Format                                   : AAC
Format/Info                              : Advanced Audio Codec
Format profile                           : LC
Codec ID                                 : 40
Duration                                 : 39mn 0s
Bit rate mode                            : Constant
Bit rate                                 : 256 Kbps
Channel(s)                               : 2 channels
Channel positions                        : Front: L R

J'ai donc un flux audio avec deux canaux et je veux deux canaux mono. Au début, je l'ai essayé avec map_channel, mais cela n'a pas fait l'affaire à la place, j'ai reçu un message d'erreur:

Syntax error, mapchan usage: [file.stream.channel|-1][:syncfile:syncstream]

J'ai donc essayé à nouveau avec le code mentionné ci-dessus et au moins ffmpeg a fait quelque chose, mais le résultat n'était pas ce à quoi je m'attendais, au lieu de le décomposer en deux fichiers wav mono, le résultat était:

info.system.container = WAVE
info.system.size = 449413166 Bytes
info.system.size = 428.59 MiB
info.system.playtime = 2340.69 s
info.audio0.codec = PCM
info.audio0.desc = 
info.audio0.format_endianness = Little
info.audio0.format_sign = Signed
info.audio0.format_resolution = 16 bits
info.audio0.samprate = 48000 Hz
info.audio0.channels = 2

encore une fois avec deux canaux audio, alors où je me suis trompé?

Réponses:


17

À l'aide de ffmpeg, il existe plusieurs méthodes que je connais pour passer de la stéréo à deux fichiers mono individuels, ou deux flux mono dans un fichier:

stéréo à 2 sorties mono

stéréo à 2 sorties mono

-map_channel option

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

pan filtre audio

ffmpeg -i stereo.wav -filter_complex \
"[0:0]pan=1|c0=c0[left]; \
 [0:0]pan=1|c0=c1[right]" \
-map "[left]" left.wav -map "[right]" right.wav

stéréo à 2 flux mono

channelsplit filtre audio

stéréo à 2 flux mono

Cela créera un fichier de sortie qui a deux flux mono individuels:

ffmpeg -i input.m4a -filter_complex channelsplit out.mka

Regarde aussi


Merci, j'ai trouvé mon défaut. Lorsque j'utilisais, -map_channelje n'utilisais pas de points simples, mais à la place, j'utilisais des points doubles, il n'est donc pas étonnant que cela n'ait pas fonctionné. Maintenant ça marche!
sebastian

1
permet de supposer que j'ai un fichier avec 6 canaux dans un flux, comment savoir quel canal est lequel? Quand j'ai 2 canaux c'est facile, c'est toujours 0.0.0 gauche et 0.0.1 droite. J'ai recherché dans la documentation ffmpeg et il est dit -layoutsmais il n'y a pas d'exemple comment cela fonctionne. Je l'ai essayé et le message que je reçois est Missing argument for option 'layouts'quel argument attend ffmpeg?
sebastian

@sebastian Vous voulez créer six fichiers de sortie mono à partir de l'entrée à six canaux?
llogan

J'ai deux ou trois clips qui ont un son surround 5.1 et bien sûr, après avoir utilisé map_channel sur les six, je ne peux pas dire quel map_channel appartient à quelle position, voici un exemple:, Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFEmais je pense avoir déjà trouvé une solution pour ce problème.
sebastian

@sebastian Quelle est votre solution?
llogan

1

Vous devez utiliser le filtre channelplit pour cela. -map ne peut pas faire cela. Par exemple:

ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv

Vérifiez le lien vers la documentation que j'ai fournie.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.