ffmpeg Stereokanäle in zwei Monokanäle

11

Ich wollte wissen, ob es eine Möglichkeit gibt, Stereo in zwei Mono-WAV-Dateien aufzuteilen. Meine erste Vermutung war

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

weil mein Beispielvideo die folgenden Informationen enthält:

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

Ich habe also diesen einen Audiostream mit zwei Kanälen und möchte zwei Monokanäle. Zuerst habe ich es mit map_channel versucht, aber das hat nicht geholfen, stattdessen bekam ich eine Fehlermeldung:

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

Also habe ich es mit dem oben genannten Code erneut versucht und zumindest hat ffmpeg etwas getan, aber das Ergebnis war nicht das, was ich erwartet hatte, anstatt es in zwei Mono-WAV-Dateien aufzuteilen, war das Ergebnis:

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

wieder mit zwei Audiokanälen, also wo bin ich falsch gelaufen?

Sebastian
quelle

Antworten:

17

Mit ffmpeg gibt es verschiedene Methoden, die ich kenne, um von Stereo zu zwei einzelnen Mono-Dateien oder zwei Mono-Streams in einer Datei zu wechseln:

Stereo bis 2 Mono-Ausgänge

Stereo bis 2 Mono-Ausgänge

-map_channel Möglichkeit

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

pan Audiofilter

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

Stereo bis 2 Mono-Streams

channelsplit Audiofilter

Stereo bis 2 Mono-Streams

Dadurch wird eine Ausgabedatei mit zwei einzelnen Monostreams erstellt:

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

Siehe auch

llogan
quelle
Danke, ich habe meinen Fehler gefunden. Als ich verwendet -map_channelhabe, habe ich keine einzelnen Punkte verwendet, sondern stattdessen doppelte Punkte. Kein Wunder, dass es nicht funktioniert hat. Jetzt funktioniert es!
Sebastian
1
Nehmen wir an, ich habe eine Datei mit 6 Kanälen in einem Stream. Woher weiß ich, welcher Kanal welcher ist? Wenn ich 2 Kanäle habe, ist es einfach, es ist immer 0.0.0 links und 0.0.1 rechts. Ich habe in der ffmpeg-Dokumentation nachgeschlagen und es heißt, -layoutsaber es gibt kein Beispiel, wie es funktioniert. Ich habe es versucht und die Nachricht, die ich bekomme, ist, Missing argument for option 'layouts'welches Argument erwartet ffmpeg?
Sebastian
@sebastian Sie möchten sechs Mono-Ausgabedateien aus dem Sechs-Kanal-Eingang erstellen?
Llogan
Ich habe zwei oder drei Clips mit 5.1-Surround-Sound und natürlich kann ich nach Verwendung von map_channel für alle sechs nicht sagen, welcher map_channel zu welcher Position gehört. Hier ein Beispiel: Audio ID : 2 Channel(s) : 6 channels Channel positions : Front: L C R, Side: L R, LFEAber ich denke, ich habe bereits eine Lösung gefunden für dieses Problem.
Sebastian
@sebastian Was ist deine Lösung?
Llogan
1

Sie sollten dafür den Channelsplit-Filter verwenden . -map kann das nicht. Zum Beispiel:

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

Überprüfen Sie den Link zur Dokumentation, die ich bereitgestellt habe.

ptQa
quelle