Dodam dźwięk do pliku wideo przy użyciu ffmpeg
ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4
Jednak wydłuża to wyjściowy plik wideo o długość pliku audio, jeśli jest on dłuższy niż wideo. Użycie -shortest skraca plik wideo, jeśli plik audio jest krótszy niż wideo. Czy jest więc flaga informująca ffmpeg, aby skrócić długość wyjściowego wideo do długości wejściowego wideo?
Odpowiedzi:
Wierzę, że możesz osiągnąć pożądany cel, używając opcji -filter_complex i filtru apad, aby wyciszyć dźwięk z ciszą na końcu, jeśli wideo jest dłuższe. Twoje polecenie będzie:
ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -shortest output.mp4
Zakłada się, że żądany dźwięk znajduje się w pierwszym strumieniu pliku audiofile.wav, a składnia [A: B] mówi, że pobiera strumień B-ty z wejścia A-tego (oba rozpoczynają się od 0, więc [1: 0] jest 1. strumień z 2. wejścia lub audiofile.wav powyżej).
Szczegóły na: https://www.ffmpeg.org/ffmpeg-filters.html#Examples-68
źródło
-filter_complex
opcja wymusza ponowne kodowanie - można np. Uruchomić,ffmpeg -i videofile.mp4 -i audiofile.wav -c:v copy output.mp4
ale nieffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -c:v copy -shortest output.mp4
-shortest
to jest to, czego chcesz.Nie ma flagi do automatyzacji tej decyzji.
EDYTOWAĆ
Zainspirowany odpowiedzią @ deadcode, muszę wyjaśnić, że „żadna flaga do zautomatyzowania” nie jest oczywiście prawdą, jeśli chcesz ponownie kodować : W tym przypadku
apad
postępuj zgodnie z sugestią @deadcode.Jeśli jednak chcesz uniknąć ponownego kodowania (tj.
-c:v copy
), Odpowiedź jest ważna.Istnieje sposób obejścia problemu przy użyciu
ffconcat
demuxera, ale wymaga on trochę pracy:.
ffmpeg -i videofile.mp4 -f concat -i audio.ffconcat -c:v copy output.mp4
Spowoduje to syntezę
apad
filtra bez wykresu filtra, umożliwiając w ten sposób multiplekserowi bez ponownego kodowania.źródło
-shortest
, użyj tego obejścia, jeśli chcesz dodać ciszę bez ponownego kodowania .Jeśli znasz długość swojego pliku wideo, możesz to zrobić za pomocą
Gdzie 43 to długość twojego pliku wideo w sekundach.
źródło