Создать замедленное видео из другого видео
Используя avconv (или даже ffmpeg, чтобы я мог использовать его в качестве справочного материала), как я могу создать замедленное видео, используя только кадры привязки / ссылки из другого видео? Большая часть информации, которую я нахожу, о том, как создать замедленное видео, комбинируя изображения, и я хотел бы сделать это, извлекая кадры из видео. Скажем, если видео длится 30 секунд при 30 кадрах в секунду, я бы хотел взять 60 из этих 900 кадров (900/60 = каждые 15 секунд) для создания 2-секундного видео.
3 ответа
Чтобы взять каждый 15-й кадр, используйте
ffmpeg -i in.mp4 -vf select='not(mod(n,15))',setpts=N/FRAME_RATE/TB out.mp4
Другой способ - использовать фильтр кадров
ffmpeg -i in.mp4 -vf framestep=15,setpts=N/FRAME_RATE/TB out.mp4
У меня было видео H264 с камеры, и после множества попыток я нашел следующую команду, которая производит видео в 16 раз быстрее с хорошим результатом и 60 FPS (опция -r), что хорошо для таймлапса на YouTube.
ffmpeg -i video.avi -r 60 -filter:v "setpts=0.0625*PTS" -vcodec libx264 -an timelapse.avi
Результат можно посмотреть здесь https://www.youtube.com/watch?v=azhRqKQ7kCU
Поскольку вы запрашиваете 1/15 кадра, это будет 1/15 ~= 0,06667 с видео с результатом 30 кадров в секунду, вам понадобится команда
ffmpeg -i video.avi -r 30 -filter:v "setpts=0.06667*PTS" -vcodec libx264 -an timelapse.avi
При съемке таймлапсов полезно легко контролировать скорость воспроизведения, поэтому я предпочитаю следующий подход:
- Скорость: 60x (1 час за 1 минуту, 1 минута за 1 секунду)
- Аудио: Нет
ffmpeg -i in.avi -vf "setpts=PTS/60" -an out.mp4
Поскольку вопрос запрашивает 2-секундное видео, а оригинал имеет продолжительность 30 секунд, желаемая скорость равна 15x (т.е. 30/2 = 15), команда будет такой:
ffmpeg -i in.avi -vf "setpts=PTS/15" -an out.mp4