ffmpeg-Mapping-Hilfe, 1 6-Kanal-Audio in mehrere Spuren kodieren

ffmpeg-Mapping-Hilfe, 1 6-Kanal-Audio in mehrere Spuren kodieren

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 channelsplitFilters 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!

verwandte Informationen