У меня есть 2 аудиовыхода ffmpeg, отображенных из filtergraph, следующим образом:
-filter_complex "[0:1]..bla-bla-bla..[ac3];[0:2]..bla-bla-bla..[dts]" -map "[dts]" -map "[ac3]"
Далее мне нужно закодировать 2 аудиопотока. Должен же быть способ указать, какой кодек использовать для каждого потока, а? Что-то вроде этого:
-codec:[dts] dts -codec:[ac3] ac3
Нет. Это вызывает "Недопустимый спецификатор потока". И все примеры, которые я нашел, показывают только stream_specifier, который ссылается на входной поток, а не на поток filtergraph.
Что я пробовал:
-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
Я также попробовал все варианты с кавычками (например, -codec:"[dts]")
Все они вызывают "Неверный спецификатор потока". Есть какие-нибудь идеи?
решение1
Вам необходимо использовать индекс потока отображенного потока среди выходных потоков.
Индекс определяется порядком карт.
В — это второе отображение -map "[dts]" -map "[ac3]" -codec:dts dts -codec:ac3 ac3
,
[ac3]
поэтому его кодек назначается с помощью -c:1 ac3
или -c:a:1 ac3
.
Если бы карты были -map 0:v:1 -map "[dts]" -map 0:s:0 -map "[ac3]"
,
то это было бы -c:3 ac3
или-c:a:1 ac3
решение2
Достаточно надежный способ — установить кодеки по типу потока:
-c:a CODEC
это установит кодек для всех аудиопотоков.
Добавление позиционного параметра впоследствии позволяет вам указывать различные потоки без необходимости подсчета всех потоков других типов:
-c:a:0 CODEC
установит кодек дляпервый аудиотранслировать
-c:a:1 CODEC
установит кодек длявторой аудиотранслировать
-c:a:2 CODEC
установит кодек длятретий аудиопоток и тд.
-c:v:0
будет работать аналогично для видеопотоков.