Yanıtlar:
Akışlarınızı seçmek için -map
seçeneği kullanın . Varsayılan akış seçimi her akış türünden yalnızca birini seçecektir, bu yüzden -map
kullanılmalıdır.
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
İlk giriş olan video.mkv
. v
Vasıta "seçeneğini video akışı türü".
0:a:0
- 0
İlk giriş olan video.mkv
. a
Vasıta "ses akışı türünü seçin". Sonuncusu 0
, bu girişten gelen ilk ses akışını ifade eder. Yalnızca 0:a
kullanılırsa, tüm video akışları eşlenir.
1:a
- Kullanılan 1
ikinci giriş anlamına gelir audio.mp3
. a
Vasıta "ses akışı türünü seçin".
-codec copy
kodlamak yerine kopyalamayı (yeniden mux) aktaracaktır . Belirli bir ses kodekine ihtiyacınız varsa, -c:v copy
(videoyu saklamak için) belirtmeli ve sonra örneğin -c:a libmp3lame
ses akışını MP3 olarak yeniden kodlamanız gerekir.
-shortest
en kısa giriş sona erdiğinde çıkışı sonlandıracaktır.
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
filtre burada kullanılır, bu nedenle ses bu örnekte akış kopyalanamaz.-codec copy
, ama sabit (ffmpeg'in farklı versiyonu), birlikte yaşadığım diğer sorun -map
, yanlış sayıda akıştan şikayet etti.
-map 0:v -map 1:a
. Bu ilk dosyadan (video.mkv) video almak ve sonra output.mkv oluşturmak için ikinci dosyadan (audio.mp4) ses almak anlamına gelir ... Ne için emin değilim -map 0:a:0
. Onu hariç tuttum ve istediğim sonuçları elde ettim.