Видео из фото

Timelapse from Images (Создание видео из фото, с помощью ffmpeg)

Создавая Timelapse возникает необходимость собрать снятые фото в ВИДЕО. Один из способов сделать это, это сделать с помощью FFMPEG

С ffmpeg работа проходит в консоли

ffmpeg.exe -r 25 -i "FHD%04d.JPG" -s 1920x1080 output.mp4

-r 25 — установка количества кадров в секунду
"FHD%04d.JPG" — %04d — подстановочный знак как в printf — число типа int состоящее из 4 знаков
-s 1920×1080 — выходной размер видео
надо добавить, что это допустимо, если нумерация ваших файлов (с учетом маски) начинается с 1 (или 0). В случае первый файл имеет иной номер, то можно перед параметром -i "FHD%04d.JPG" добавить параметр -start_number 837.
Возможно использование переменного битрейта для видео, в частности это касается кодека mpeg4, для этого необходимо установить опцию -qscale:v 5, qscale возможно установить в диапазоне от 1 до 31, где 1 — самое наилучшее качество и самый большой размер видео. В этом случае bitrate будет рассчитываться исходя из qscale.

в линукс или мак можно попробовать так

ffmpeg -framerate 10 -pattern_type glob -i "*.jpg" -c:v libx264 -crf 0 output.mp4

или вообще через pipe

cat *.jpg | ffmpeg -framerate ntsc -i - -c:v libx264 -crf 0 output.mp4

Как пример сборки:

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

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

здесь ускорение в 2 раза, замедлить можно такой же командой, но заменив 0.5 на 2 (или на другой коэффициент в зависимости от пожеланий)

Добавить к видео звук можно указав два входных файла:

ffmpeg -i video.mp4 -i audio.mp3 -c:a copy -c:v copy video_with_music.mp4

-c:a copy — копирование аудио без пережатия в другом кодеке
-c:v copy — аналогично но касаемо видео
Если аудио превышает видео, то можно использовать ключ -shortest тогда аудио будет обрезано по окончании видео (и наоборот, если звук короче, но наоборот не проверял)

Объединить несколько файлов в один
У меня заработал вот такой способ:
создаем текстовый файл inputs.txt, а в нем записываем все файлы, которые необходимо слить в один

file input1.mp4
file input2.mp4
file input3.mp4
file input4.mp4

и применяем команду

ffmpeg -f concat -i inputs.txt -vcodec copy -acodec copy output.mp4

Вырезать отрывок из файла

ffmpeg -i input.mp4 -ss 00:00:30.0 -c copy -t 00:00:10.0 output.mp4
ffmpeg -i input.mp4 -ss 30 -c copy -t 10 output.mp4

вместо -t 10 (которые указывает количество секунд начиная с -ss 30 можно использовать -to 40, но тут понятно, что -to не может быть меньше -ss

Вставка картинки с прозрачностью поверх видео
Поверх видео можно добавить изображение. Например код ниже добавляет изображение с прозрачностью на видео, располагая точно по центру:

ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" -c:a copy output.mp4

надо сказать, что т.к. здесь идет добавление фото на каждый кадр, а значит каждый кадр будет отрисован заново, значит необходимо указывать и качество ( -qscale ) и кодек.

Источники

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.