FFmpeg | Обрезка части видео или изображения (crop)

от
FFmpeg    crop, обрезка, обрезка изображения, aspect ratio

Кроме обрезки видео по времени, может понадобиться обрезать часть изображения на видео.


Содержание
  - Обрезка от центра
  - Константы
  - Автоопределение размера обрезки (cropdetect)

Для обрезки применяется фильтр crop:
  -vf crop=ширина:высота:x:y
  x, y — координаты верхней левой точки, откуда будет произведена обрезка.
В параметрах поддерживаются математические выражения, а также некоторые константы (о них ниже).
Точка 0:0 находится в самом верхнем левом углу видео.
20210316T151634.jpg

Дальнейшие примеры я буду проводить с этой картинкой, но всё то же самое работает и для видео.
ffmpeg_crop_sample.jpg
⚠️ Многие видеокодеки не поддерживают нечётные размеры, поэтому не забывайте при обрезке указывать ширину и высоту кратными двум.
Обрезать до размера 300:220
  1. ffmpeg -i ffmpeg_crop_sample.jpg -vf crop=300:220:0:0 out1.jpg
Обрезать часть с позиции 50:30 до 300:220
  1. ffmpeg -i ffmpeg_crop_sample.jpg -vf crop=250:190:50:30 out2.jpg
  2. ffmpeg -i ffmpeg_crop_sample.jpg -vf crop=300-50:220-30:50:30 out2a.jpg
Оба варианта делают одно и то же, но во втором случае не пришлось самому вычислять координаты.

Обрезка от центраЕсли не указывать x и y, то обрезка будет происходить от центра:
  -vf crop=ширина:высота
Возьмём тот же пример с размером 300:220
  1. ffmpeg -i ffmpeg_crop_sample.jpg -vf crop=300:220 out3.jpg
1 из 2Сравните
crop=300:220:0:0
out1.jpg

КонстантыКонстанты, доступные для использования в фильтре:
  iw, in_w — ширина исходного видео
  ih, in_h — высота исходного видео
  ow, out_w — ширина обрезанного видео
  oh, out_h — высота обрезанного видео
  a — отношение ширины и высоты iw/ih

Вырезать верхний левый угол видео до центра:
  1. ffmpeg -i in.mp4 -vf crop=iw/2:ih/2:0:0 crop_ul.mp4
Вырезать верхний правый угол:
  1. ffmpeg -i in.mp4 -vf crop=iw/2:ih/2:iw/2:0 crop_ur.mp4
Вырезать нижний левый угол:
  1. ffmpeg -i in.mp4 -vf crop=iw/2:ih/2:0:ih/2 crop_bl.mp4
Вырезать нижний правый угол:
  1. ffmpeg -i in.mp4 -vf crop=iw/2:ih/2:iw/2:ih/2 crop_br.mp4

Вырезать центральную треть видео:
  1. ffmpeg -i in.mp4 -vf crop=1/3*in_w:1/3*in_h crop_center.mp4

Обрезать 5 пикселей сверху, 10 справа, 15 снизу и 20 слева
  1. ffmpeg -i in.mp4 -vf crop=iw-10-20:ih-5-15:20:5 out.mp4

Обрезать видео до высоты в 240 пикселей с сохранением пропорций:
  1. ffmpeg -i in.mp4 -vf crop=a*oh:240 out.mp4
  2. ffmpeg -i in.mp4 -vf crop=a*240:240 out.mp4


Автоопределение размера обрезки (cropdetect)Если у видео есть чёрные полосы или оно заключено в тёмную рамку, можно воспользоваться фильтром cropdetect для того, чтобы ffmpeg подсказал размеры для обрезки:
  1. ffmpeg -i in.mp4 -vf cropdetect -f null -
В консоль будет выведена информация о координатах:
  1. [Parsed_cropdetect_0 @ 00000000003d4740] x1:0 x2:399 y1:17 y2:232 w:400 h:208 x:0 y:22 pts:127488 t:9.960000 crop=400:208:0:22
Останется только подставить значение:
  1. ffmpeg -i in.mp4 -vf crop=400:208:0:22 out.mp4
  • +1
  • views 853