Chcę zastąpić drugi strumień audio (0: 2) w pliku wideo, który ma dwa strumienie audio i w miarę możliwości nadać mu etykietę. Jak miałbym to zrobić? Wszystkie polecenia ffmpeg, które znalazłem, nie pozwalają mi zachować drugiego strumienia audio.
Użyj -map
opcji, aby wybrać swoje strumienie. Domyślny wybór strumienia wybierze tylko jeden z każdego typu strumienia, dlatego -map
należy go użyć.
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
Odnosi się do pierwszego wejścia, które jest video.mkv
. Te v
środki „wybierz rodzaj strumienia wideo”.
0:a:0
- 0
Odnosi się do pierwszego wejścia, które jest video.mkv
. Te a
środki „wybierz rodzaj strumienia dźwięku”. Ostatni 0
odnosi się do pierwszego strumienia audio z tego wejścia. Jeśli tylko 0:a
zostanie użyty, wszystkie strumienie wideo zostaną zmapowane.
1:a
- 1
Odnosi się do drugiego wejścia, którym jest audio.mp3
. Te a
środki „wybierz rodzaj strumienia dźwięku”.
-codec copy
będzie przesyłać kopii (re-MUX) zamiast kodowania. Jeśli potrzebujesz określonego kodeka audio, powinieneś określić -c:v copy
(aby zachować wideo), a następnie, na przykład, -c:a libmp3lame
ponownie zakodować strumień audio do formatu MP3.
-shortest
zakończy wyjście, gdy skończy się najkrótsze wejście.
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
filtr , więc w tym przykładzie nie można skopiować strumienia audio.
-codec copy
, ale naprawiłem to (inna wersja ffmpeg), innym problemem, który miałem z tym-map
, narzekało na niewłaściwą liczbę strumieni.-map 0:v -map 1:a
. Zakładam, że oznacza to pobranie wideo z pierwszego pliku (video.mkv), a następnie pobranie dźwięku z drugiego pliku (audio.mp4) w celu utworzenia pliku output.mkv ... Nie jestem pewien, po co to-map 0:a:0
jest. Wyłączyłem to i uzyskuję pożądane wyniki.