Что такое фильтр ffmpeg, эквивалентный «Автоматическим уровням» для цветов?

Глядя на документацию о фильтрах, кажется, что есть фильтр кривой для управления цветом со следующими пресетами:

  • цвет_отрицательный
  • cross_process
  • темнее
  • увеличить контраст
  • более легкий
  • linear_contrast
  • средний_контраст
  • отрицательный
  • сильный_контраст
  • винтаж

К сожалению, в документации не упоминается, что делают эти пресеты и каковы их параметры. Ищу простой вариант снять видео и автовыравнивать цвета для всех кадров. Делает ли это какой-либо из этих пресетов?

Ответы (1)

Вот подробности о том, что делают пресеты:

[PRESET_COLOR_NEGATIVE] = {
    "0/1 0.129/1 0.466/0.498 0.725/0 1/0",
    "0/1 0.109/1 0.301/0.498 0.517/0 1/0",
    "0/1 0.098/1 0.235/0.498 0.423/0 1/0",
},
[PRESET_CROSS_PROCESS] = {
    "0.25/0.156 0.501/0.501 0.686/0.745",
    "0.25/0.188 0.38/0.501 0.745/0.815 1/0.815",
    "0.231/0.094 0.709/0.874",
},
[PRESET_DARKER]             = { .master = "0.5/0.4" },
[PRESET_INCREASE_CONTRAST]  = { .master = "0.149/0.066 0.831/0.905 0.905/0.98" },
[PRESET_LIGHTER]            = { .master = "0.4/0.5" },
[PRESET_LINEAR_CONTRAST]    = { .master = "0.305/0.286 0.694/0.713" },
[PRESET_MEDIUM_CONTRAST]    = { .master = "0.286/0.219 0.639/0.643" },
[PRESET_NEGATIVE]           = { .master = "0/1 1/0" },
[PRESET_STRONG_CONTRAST]    = { .master = "0.301/0.196 0.592/0.6 0.686/0.737" },
[PRESET_VINTAGE] = {
    "0/0.11 0.42/0.51 1/0.95",
    "0.50/0.48",
    "0/0.22 0.49/0.44 1/0.8",
}

Для каждой предустановки каждая x/yпара сопоставляет ввод xс выводом y, где диапазон равен 0-1. Если не установлено, фильтр устанавливается автоматически, 0/0т 1/1. е. входной черный = выходной черный, а входной белый = выходной белый. Принимая во внимание 0/1, что это означало бы установить входные черные пиксели на белые на выходе. Если у вас есть несколько пар в кавычках, разделенных запятыми, последовательность "R","G","B"отображается. Интерполяция между точками представляет собой натуральный кубический сплайн .


Для автоматического выравнивания грубым методом будет использование autolevelsподфильтра ppфильтра.

ffmpeg -i input.mp4 -vf pp=al output.mp4

Это растягивает яркость до полного диапазона.


Чтобы проверить уровни до (и после) любой настройки, которую вы делаете, вы можете создать парад RGB для кадра, например так

ffmpeg -i input.mp4 -vf "format=rgb24,waveform=c=7:d=parade,scale=1200x512" -vframes 1 frame1parade.png

Для определенного кадра используйте

ffmpeg -ss 12.4 -i input.mp4 -vf "format=rgb24,waveform=c=7:d=parade,scale=1200x512" -vframes 1 frameNparade.png