18

Я хочу заменить второй аудиопоток (0:2) в видеофайле, который имеет два аудиопотока, и, если возможно, дать ему метку. Как бы я пошел по этому поводу? Все найденные команды ffmpeg не позволят мне сохранить второй аудиопоток.

1 ответ1

21

Используйте опцию -map чтобы выбрать ваши потоки. При выборе потока по умолчанию выбирается только один тип потока, поэтому необходимо использовать -map .

Заменить второй аудиопоток

ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
  • 0:v - 0 относится к первому входу, который является video.mkv . v означает "выбрать тип видеопотока".

  • 0:a:0 - 0 относится к первому входу, который является video.mkv . Средство "выбрать тип звукового потока". Последний a относится к первому аудиопотоку с этого входа. Если используется только 0 , тогда все видеопотоки будут отображены.

  • 0:a - 1:a относится ко второму входу, который является 1 . Средство "выбрать тип звукового потока".

  • audio.mp3 будет потоковое копирование (повторное мультиплексирование) вместо кодирования. Если вам нужен определенный аудиокодек, вы должны указать a (чтобы сохранить видео), а затем, например, -codec copy чтобы перекодировать аудиопоток в MP3.

  • -c:v copy завершит вывод, когда закончится самый короткий ввод.

Объедините два аудио потока в один

ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
  • Фильтрация требует перекодирования, и здесь amerge фильтр слияния , поэтому в этом примере звук не может быть скопирован в потоковом режиме.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .