ffmpeg: Verschiedene Codecs an verschiedene Filtergraph-Ausgabestreams anhängen – wie?

ffmpeg: Verschiedene Codecs an verschiedene Filtergraph-Ausgabestreams anhängen – wie?

Ich habe zwei ffmpeg-Audioausgänge, die aus einem Filtergraphen zugeordnet sind, und zwar folgendermaßen:

-filter_complex "[0:1]..bla-bla-bla..[ac3];[0:2]..bla-bla-bla..[dts]" -map "[dts]" -map "[ac3]"

Als nächstes muss ich die beiden Audiostreams kodieren. Es muss doch eine Möglichkeit geben, anzugeben, welcher Codec für jeden Stream verwendet werden soll, oder? So etwas wie das hier:

-codec:[dts] dts -codec:[ac3] ac3

Nö. Das führt zu „Ungültiger Stream-Spezifizierer“. Und alle Beispiele, die ich gefunden habe, zeigen lediglich einen Stream-Spezifizierer, der sich auf einen Eingabestream bezieht, nicht auf einen Filtergraph-Stream.

Was ich versucht habe:

-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:dts dts -codec:ac3 ac3

-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:[dts] dts -codec:[ac3] ac3

-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:a:dts dts -codec:a:ac3 ac3

-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:a:[dts] dts -codec:a:[ac3] ac3

-filter_complex "[0:1]..[ac3];[0:2]..[dts]" -map "[dts]" -map "[ac3]" -codec:[a:dts] dts -codec:[a:ac3] ac3

Ich habe auch alle Varianten mit Anführungszeichen probiert (zB -codec:"[dts]")

Alle verursachen die Meldung „Ungültiger Stream-Spezifizierer“. Gibt es Ideen?

Antwort1

Sie müssen den Stream-Index des zugeordneten Streams unter den Ausgabe-Streams verwenden.
Der Index wird durch die Reihenfolge der Zuordnungen bestimmt.

In ist die zweite Zuordnung -map "[dts]" -map "[ac3]" -codec:dts dts -codec:ac3 ac3,
[ac3]daher wird der Codec mithilfe von -c:1 ac3oder zugewiesen -c:a:1 ac3.

Wenn die Karten wären -map 0:v:1 -map "[dts]" -map 0:s:0 -map "[ac3]",
dann wäre es -c:3 ac3oder-c:a:1 ac3

Antwort2

Eine ziemlich narrensichere Methode besteht darin, die Codecs nach Stream-Typ einzustellen: -c:a CODEClegt den Codec für alle Audio-Streams fest

Durch anschließendes Hinzufügen eines Positionsparameters können Sie verschiedene Streams angeben, ohne alle Streams anderer Typen zählen zu müssen:

-c:a:0 CODEClegt den Codec für dieerster TonStrom

-c:a:1 CODEClegt den Codec für diezweites AudioStrom

-c:a:2 CODEClegt den Codec für diedrittes AudioStreamen und so weiter.

-c:v:0funktioniert ähnlich für Video-Streams.

verwandte Informationen