Timelapse при помощи ffmpeg

Известный в узких кругах набор свободных библиотек с открытым исходным кодом, именуемый ffmpeg, — это не только средство для банальной конвертации домашних роликов в другие форматы, но и довольно мощное средство для создания эффектов для видео и аудио, а так же применение различных фильтров. В этой статье и будет показано, как с помощью этой утилиты сделать несколько интересных трюков.

Для экспериментов в Windows набор уже собранных утилит можно скачать здесь. Для всех остальных ffmpeg можно установить из пакетов для вашей ОС или собрать из исходников, скачав их с официального сайта www.ffmpeg.org.

Для тех, кто видит ffmpeg впервые, сообщу, что этот набор утилит в первую очередь предназначен для различных операций над медиа данными. К примеру, для конвертации ролика из формата avi, сжатого кодеком mpeg4 и аудио кодеком mp3 в формат mp4 с видео кодеком x264 и аудио кодеком aac с изменением битрейта необходимо проделать следующую операцию:
ffmpeg -i video.avi -vcodec libx264 -acodec libfaac -b:v 200k -b:a 64k -f mp4 video.mp4

Здесь:
-i — это наш источник видео (вместо файла это может быть видео поток с вашей web камеры или любого другого девайса, которое стримит, к примеру сетевая камера);
-vcodec — здесь мы указываем название кодека, которым хотим сжать наше видео;
-acodec — здесь мы указываем название кодека, которым хотим сжать наше аудио;
-b:v — здесь мы задаем битрейт для видео;
-b:a — здесь мы задаем битрейт для аудио;
-f — указываем название формата (контейнера), в котором будут располагаться наши аудио и видео данные;
video.mp4 — это, понятное дело, название выходного файла.

ПОЛЕЗНО  10 Tips for Effective Dealer Website

А теперь приступим, собственно, к спецэффектам.
Для начала рассмотрим такой эффект, как time lapse. Time lapse — это эффект замедленной съемки с частотой, меньшей стандартной частоты съемки и последующей проекцией в 24 кадра в секунду. Этим эффектом любят пользоваться различные научные каналы для визуализации медленно протекающих процессов, таких, как рост растений или даже смена времен года. Итак, у нас есть камера, которая снимает, скажем вид из окна и мы хотим видео за сутки сжать в несколько минут. Для этого поступим следующим образом:

1. Для начала нам нужно сохранить кадры с некоторым интервалом времени, скажем 1 кадр за каждые 10 секунд в отдельную папку. Это можно сделать следующим образом:

ffmpeg -i [источник] -r 0.1 image/image%05d.bmp

Здесь -r — это частота, с которой мы сохраняем кадры, например -r 25 — это частота 25 кадров в секунду. А -r 0.1 — это частота 1 кадр каждые 10 секунд. Варьируя этот параметр можно менять скорость замедленной «съемки». Чем меньше этот параметр, тем сильнее мы сжимаем видео по времени.

ПОЛЕЗНО  Настройка DDNS noip.com на роутере Dlink DIR-615

image/image%05d.bmp — заставляет ffmpeg сохранять кадры в формат bmp в папку image.

2. Теперь соберем из наших картинок видео ролик. Сделать это можно так:

ffmpeg -i image/image%05d.bmp -acodec libx264 -b:v 500k -f avi video.avi

Результат можно посмотреть, например, здесь:

Теперь можно добавить к этому ролику какую-нибудь музыку:
ffmpeg -i video.avi -i audio.mp3 -acodec copy -vcodec copy -f avi video_with_music.avi.
Параметр copy говорит ffmpeg, что перекодировать видео и аудио потоки не нужно.

Ускорить видео можно так:

ffmpeg -i video.avi -filter:v "setpts=0.5*PTS" -f avi video2.avi

Здесь мы ускорили наш ролик в 2 раза.

Замедлить видео можно, соответственно, так:

ffmpeg -i video.avi -filter:v "setpts=2*PTS" -f avi video2.avi

Для того, что бы ускорить не только видео, но и аудио, в ролике со звуком необходимо скомбинировать два фильтра — для аудио и для видео:

ffmpeg -i video.avi -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" -f avi video1.avi

На этом пока все =) источник инфы

п.с. а вот так получилось у меня с помощью этого способа 🙂 полтора часа видео вмещали в 18-20 секунд. итого почти 20 часов видео вместились в 4:36

а тут инфа по массовой конвертации видео на винде