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

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.


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

Dziękuję Ci! +1. Ale akceptuję odpowiedź @ Mulvya z powodu jego jednokreskowego rozwiązania.
Oleg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.