FFmpeg | Удобная цветокоррекция с помощью LUT

от
FFmpeg    lut, cube, photoshop, krita, gmic

В статье про цветокоррекцию мы узнали, что ffmpeg обладаем богатыми возможностями цветокоррекции. Однако на практике подбирать значения долго, даже если использовать ffplay.
Есть и другой способ цветокоррекции — Color Lookup Table или LUT.


LUT представляет собой файл, в котором в таблицу записаны значения исходных и результирующих цветов. Фильтр будет брать цвета из видео, искать соответствующий новый цвет в таблице цветов и записывать его в результирующее видео.

LUT используется не только в ffmpeg, но и во всех уважающих себя графических и видеоредакторах, поэтому эти файлы широко распространены и имеют расширение *.3ds (After Effects), *.cube (самый распространённый), *.dat (DaVinci Resolve) и другие. Основная проблема в том, что LUT платные и дорогие, но есть и бесплатные, хоть на многих сайтах и требуют регистрацию. Сэкономлю вам время :) https://www.shutterstock.com/blog/free-luts-for-log-footage

Чтобы применить LUT используется фильтр lut3d:
  1. ffmpeg -i input.mp4 -vf lut3d=filename.cube result.mp4
Внимательно следите, что фильтр не изменил формат пикселей с yuv420 на yuv444 (не распознаётся браузерами). Чтобы это исправить, добавьте -pix_fmt yuv420p
  1. ffmpeg -i input.mp4 -vf lut3d=filename.cube -pix_fmt yuv420p result.mp4

Пример. Видео от Whizbhagz из Pexels. До:

После:
  1. ffmpeg -i input.mp4 -vf lut3d=OrangeAndBlue.cube result.mp4



Свой LUT в Photoshop
Однако, для ваших нужд под рукой может не оказаться подходящего LUT файла. В таком случае, его можно сделать самим. Нам потребуется скриншот видео:

  1. ffmpeg -ss 4 -i input.mp4 -frames:v 1 img.jpg

Открываем изображение и, используя Adjustment Layers, доводим до приемлемого вида
ps-lut-adjlayers.png

Например, добавить побольше синего и немного затемнить, чтобы было ощущение глубины океана.
ps-lut-adjlayers2.png

Экспортируем File -> Export -> Color Lookup Tables, выбираем разрешение (чем выше, тем точнее цветопередача, но и файл больше) и сохраняем.
ps-lut-export.png
ps-lut-export2.png

Получился такой файл deepocean.cube.gz

Применяем:
  1. ffmpeg -i input.mp4 -vf lut3d=deepocean.cube lut_deepocean.mp4

Было так:



Свой LUT в G'mic (Krita/GIMP)
В G'mic всё ещё проще, поскольку ему не нужны специальные корректирующие слои. Открываем изображение, дублируем слой и ему изменяем цвета любыми доступными плагинами. Например, в этот раз я хочу всем цветам снизить насыщенность, но цвета рыбки (оранжевый и голубой) оставить. Да и оранжевый можно превратить в красный. Этого можно добиться при помощи Conditional Hue/Saturation фильтра (в Krita его вроде бы нет).

Теперь генерируем LUT.
Сразу же убедитесь, что у нас всего 2 слоя и что активен нижний слой.
krita-20240720T170740.png

Идём в Filter - Start G'MIC Qt
krita-20240720T170754.png
И ищем там CLUT From After - Before Layers. Указываем параметры и обязательно внизу Input Layers: Active and above.
krita-20240720T170758.png

Сохраняем файл. fishaccent.cube.gz

Применяем:
  1. ffmpeg -i input.mp4 -vf lut3d=fishaccent.cube lut_fishaccent.mp4

Было так:


Также LUT можно сгенерировать без редакторов, при помощи скрипта https://github.com/EinExperte/lutcraft
  • +5
  • views 418