FFmpeg. Трюки и хитрости

Введение

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

Обрезка видео по времени

Довольно часто нужно вырезать с видео небольшой фрагмент с n по m секунды. Для этого нужно указать секунду, с которой вырезать и длительность.

ffmpeg -i i.mp4 -ss 00:01:00 -t 00:02:00 -c copy o.mp4

Параметр -ss указывает на начальную точку, а -t на длительность.

Важное замечание! Если длительность видео 5 минут, начальную точку укажем в 00:04:00, а длительность в 00:02:00, длительность конечного видео будет 1 минута.

Тут и далее по тексту статьи, i.mp4 — это путь к входному файлу, а o.mp4 — к выходному.

Создание видео с фотографий

Предположим, у нас есть камера наблюдения, которая делала фото каждую минуту в течении суток, а мы хотим получить одно непрерывное видео.

Используя код ниже, можно превратить все фото с расширением .jpg с текущей папки в видео, с кадровой частотой 10 FPS, используя H.264 кодек.

ffmpeg -framerate 10 -pattern_type glob -i '*.jpg' -c:v libx264 o.mp4

Извлечение фотографий с видео

А теперь сделаем действие противоположное действию с предыдущего пункта — разобьем видео по кадрам на фотографии.

ffmpeg -i o.mp4 -r 1 -q:v 2 -f image2 img-3%d.jpeg

Склейка двух и больше видео в одно

Для склейки множества видео в одно нам потребуется создать файл, например list.txt в котором по порядку перечислим пути к видео, которые хотим склеить, например:

file 'video1.mp4'
file 'video2.mp4'
file 'videoN.mp4'

А после этого выполним:

ffmpeg -f concat -i list.txt -c copy o.mp4

Создавать такой файл вручную не лучшая идея, можно его наполнить автоматически, например, так:

for f in ./*.mp4; do echo "file '$f'" >> list.txt; done

или так:

printf "file '%s'\n" ./*.mp4> list.txt

Удаление и извлечения аудио с видео

Для удаления используем:

ffmpeg -i i.mp4 -c:v copy -an o.mp4

А для извлечения:

ffmpeg -i i.mp4 -vn 0.wav

Обрезка видео по высоте и ширине

В начале статьи я рассказал о способе обрезки видео по времени, но его также можно обрезать и по размеру кадра, например превратить 16:9 формат в 3:4, обрезав кадр слева и справа.

ffmpeg -i i.mp4 -filter:v "crop=w:h:x:y" o.mp4

В фильтре crop по очереди нужно указать ширину, высоту нового кадра, а также его смещение по координатам.

Размещение видео рядом в одном кадре (stack video)

b307cb3c9acf96053899bfce37d4d72f.jpg

Перед тем, как мы это сделаем, есть пара моментов, которые нужно рассмотреть:

  • Видео должны иметь одинаковую высоту.

  • Видео должны иметь тот же формат пикселей.

Горизонтальное размещение:

ffmpeg -i i0.mp4 -i i1.mp4 -filter_complex hstack=inputs=2 o.mp4

Вертикальное размещение:

ffmpeg -i i0.mp4 -i i1.mp4 -filter_complex vstack=inputs=2 o.mp4

Сетка 2×2:

ffmpeg \
-i i0.mp4 -i i1.mp4 -i i2.mp4 -i i3.mp4 \
-filter_complex \
"[0:v][1:v]hstack=inputs=2[top]; \
[2:v][3:v]hstack=inputs=2[bottom]; \
[top][bottom]vstack=inputs=2[v]" \
-map "[v]" \
o.mp4

Сетка 3×2:

ffmpeg \
-i i0.mp4 -i i1.mp4 \
-i i2.mp4 -i i3.mp4 \
-i i4.mp4 -i i5.mp4 \
-filter_complex \
"[0:v][1:v][2:v]hstack=inputs=3[top];\
[3:v][4:v][5:v]hstack=inputs=3[bottom];\
[top][bottom]vstack=inputs=2[v]" \
-map "[v]" \
o.mp4

Поворот видео

ffmpeg -i i.mp4 -vf "transpose=0" o.mp4

Параметр transpose в коде выше может принимать такие значения:

  • 0 — Повернуть на 90 градусов против часовой стрелки и развернуть по вертикали. По умолчанию.

  • 1 — Повернуть на 90 градусов по часовой стрелке.

  • 2 — Повернуть на 90 градусов против часовой стрелки.

  • 3 — Повернуть на 90 градусов по часовой стрелке и развернуть по вертикали.

Послесловие

FFmpeg очень мощный инструмент для обработки видео. С его помощью, имея шпаргалку по его возможностям, можно сэкономить много времени — куда быстрее ввести несколько команд, чтобы обработать видео, чем запускать редактор.

Если вы знаете еще полезные хитрости и трюки — милости прошу поделиться ими в комментариях. Спасибо!

© Habrahabr.ru