Come sostituire un flusso audio in un file video con più flussi audio?


19

Voglio sostituire il secondo flusso audio (0: 2) in un file video che ha due flussi audio e, se possibile, dargli un'etichetta. Come lo farei? Tutti i comandi ffmpeg che ho trovato non mi permettono di mantenere il secondo flusso audio.

Risposte:


22

Usa l' -mapopzione per scegliere i tuoi stream. La selezione predefinita del flusso sceglierà solo uno per ciascun tipo di flusso, pertanto è -mapnecessario utilizzarlo.

Sostituisci secondo flusso audio

inserisci qui la descrizione dell'immagine

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 0riferisce al primo input che è video.mkv. I vmezzi "selezionare il video di tipo stream".

  • 0:a:0- Il si 0riferisce al primo input che è video.mkv. I amezzi "selezionare il tipo di flusso audio". L'ultimo si 0riferisce al primo flusso audio da questo ingresso. Se 0:autilizzato solo , verranno mappati tutti i flussi video.

  • 1:a- Il si 1riferisce al secondo input che è audio.mp3. I amezzi "selezionare il tipo di flusso audio".

  • -codec copyeseguirà 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 libmp3lamericodificare il flusso audio in MP3.

  • -shortest terminerà l'uscita quando termina l'ingresso più corto.

Combina due flussi audio in uno

inserisci qui la descrizione dell'immagine

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
  • Il filtro richiede una ricodifica e il amergefiltro viene utilizzato qui, pertanto in questo esempio non è possibile copiare l'audio in streaming.

non ha funzionato affatto per me.
Rudolf Olah,

@omouse "non ha funzionato" è difficile fornire aiuto. Dovresti usare un link pastebin per mostrare il tuo comando e l'output completo della console.
Llogan

Il mio problema è il -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.
Rudolf Olah,

1
Ho appena usato -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.
Dom

2
@ aaronk6 La domanda originale richiedeva un modo per mappare più flussi audio sull'output. L'esempio prende il primo flusso audio dal primo ingresso e i flussi audio dal secondo ingresso e li mappano sull'uscita. Sembra che alcuni stiano assumendo che l'esempio produca un output con un singolo flusso audio e che quindi siano confusi.
Llogan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.