Jak scalić plik audio i wideo w ffmpeg

161

Chcę scalić plik audio (format .wav lub .au) z plikiem wideo (format .mp4).

Proszę zasugerować mi, jak to osiągnąć. Chcę scalić te pliki z nowym plikiem wideo .mp4. Polecenie ffmpeg byłoby bardzo mile widziane.

Piaszczysty
źródło
Jest tu przyzwoity artykuł, który również może być pomocny ... cfc.kizzx2.com/index.php/muxing-audio-and-video-with-ffmpeg
Simon East

Odpowiedzi:

260

Łączenie wideo i audio z ponownym kodowaniem dźwięku

Zobacz ten przykład zaczerpnięty z tego wpisu na blogu, ale zaktualizowany pod kątem nowszej składni. Powinno to być coś w rodzaju:

ffmpeg -i video.mp4 -i audio.wav \
-c:v copy -c:a aac -strict experimental output.mp4

Zakładamy, że plik wideo nie zawiera jeszcze żadnego strumienia audio i że chcesz mieć taki sam format wyjściowy (tutaj MP4) jak format wejściowy.

Powyższe polecenie transkoduje dźwięk, ponieważ MP4 nie mogą przenosić strumieni audio PCM. Jeśli chcesz, możesz użyć dowolnego innego kodeku audio. Aby uzyskać więcej informacji, zobacz Podręcznik kodowania AAC .

Jeśli Twój strumień audio lub wideo jest dłuższy, możesz dodać -shortestopcję, aby ffmpeg przestał kodować po zakończeniu jednego pliku.

Kopiowanie dźwięku bez ponownego kodowania

Jeśli Twój pojemnik wyjściowy może obsłużyć (prawie) dowolny kodek - jak MKV - możesz po prostu skopiować strumienie audio i wideo:

ffmpeg -i video.mp4 -i audio.wav -c copy output.mkv

Zastępowanie strumienia audio

Jeśli wideo wejściowe zawiera już dźwięk i chcesz go zastąpić, musisz powiedzieć ffmpeg, który strumień audio wziąć:

ffmpeg -i video.mp4 -i audio.wav \
-c:v copy -c:a aac -strict experimental \
-map 0:v:0 -map 1:a:0 output.mp4

Ta mapopcja powoduje, że ffmpeg używa tylko pierwszego strumienia wideo z pierwszego wejścia i pierwszego strumienia audio z drugiego wejścia dla pliku wyjściowego.

Patrick Georgi
źródło
Próbowałem, ale ffmpeg zawiesza się podczas łączenia
Sandy
4
nie sądzę, że kontenery mp4 mogą mieć strumienie audio wav. Spróbujffmpeg -i audio.wav -i video.mp4 -acodec copy -vcodec copy -f mkv output.mkv
Łukasz
1
Używam tego i zastępuje oryginalny dźwięk z wejściowego dźwięku. Co jeśli chcę połączyć wejściowy dźwięk z dźwiękiem wejściowego wideo?
Iqbal Malik
Bardzo słodkie wiersze poleceń ...
Chandra Nakka
Świetnie, użyłem ffmpeg -i video.mp4 -i audio.wav \ -c: v copy -c: aac -strict eksperymentalne wyjście.mp4 do scalenia MP3 z plikiem Wav ... => mp4 5 minut, renderowane 30 sekund ..Dziękujemy
sonida
12

Ponieważ nie wolno mi pisać komentarzy do pierwszej odpowiedzi z moją reputacją, tutaj załącznik, ponieważ miałem ten problem podczas kodowania webms.
Jeśli Twój strumień audio jest na przykład dłuższy niż strumień wideo , musisz go wyciąć, w przeciwnym razie ostatnia klatka wideo będzie działała jako zdjęcie i dźwięk.

Aby wyciąć dowolny strumień, możesz użyć opcji -ss [hh: mm: ss] -t [ss] przed każdym z „pliku.ext”.
-ss [...] określi punkt początkowy do cięcia
-t [...] określi długość odcinka w sekundach

Przykład:

ffmpeg.exe -ss 00:00:10  -t 5 -i "video.mp4" -ss 0:00:01 -t 5 -i "music.m4a" -map 0:v:0 -map 1:a:0 -y out.mp4
użytkownik136036
źródło
4
Możesz także użyć -shortestdo odcięcia końca.
nyuszika7h
5

-open polecenie promt (Windows + r -> cmd-> enter)

- następnie przejdź do folderu, w którym masz plik audio i wideo

zastosuj to polecenie cmd

ffmpeg -i "videoFile.mp4" -i "audioFile.mp3" -shortest outPutFile.mp4

Wejdź .... otrzymasz nowy plik o nazwie outPutFime.mp4 (scalony plik audio i wideo)

UniCoder
źródło
2
Naprawdę nie trzeba tutaj opisywać sposobu używania wiersza poleceń. Sugeruje to, że użytkownicy będą mogli to rozgryźć. Zwłaszcza, że ​​pytający podał FFmpeg. Wszystkie takie same, -shortestznacznik jest bardzo ładne. Znacznie prostsze niż w odpowiedzi @ user136036.
Kat
3
Spowoduje to ponowne zakodowanie wszystkiego, co prawdopodobnie nie jest tym, czego chce.
mivk
„ffmpeg” nie jest rozpoznawane jako polecenie wewnętrzne ani zewnętrzne,
UniCoder
Musisz dodać ffmpeg do PATH wikihow.com/Install-FFmpeg-on-Windows
Arete
5

To działało dla mnie:

ffmpeg.exe -i AudioT.m4a -i VideoT.mp4 -acodec copy -vcodec copy muxed.mp4
Ronald
źródło
1
częściowo działa dla mnie, nie działa dla wszystkich wejść, niektóre wynikowe filmy wejściowe pozostają takie same na wyjściu
Narendra Singh
1

Spróbuj użyć mencodera (tak, jest oparty na ffmpeg, ale nigdy nie wiadomo). Używam -audiofileargumentu. Ogólnie jednak używam ffmpeg, więc weź tę radę ze szczyptą soli.

A jeśli używasz Windowsa, Mediacoder (niestety już nie open source) działa ... jest to po prostu nakładka na wiele koderów GNU i kilka niewolnych.

Wyatt8740
źródło