Как заменить аудиопоток в видеофайле несколькими аудиопотоками?

19

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

анонимное
источник

Ответы:

22

Используйте -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будет потоковое копирование (повторное мультиплексирование) вместо кодирования. Если вам нужен определенный аудиокодек, вы должны указать -c:v copy(для сохранения видео), а затем, например, -c:a libmp3lameперекодировать аудиопоток в MP3.

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

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

введите описание изображения здесь

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фильтр , поэтому в этом примере звук не может быть скопирован в потоковом режиме.
llogan
источник
не работал для меня вообще.
Рудольф Олах
@omouse "не работал" трудно помочь. Вы должны использовать ссылку для вставки, чтобы показать вашу команду и полный вывод консоли.
Llogan
Моя проблема заключается в том -codec copy, но я исправил это (другая версия ffmpeg), другая проблема, с которой я столкнулся, заключалась в том -map, что он жаловался на неправильное количество потоков.
Рудольф Олах
1
Я просто использовал -map 0:v -map 1:a. Я предполагаю, что это означает взять видео из первого файла (video.mkv), а затем взять аудио из второго файла (audio.mp4), чтобы создать output.mkv ... Не уверен, для чего это нужно -map 0:a:0. Я исключил это, и я получил результаты, которые я хотел.
вс
2
@ aaronk6 В первоначальном вопросе запрашивался способ сопоставления нескольких аудиопотоков с выходом. В этом примере берется первый аудиопоток с первого входа, а аудиопоток (-и) со второго входа и сопоставляется с выходом. Похоже, некоторые предполагают, что в примере выводится один аудиопоток, а затем путаются.
Llogan