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


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буде текти копія (ре-MUX) замість того , щоб закодувати. Якщо вам потрібен певний аудіокодек, слід вказати -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фільтр , тому аудіо в цьому прикладі не може бути скопійовано потоком.

не працював для мене взагалі.
Рудольф Олах

@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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.