Помощь с отображением ffmpeg, кодирование 1 6-канального звука в несколько дорожек

Помощь с отображением ffmpeg, кодирование 1 6-канального звука в несколько дорожек

У меня есть 2 входных файла:

  • cover.jpg
  • audio.dts(6 каналов)

Моим целевым файлом будет mp4 с 1 видео и 3 аудио:

  • аудио 1 - это 2-канальный aac
  • аудио 2 — это 6-канальный ac3
  • аудио 3 - это 6-канальный dts

Вот команда, которую я попробовал. Изображение в видео с многоканальным звуком:

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

Но, похоже, те аудиопараметры, которые я применил к аудио №1, также применились к аудио №2 и аудио №3.

Как сделать так, чтобы эти опции работали только для одного трека?

решение1

Как всегда, в FFmpeg существует несколько способов выполнения подобных задач.

Я наиболее знаком с использованием channelsplitфильтра для разделения аудиопотоков и определения меток для каждого из них. Таким образом, вы можете применять различные фильтры к любому из каналов по отдельности и сопоставлять вывод, чтобы включать любую комбинацию каналов, которую вы хотите.

Фильтр будет выглядеть примерно так:

ffmpeg -i [INPUT_video] -i [INPUT_3channel_audio] -filter_complex "[1:a]channelsplit[1][2][3];...."

В этом примере мы разделили каждый из 3 каналов на новые метки: [1] [2]и [3]. Эти метки теперь можно вызывать позже и пропускать через другие фильтры и/или сопоставлять с конечным выводом.

Надеюсь это поможет!

Связанный контент