Ich habe 2 Eingabedateien:
cover.jpg
audio.dts
(6 Kanäle)
Meine Zieldatei wird eine MP4-Datei mit 1 Video und 3 Audios sein:
- Audio 1 ist 2-Kanal-AAC
- Audio 2 ist 6 Kanal AC3
- Audio 3 ist 6-Kanal-DTS
Hier ist der Befehl, den ich ausprobiert habe. Bild zu Video mit Mehrkanal-Audio:
ffmpeg -loop 1 -i cover.jpg -i audio.dts \
-map 0:0 -map 1:0 -map 1:0 -map 1:0 \
-f mp4 \
-codec:v:0 libx264 -r:0 1 -profile:v:0 main -level 3.1 -pix_fmt:0 yuv420p -qmax:0 19 -qmin:0 18 \
-codec:a:0 libfaac -ac:0 2 -ar:0 44100 -q:a:0 640 -af:0 "pan=stereo| FL = FL + 0.5*FC + 1.0*BL + 1.0*SL + 0.8*LFE | FR = FR + 0.5*FC + 1.0*BR + 1.0*SR + 0.8*LFE" \
-codec:a:1 ac3 -ac:1 6 -ab:a:1 640 \
-codec:a:2 copy \
-threads 0 -y \
-shortest -t 00:00:39.000 out.mp4
Aber es scheint, dass die Audiooptionen, die ich auf Audio Nr. 1 angewendet habe, auch auf Audio Nr. 2 und Audio Nr. 3 zutreffen.
Wie kann ich diese Option nur für eine Spur aktivieren?
Antwort1
Wie immer gibt es mehrere Möglichkeiten, solche Aufgaben in FFmpeg auszuführen.
Am besten kenne ich mich mit der Verwendung des channelsplit
Filters aus, um Ihre Audiostreams zu trennen und für jeden von ihnen Labels zu definieren. Auf diese Weise können Sie verschiedene Filter auf jeden der Kanäle einzeln anwenden und die Ausgabe so zuordnen, dass sie jede gewünschte Kanalkombination enthält.
Der Filter sieht ungefähr so aus:
ffmpeg -i [INPUT_video] -i [INPUT_3channel_audio] -filter_complex "[1:a]channelsplit[1][2][3];...."
In diesem Beispiel haben wir jeden der 3 Kanäle in neue Labels aufgeteilt: [1]
[2]
und [3]
. Diese Labels können jetzt später aufgerufen und durch andere Filter geschoben und/oder der endgültigen Ausgabe zugeordnet werden.
Hoffe das hilft!