ffmpeg: adjunte varios códecs a varios flujos de salida de filtergraph: ¿cómo?

ffmpeg: adjunte varios códecs a varios flujos de salida de filtergraph: ¿cómo?

Tengo 2 salidas de audio ffmpeg asignadas desde un gráfico de filtro, de la siguiente manera:

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

A continuación, necesito codificar las 2 transmisiones de audio. Tiene que haber una manera de especificar qué códec usar para cada transmisión, ¿no? Algo como esto:

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

No. Eso provoca un "especificador de flujo no válido". Y todos los ejemplos que he encontrado muestran únicamente un stream_specifier que se refiere a un flujo de entrada, no a un flujo de gráfico de filtro.

Lo que he probado:

-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

También probé todas las variaciones con comillas (por ejemplo, -codec:"[dts]")

Todos ellos provocan un "especificador de flujo no válido". ¿Hay alguna idea?

Respuesta1

Debe utilizar el índice de secuencia de la secuencia asignada entre las secuencias de salida.
El índice está determinado por el orden de los mapas.

En -map "[dts]" -map "[ac3]" -codec:dts dts -codec:ac3 ac3,
[ac3]está el segundo mapeo por lo que su códec se asigna usando -c:1 ac3o -c:a:1 ac3.

Si los mapas fueran -map 0:v:1 -map "[dts]" -map 0:s:0 -map "[ac3]",
entonces sería -c:3 ac3o-c:a:1 ac3

Respuesta2

Una forma bastante infalible es configurar los códecs por tipo de transmisión: -c:a CODECconfigurará el códec para todas las transmisiones de audio

Agregar un parámetro posicional posteriormente le permite especificar diferentes transmisiones sin tener que contar todas las transmisiones de otros tipos:

-c:a:0 CODECconfigurará el códec para elprimer audioarroyo

-c:a:1 CODECconfigurará el códec para elsegundo audioarroyo

-c:a:2 CODECconfigurará el códec para eltercer audiotransmitir y así sucesivamente.

-c:v:0funcionará de manera similar para transmisiones de video.

información relacionada