Jak zamienić strumień audio w pliku wideo z wieloma strumieniami audio?

19

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.

Anonimowy
źródło

Odpowiedzi:

22

Użyj -mapopcji, aby wybrać swoje strumienie. Domyślny wybór strumienia wybierze tylko jeden z każdego typu strumienia, dlatego -mapnależy go użyć.

Zamień drugi strumień audio

wprowadź opis zdjęcia tutaj

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- 0Odnosi się do pierwszego wejścia, które jest video.mkv. Te vśrodki „wybierz rodzaj strumienia wideo”.

  • 0:a:0- 0Odnosi się do pierwszego wejścia, które jest video.mkv. Te aśrodki „wybierz rodzaj strumienia dźwięku”. Ostatni 0odnosi się do pierwszego strumienia audio z tego wejścia. Jeśli tylko 0:azostanie użyty, wszystkie strumienie wideo zostaną zmapowane.

  • 1:a- 1Odnosi się do drugiego wejścia, którym jest audio.mp3. Te aśrodki „wybierz rodzaj strumienia dźwięku”.

  • -codec copybę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 libmp3lameponownie zakodować strumień audio do formatu MP3.

  • -shortest zakończy wyjście, gdy skończy się najkrótsze wejście.

Połącz dwa strumienie audio w jeden

wprowadź opis zdjęcia tutaj

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
  • Filtrowanie wymaga ponownego kodowania, a tutaj zastosowano amergefiltr , więc w tym przykładzie nie można skopiować strumienia audio.
Llogan
źródło
w ogóle mi nie działało.
Rudolf Olah,
@omouse „nie działał” trudno jest udzielić pomocy. Powinieneś użyć linku do wklejania linków, aby pokazać swoje polecenie i pełne dane wyjściowe konsoli.
llogan
Moim problemem jest -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.
Rudolf Olah
1
Właśnie użyłem -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:0jest. Wyłączyłem to i uzyskuję pożądane wyniki.
niedz.
2
@ aaronk6 Pierwotne pytanie wymagało sposobu mapowania wielu strumieni audio na wyjście. Przykład pobiera pierwszy strumień audio z pierwszego wejścia, a strumień (strumienie) audio z drugiego wejścia i mapuje je na wyjście. Wydaje się, że niektórzy zakładają, że przykład tworzy wyjście z pojedynczym strumieniem audio, a następnie są mylone.
llogan