Połącz wideo i audio i spraw, aby ostatni czas trwania był taki sam, jak pierwszego wejścia z FFmpeg

0

Mam dwa pliki - video.mp4 i audio.mp3i chcę je połączyć. Ostatni film musi mieć czas trwania video.mp4.

Nie wiem, który z tych dwóch plików jest dłuższy, więc nie mogę użyć -shortest opcja.

Oto, co mam do tej pory:

ffmpeg -y -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -c copy final.mp4
Oleg
źródło

Odpowiedzi:

3

Posługiwać się

ffmpeg -y -i video.mp4 -i audio.mp3 -af apad -map 0:v -map 1:a -c:v copy -shortest final.mp4

apad dodaje do dźwięku nieokreśloną ciszę, więc wideo zawsze będzie najkrótszym strumieniem.

Gyan
źródło
1

Jedynym sposobem, jaki znalazłem, jest posiadanie funkcji, która najpierw zwraca czas trwania pierwszego pliku. Jest to oczywiście skrypt bash, który można skopiować / wkleić do powłoki lub napisać skrypt bash .sh.

function getDuration() {
  ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4
}

a następnie użyj tej funkcji, aby zwrócić czas trwania, i użyj go z -t parametr

ffmpeg -y -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -t $(getDuration) -c copy final.mp4
Craig Wheatley
źródło
Dziękuję Ci! +1. Ale akceptuję odpowiedź @ Mulvya z powodu jego jednokreskowego rozwiązania.
Oleg