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

Введение

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

 

Преобразование файла:

Введите ffmpeg -i, затем введите имя и расширение исходного файла, а затем введите имя и расширение конечного файла.

Например, чтобы преобразовать MP4-файл «Kitties» в WAV-файл «Cats», введите:

ffmpeg -i Kitties.mp4 Cats.wav

Если в имени файла есть пробелы, заключите имя и расширение файла в кавычки. Например, вместо YouTube Drama.mp4 введите "YouTube Drama.mp4"

Доступные форматы в FFmpeg:

Видео — MP4, MOV, WEBM, FLV, AIFF и AVI.

Аудио — MP3, WAV, WMA, M4A, AAC и OGG.

 

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

Довольно часто нужно вырезать из видео небольшой фрагмент с 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)

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

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

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

 

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

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

 

Сетка 2x2:

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

 

Сетка 3x2:

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 очень мощный инструмент для обработки видео. С его помощью, имея шпаргалку по его возможностям, можно сэкономить много времени — куда быстрее ввести несколько команд, чтобы обработать видео, чем запускать редактор.

 

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

 

Метаданные статьи

Идентификатор статьи:
21
Категория:
Рейтинг :

Связанные статьи