3

Я только что понял, как сделать слайд-шоу с кроссфейдом. Это двухступенчатый процесс. На первом этапе считываются изображения с частотой кадров 0,5 (что означает 2 секунды для каждого изображения) и создается промежуточное видео с частотой кадров 2. Это означает, что каждая картинка повторяется 4 раза. На втором этапе применяется фильтр частоты кадров. В результате каждый снимок показывается в течение 1,5 секунд, после чего следует переход за 0,5 секунды.

ffmpeg -framerate 0.5 -i IMG_% 3d.jpg -r 2 -кодек:v mpeg4 temp.mp4

ffmpeg -i temp.mp4 -vf "framerate = fps = 25" -кодек:v mpeg4 out.mp4

Этот двухэтапный процесс работает нормально, но у меня есть два вопроса:

  1. Можно ли получить такой же результат за один шаг без промежуточного видеофайла?
  2. Если ответ на первый вопрос - «нет», может кто-нибудь показать мне, как должны быть изменены вышеуказанные команды для промежуточного файла без потерь, например, RAWVIDEO?

Спасибо майкл

2 ответа2

3

Я хотел бы подвести итог решения:

ffmpeg -i IMG_%3d.jpg -vf zoompan=d=(A+B)/B:s=WxH:fps=1/B,framerate=25:interp_start=0:interp_end=255:scene=100 -c:v mpeg4 -maxrate 5M -q:v 2 out.mp4

где A - это длительность в секундах, показывающая, как долго показывается каждое изображение (без длительности перехода), B - продолжительность перехода в секундах, а WxH - размер выходного видео.

2

Вы можете переделать кадры перед применением фильтра:

ffmpeg -i IMG_%3d.jpg  -vf "setpts=N/0.5/TB,framerate=fps=25" -codec:v mpeg4 out.mp4

Обновление: Фильтр частоты кадров, похоже, привязан к входной частоте кадров при приеме, поэтому альтернативный метод с использованием каналов

ffmpeg -framerate 0.5 -i IMG_%3d.jpg -vf fps=2 -f nut - | ffmpeg -f nut -i - -vf framerate=25 -c:v mpeg4 out.mp4

Обход в одну строку:

ffmpeg -i IMG_%3d.jpg -vf zoompan=z=1:d=4:s=WxH:fps=2,framerate=25 -c:v mpeg4 out.mp4

где W и H заменены входными размерами.

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