Я добавляю аудио в видео файл, используя ffmpeg, вот так
ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4
Однако это расширяет выходной видеофайл до длины аудиофайла, если он длиннее видео. Использование -shortest обрезает видеофайл, если аудиофайл короче, чем видео. Так есть ли флаг, указывающий ffmpeg обрезать сохранение длины выходного видео до длины входного видео?
Ответы:
Я полагаю, что вы можете достичь желаемой цели, используя опцию -filter_complex и опцию фильтра apad, чтобы дополнить ваш звук тишиной в конце, если видео длиннее. Ваша команда будет:
ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -shortest output.mp4
Предполагается, что аудио, которое вы хотите, находится в первом потоке audiofile.wav, синтаксис [A: B] говорит, что нужно взять B-й поток с A-го входа (оба начинаются с 0, поэтому [1: 0] 1-й поток от 2-го входа, или audiofile.wav выше).
Подробности на: https://www.ffmpeg.org/ffmpeg-filters.html#Examples-68
источник
-filter_complex
опция принудительно перекодирует - например, можно запускать,ffmpeg -i videofile.mp4 -i audiofile.wav -c:v copy output.mp4
но нетffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -c:v copy -shortest output.mp4
-shortest
это то , что вы хотите.Нет флага для автоматизации этого решения.
РЕДАКТИРОВАТЬ
Вдохновленный ответом @ deadcode, мне нужно прояснить, что «нет флага для автоматизации», конечно, не соответствует действительности, если вы хотите перекодировать : в этом случае
apad
следуйте указаниям @deadcode.Однако, если вы хотите избежать перекодирования (то есть
-c:v copy
), ответ остается в силе .Существует обходной путь с использованием
ffconcat
демультиплексора, но он требует небольшой работы:,
ffmpeg -i videofile.mp4 -f concat -i audio.ffconcat -c:v copy output.mp4
Это позволит синтезировать
apad
фильтр без графа фильтра, что позволит выполнять мультиплексирование без перекодирования.источник
-shortest
, используйте этот обходной путь, если вы хотите добавить тишину без перекодирования.Если вы знаете длину вашего видео-файла, вы можете сделать это, используя
Где 43 - длина вашего видео-файла в секундах.
источник