Risposte:
Usa l' -map
opzione per scegliere i tuoi stream. La selezione predefinita del flusso sceglierà solo uno per ciascun tipo di flusso, pertanto è -map
necessario utilizzarlo.
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
- Il si 0
riferisce al primo input che è video.mkv
. I v
mezzi "selezionare il video di tipo stream".
0:a:0
- Il si 0
riferisce al primo input che è video.mkv
. I a
mezzi "selezionare il tipo di flusso audio". L'ultimo si 0
riferisce al primo flusso audio da questo ingresso. Se 0:a
utilizzato solo , verranno mappati tutti i flussi video.
1:a
- Il si 1
riferisce al secondo input che è audio.mp3
. I a
mezzi "selezionare il tipo di flusso audio".
-codec copy
eseguirà lo streaming della copia (re-mux) invece della codifica. Se è necessario un codec audio specifico, è necessario specificare -c:v copy
(per conservare il video) e, ad esempio, -c:a libmp3lame
ricodificare il flusso audio in MP3.
-shortest
terminerà l'uscita quando termina l'ingresso più corto.
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
filtro viene utilizzato qui, pertanto in questo esempio non è possibile copiare l'audio in streaming.-codec copy
, ma ho risolto quello (versione diversa di ffmpeg), l'altro problema che ho avuto con il -map
, si è lamentato del numero errato di flussi.
-map 0:v -map 1:a
. Presumo che questo significhi prendere il video dal primo file (video.mkv) e quindi prendere l'audio dal secondo file (audio.mp4) per creare output.mkv ... Non so a cosa serva -map 0:a:0
. L'ho escluso e ottengo i risultati desiderati.