ffmpeg: адаптивно растянуть контраст
Рассмотрим (цветное) видео, записанное в плохих условиях. Самые яркие пиксели его кадров намного ниже чистого белого, а самые темные - намного выше чистого черного. Можно ли растянуть контраст каждого кадра ближе к полному диапазону яркости, как звуковой компрессор / лимитер? Можно ли это сделать в ffmpeg, используя некоторые из его многочисленных фильтров?
Конечно, простое приближение самого яркого значения каждого кадра к белому и самое темное к черному делает экспозицию заикающейся, как в кадре, снятом в 1910 году. Насколько сильно контрастировать каждый кадр, должно зависеть от самых ярких и самых темных значений окружающих кадров, вероятно, +-10 секунд,
Можно извлечь все кадры, получить белые и черные точки каждого кадра с помощью imagemagick, сохранить их в массиве, сгладить массив, снова увеличить контрастность каждого кадра с помощью imagemagick и восстановить видео. Но это похоже на средневековье.
1 ответ
Histeq приближается к тому, что вы хотите. Но вы также можете посмотреть различные варианты фильтров LUT, а также lut3d.
Фильтры lut более настраиваемы, так как вы можете посмотреть на кадр и определить, какие значения использовать. Кроме того, если существует большая разница в уровнях яркости входного материала, то выходной сигнал может быть искажен при применении коррекции "на кадр". Применение равномерной силы коррекции ко всем кадрам даст более плавный результат.