ffmpeg добавить аудио, но сохранить длину видео такой же (не самый короткий)

Я добавляю аудио в видео файл, используя ffmpeg, как так

ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4

однако это расширяет выходной видеофайл до длины аудиофайла, если он длиннее видео. Использование-кратчайшее сокращение видеофайла, если аудиофайл короче видеофайла. Итак, есть ли флаг, чтобы сказать ffmpeg, чтобы сократить длину выходного видео до длины входного видео?

10
задан stealthcopter
21.11.2022 14:20 Количество просмотров материала 2600
Распечатать страницу

3 ответа

Я считаю, что вы можете достичь желаемой цели с помощью опции-filter_complex и опции apad фильтр, чтобы дополнить аудио с тишиной в конце, если видео больше. Ваша команда будет:

ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -shortest output.mp4

это предполагает, что звук, который вы хотите, находится в первом потоке аудиофайла.WAV, синтаксис [A:B] говорит о том, чтобы взять B-й поток с A-го входа (оба начинаются с 0, поэтому [1:0] - это 1-й поток со 2-го входа или аудиофайла.в формате WAV выше.)

подробности на: https://www.ffmpeg.org/ffmpeg-filters.html#Examples-68

11
отвечен deadcode 2022-11-22 22:08
  • если длина видео короче, чем длина аудио,-shortest это то, что вы хотите.
  • если длина видео больше, чем длина аудио, флаг вообще не будет то, что вы хотите.

нет флага для автоматизации этого решения.

редактировать

вдохновленный ответом @deadcode, мне нужно ясно дать понять ,что" нет флага для автоматизации", конечно, не так, если вы желающих reencode: в этом случае идти с apad как предложено @deadcode.

Если, однако, вы хотите, чтобы избежать повторного кодирования (т. е. -c:v copy) ответ стоит.

существует обходной путь, с помощью ffconcat demuxer, но для этого нужно немного работы:

  • создать файл, содержащий тишина в точно такой же формат как ваш аудиофайл ("молчание.wav")
  • создать файл concat " audio.ffconcat" (С столько тишина, сколько нужно, чтобы убедиться, что ваше аудио долго достаточно):

.

file 'audiofile.wav'
file 'silence.wav'
file 'silence.wav'
...
file 'silence.wav'
  • run ffmpeg -i videofile.mp4 -f concat -i audio.ffconcat -c:v copy output.mp4

это будет синтезировать apad фильтр без графа фильтра, что позволяет mux без повторного кодирования.

7
отвечен Eugen Rieck 2022-11-23 00:25

Если вы знаете длину вашего видеофайла, вы можете сделать это с помощью

ffmpeg -i videofile.mp4 -i audiofile.wav -t 43 output.mp4

, где 43-длина вашего видеофайла в секундах.

2
отвечен Zurechtweiser 2022-11-23 02:42

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх