2

У меня есть видео, и я пытаюсь скопировать некоторые фильтры CSS для видео с FFMPEG.

Вот скриншот из видео в CSS с фильтром свойств filter: contrast(150%):

CSS фильтрованный контраст

Я попытался воссоздать этот эффект в FFMPEG с фильтром eq, установив контраст на 1,5

ffmpeg -y -i ./input.mp4 -vf "eq=contrast=1.5:brightness=0:saturation=1" -pix_fmt yuv420p ./filtered_input.mp4

И мой вывод выглядит так:

Вот изображение этих двух скриншотов рядом:

Вы можете видеть, что изображение слева (отфильтрованное с помощью CSS) выглядит немного белее / голубее, если вы посмотрите на снег между изображениями.

Вот ссылка на оригинальное видео: https://i.imgur.com/dDmp16s.mp4

Я также нашел здесь этот комментарий, в котором обсуждается взаимосвязь между контрастом и насыщенностью, но я обнаружил, что есть разница, даже если я отрегулировал насыщенность или даже просто отрегулировал насыщенность самостоятельно.

Моя мета точка в том, что фильтры eq от FFMPEG дают очень разные результаты от соответствующих фильтров CSS. Кто-нибудь знает, почему это может происходить, и как я могу заставить их соответствовать?

2 ответа2

3

Моя мета точка в том, что фильтры eq от FFMPEG дают очень разные результаты от соответствующих фильтров CSS. Кто-нибудь знает, почему это может происходить?

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

Фильтры CSS будут иметь точные математические определения, определенные W3C. Они должны быть точными, чтобы разные браузеры разных производителей могли отображать одно и то же изображение. Текущая спецификация для фильтров CSS находится здесь:https://www.w3.org/TR/filter-effects-1/

С другой стороны, фильтры ffmpeg реализованы «специальным образом» группой (очень умных) инженеров и не обязаны соответствовать каким-либо стандартам. Они просто должны быть полезны с точки зрения разработчиков ffmpeg.

и как я могу заставить их совпадать?

Я ожидаю, что единственный способ точно узнать, что делает фильтр ffmpeg, - это прочитать исходный код (другими словами, исходный код - это спецификация). Сделав это, вы сможете определить входные параметры, которые дадут вам тот же математический результат, что и фильтры CSS. А может и нет.

Поскольку фильтры ffmpeg не обязаны соответствовать какому-либо стандарту, существует риск того, что будущее обновление ffmpeg может изменить результат.

РЕДАКТИРОВАТЬ: Другая вещь, которую следует опасаться, это то, что, даже если числовые значения цвета в обоих видеофайлах одинаковы, они могут отображаться по-разному при воспроизведении. Одна из причин заключается в том, что метаданные о цветовом пространстве были потеряны или изменены во время обработки, так что выходные данные ffmpeg находятся в другом цветовом пространстве, чем исходное видео, в результате чего проигрыватель по-разному интерпретирует числовые значения цвета. Другая причина в том, что один игрок поддерживает преобразования цветового пространства, которые другой не поддерживает. Основываясь на скриншотах выше, похоже, что они просматриваются в разных проигрывателях (браузер против чего-то еще). Лучше всего просматривать оба видео в одном плеере.

0

Из другого потока

filter: contrast(c) saturate(s);

эквивалентно

eq=contrast=c:saturation=c*s

Не уверен насчет параметра яркости.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .