ffmpeg: адаптивно растянуть контраст

1935
Camille Goudeseune

Рассмотрим (цветное) видео, записанное в плохих условиях. Самые яркие пиксели его кадров намного ниже чистого белого, а самые темные - намного выше чистого черного. Можно ли растянуть контраст каждого кадра ближе к полному диапазону яркости, как звуковой компрессор / лимитер? Можно ли это сделать в ffmpeg, используя некоторые из его многочисленных фильтров?

Конечно, простое приближение ярчайшего значения каждого кадра к белому и самое темное к черному делает экспозицию заикающейся, как в кадре, снятом в 1910 году. Насколько сильно контрастировать каждый кадр, должно зависеть от самых ярких и самых темных значений окружающих кадров, вероятно, + -10 секунд. ,

Можно извлечь все кадры, получить белые и черные точки каждого кадра с помощью imagemagick, сохранить их в массиве, сгладить массив, снова увеличить контрастность каждого кадра с помощью imagemagick и восстановить видео. Но это похоже на средневековье.

2
[Histeq] (http://www.ffmpeg.org/ffmpeg-filters.html#histeq) приближается к тому, что вы хотите. Но вы также можете посмотреть различные варианты фильтров [LUT] (http://www.ffmpeg.org/ffmpeg-filters.html#lut_002c-lutrgb_002c-lutyuv) и lut3d. Rajib 10 лет назад 0
Фильтр 'histeq' выглядит многообещающе из документации. Но когда я проверяю libavfilter / vf_histeq.c filter_frame (), это похоже на фильтры «кривые», «lut / lutrgb / lutyuv» и (я думаю) «lut3d», которые игнорируют пиксели из более ранних и более поздних кадров. 'histeq' строит гистограммы только по одному кадру за раз. (Но 'histeq' _does_ технически отвечает на вопрос!) Camille Goudeseune 10 лет назад 0
если вы пытаетесь усреднить его по длине видео, нужно сделать что-то наподобие imagemagick, будь то imagemagick или ffmpeg. Чтобы получить гистограмму окружающего видео, все окружающие кадры * должны быть * декодированы и усреднены вместе. stib 10 лет назад 0
@ Rajib, пожалуйста, отправьте histeq в качестве ответа, чтобы я мог принять его. AFAIK Ни один из фильтров ffmpeg не использует предыдущие или последующие кадры в качестве входных данных. Camille Goudeseune 10 лет назад 0

1 ответ на вопрос

1
Rajib

Histeq приближается к тому, что вы хотите. Но вы также можете взглянуть на различные варианты фильтров LUT и lut3d.

Фильтры lut более настраиваемы, так как вы можете посмотреть на кадр и определить, какие значения использовать. Кроме того, если существует большая разница в уровнях яркости входного материала, то выходной сигнал может быть искажен при применении коррекции «на кадр». Применение равномерной силы коррекции ко всем кадрам даст более плавный результат.

Похожие вопросы