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é?

Sébastien
la source

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

llogan
la source
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.

ptQa
la source