ffmpeg становится очень медленным при использовании продолжительности вместо -r

467
Max M.

Что я делаю:

Я все еще работаю над сценарием слайд-шоу. Значение, я использую FFmpeg, Concat демультиплексора (files.txt) для обеспечения FFmpeg с кучей .jpgфайлов для слайд - шоу.

Раньше я хотел, чтобы все изображения отображались по 3 секунды, поэтому я использовал (неправильно использовал?) Флаг частоты кадров ffmpeg -r 1/3для достижения указанной длительности, который работал идеально и очень быстро (примерно 10 секунд для всех 600 изображений).

Что я хочу сделать сейчас:

Теперь я хотел, чтобы слайд-шоу было более динамичным за счет изменения продолжительности (больше для более интересных и т. Д., Вы знаете). Итак, я решил отказаться от флага частоты кадров и установить duration 3нужное значение в файле concat. Конечно, для каждого файла с правильным количеством секунд. Который работает - вид.

Моя единственная проблема: теперь ffmpeg проходит через этот сценарий целую вечность. Не только немного, но и занимает в 30 раз больше времени. Хотя я уже использую -c:v libx264 -preset ultrafast.

Таким образом, это больше не практично для использования. Я что-то пропустил или есть третий способ?

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

Просто заметил FFmpeg капли этого предупреждения: More than 1000 frames duplicated. Этого не может быть, когда статическое изображение показывается максимум 5 секунд со скоростью 25 кадров в секунду (значение по умолчанию).

С уважением!

0
Попробуйте с меньшим количеством изображений и проверьте частоту кадров полученного видео. Это может быть слишком высоко. Daniel B 6 лет назад 0
Какова наименьшая продолжительность, которую вы используете? Gyan 6 лет назад 0
@DanielB Я протестировал только около 30 файлов, и это заняло около 20 секунд. Так что я не бросил все 600 файлов в ffmpeg, пока. Max M. 6 лет назад 0
@Gyan Минимум 2 секунды, максимум 5 секунд. Нет десятичного числа или <1 секунды. Max M. 6 лет назад 0
25 кадров в секунду - это 75 раз по 0,33 кадра в секунду. Таким образом, предупреждение не является ни необоснованным, ни удивительным. Попробуйте 1 кадр в секунду. Daniel B 6 лет назад 0

1 ответ на вопрос

0
Gyan

Когда вы используете durationдирективу в файле concat demuxer, вы устанавливаете смещение временной метки, применяемое к следующему файлу, относительно начальной временной метки, рассчитанной для текущего файла. Чтобы это работало, ввод -rне может быть использован. Это, в свою очередь, означает, что каждому изображению назначена частота кадров по умолчанию 25 кадров в секунду. В настоящее время это не может быть изменено. Тем не менее, вы можете уменьшить частоту кадров. Поскольку у вас нет дробных секунд, вы можете уменьшить до 1 кадра в секунду.

ffmpeg -f concat -i list.txt -vf fps=1 out.mp4 

Я пропустил любые варианты кодирования. Используйте ffmpeg 4.0 или выше.

Похожие вопросы