Я пытаюсь взять аудио и неподвижное изображение и создать 30-минутные фрагменты видео, созданные из этого неподвижного изображения, плюс эти 30-минутные аудио.

Вот что я пытался использовать:

find audio/ -name '*.ogg' -execdir bash -c '\ ffmpeg -i ../white-144p.png -i {} \ -acodec libvorbis \ -af silenceremove=0:0:0:-1:0.7:-30dB \ -segment_time 1800 \ -f segment ../video/$(basename {} .ogg)_%03d.mp4' \;

ffmpeg радостно останавливается после 30-минутной отметки и записывает видео, созданное из неподвижного изображения и всего аудиофайла. Что я делаю неправильно?

1 ответ1

0

Мультиплексор сегментов по умолчанию при работе с видео + аудио-выходом создает новый сегмент, только когда встречает ключевой кадр видео после того, как сегмент_текста истек. FFmpeg - это, прежде всего, программа для работы с мультимедийными данными, то есть с видео и аудио. Одно изображение обрабатывается как видео со скоростью 25 кадров в секунду на 1 кадр. В вашем случае вам нужно изменить это следующим образом:

find audio/ -name '*.ogg' -execdir bash -c '\
ffmpeg -loop 1 -framerate 8 -i ../white-144p.png -i {} \
-acodec libvorbis \
-force_key_frames "expr:gte(t,n_forced*1800)" \
-af silenceremove=0:0:0:-1:0.7:-30dB \
-segment_time 1800 -shortest \
-f segment ../video/$(basename {} .ogg)_%03d.mp4' \;

-loop 1 -framerate 8 генерирует бесконечный поток видео со скоростью 8 кадров в секунду из изображения.

-force_key_frames "expr:gte(t,n_forced*1800)" заставляет ffmpeg генерировать ключевой кадр каждые 1800 секунд, чтобы сегменты можно было вырезать с точными интервалами.

-shortest добавлен так, что команда заканчивается, когда аудио делает - поток видео бесконечно длинен.

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