Відповіді:
Скористайтеся -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
фільтр , тому аудіо в цьому прикладі не може бути скопійовано потоком.-codec copy
, але я вирішив, що (інша версія ffmpeg), інша проблема, з якою у мене була робота, була -map
скарга на неправильну кількість потоків.
-map 0:v -map 1:a
. Я припускаю, що це означає взяти відео з першого файлу (video.mkv), а потім взяти аудіо з другого файлу (audio.mp4) для створення output.mkv ... Не впевнений, для чого -map 0:a:0
це. Я це виключив і отримую бажані результати.