![ffmpeg: Verschiedene Codecs an verschiedene Filtergraph-Ausgabestreams anhängen – wie?](https://rvso.com/image/1654752/ffmpeg%3A%20Verschiedene%20Codecs%20an%20verschiedene%20Filtergraph-Ausgabestreams%20anh%C3%A4ngen%20%E2%80%93%20wie%3F.png)
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 ac3
oder 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 ac3
oder-c:a:1 ac3
Antwort2
Eine ziemlich narrensichere Methode besteht darin, die Codecs nach Stream-Typ einzustellen:
-c:a CODEC
legt 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 CODEC
legt den Codec für dieerster TonStrom
-c:a:1 CODEC
legt den Codec für diezweites AudioStrom
-c:a:2 CODEC
legt den Codec für diedrittes AudioStreamen und so weiter.
-c:v:0
funktioniert ähnlich für Video-Streams.