Как автоматически выровнять яркость, контрастность или гамму с помощью FFmpeg?

Вопрос или проблема

Я использую FFmpeg для автоматической обработки видео с камер наблюдения, и камера производит много слишком яркого или слишком темного видео (например, сразу после пробуждения или переключения инфракрасных фонарей).

Если я вручную проверяю видео, это может помочь.

ffmpeg -i in.mp4 -vf "eq=brightness=0.8:contrast=2" -vframes 1 out.jpg

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

Хотя видео может быть очень темным или светлым в среднем, оно обычно использует полный диапазон значений цветовых пикселей от 0.0 до 1.0, поэтому расширение/масштабирование его до полного диапазона с помощью normalize не имеет эффекта:

ffmpeg -i in.mp4 -vf "normalize=independence=0" -vframes 1 out.jpg

Существует ли способ отфильтровать видео так, чтобы каждый кадр имел среднюю яркость пикселей почти 50%, не пиша пользовательский фильтр FFmpeg на C?

Ответ или решение

Чтобы автоматизировать выравнивание яркости, контраста или гаммы с помощью FFmpeg для обработки видеозаписей с камер наблюдения, вы можете использовать несколько фильтров, которые помогут адаптировать каждый кадр к желаемым параметрам. В вашем случае вы хотите, чтобы средняя яркость изображения была примерно 50%, что потребует вычисления и корректировки значений яркости и контраста для каждого кадра.

Для начала необходимо использовать фильтр tblend, чтобы получить среднее значение яркости между текущим кадром и предшествующим. Затем можно использовать фильтр eq для коррекции яркости и контраста. Вот пример команды, которая может помочь:

ffmpeg -i in.mp4 -vf "select='not(mod(n\,5))', blend=all_mode='average', eq=brightness=0.5:contrast=1.5" -c:v libx264 -preset fast -crf 22 out.mp4

Давайте разберем команды по частям:

  1. select: Фильтр select позволяет выбирать кадры из видеопотока. В нашем примере команда not(mod(n\,5)) выбирает каждые пятый кадр. Это позволяет уменьшить количество обрабатываемых кадров и ускорить процесс.

  2. blend: Фильтр blend используется для смешивания двух изображений. В данном случае мы используем режим average, который усредняет значения пикселей выбранных кадров.

  3. eq: Фильтр eq корректирует яркость и контраст. Значения, указанные здесь, могут потребовать дополнительных коррекций в зависимости от специфики вашего видео.

  4. -c:v libx264 -preset fast -crf 22: Эти параметры обеспечивают кодирование выходного видео в формате H.264. Опция -preset определяет скорость кодирования, а -crf управляет качеством сжатия (меньшие значения дают лучшее качество).

Обратите внимание, что параметры brightness и contrast в фильтре eq могут быть настроены в зависимости от ваших требований. Возможно, вам потребуется несколько раз протестировать различные значения, чтобы достичь желаемого результата.

Если у вас есть доступ к встроенным скриптам на Python, можно использовать библиотеку OpenCV для более сложного анализа видео и коррекции, но если хотите ограничиться только FFmpeg, приведенный выше метод будет достаточно эффективным.

Таким образом, FFmpeg предоставляет мощные инструменты для автоматизации процесса обработки видео, позволяя вам достичь желаемого уровня яркости и контраста без необходимости написания собственных фильтров на C.

Оцените материал
Добавить комментарий

Капча загружается...