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 — это, понятное дело, название выходного файла.

ПОЛЕЗНО  Android + Viber has stopped

А теперь приступим, собственно, к спецэффектам.
Для начала рассмотрим такой эффект, как 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 секунд. Варьируя этот параметр можно менять скорость замедленной «съемки». Чем меньше этот параметр, тем сильнее мы сжимаем видео по времени.

ПОЛЕЗНО  Сбрасываем пароль администратора в Windows 8

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

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