У меня есть два файла - video.mp4 и audio.mp3 , и я хочу их объединить. Окончательное видео должно иметь продолжительность video.mp4 .

Я не знаю, какой из этих двух файлов длиннее, поэтому я не могу использовать опцию -shortest .

Это то, что я до сих пор:

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

2 ответа2

3

использование

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

apad добавляет неопределенное молчание к аудио, поэтому видео всегда будет самым коротким потоком.

1

Единственный способ, который я нашел, - это иметь функцию, которая сначала возвращает длительность первого файла. Это, конечно, bash-скрипт, который вы можете скопировать / вставить в оболочку или написать .sh bash-скрипт.

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

а затем используйте эту функцию для возврата длительности и используйте ее с параметром -t

ffmpeg -y -i video.mp4 -i audio.mp3 -map 0:v -map 1:a -t $(getDuration) -c copy final.mp4

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .