Разница между ffmpeg эквалайзером (яркость / контраст / насыщенность) и CSS фильтрами?

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

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

CSS Filtered contrast

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

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

и мой вывод выглядит следующим образом:

enter image description here

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

enter image description here

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

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

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

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

25
задан justswim
22.04.2023 14:25 Количество просмотров материала 3190
Распечатать страницу

2 ответа

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

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

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

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

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

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

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

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

3
отвечен Chungzuwalla 2023-04-23 22:13

С другой поток

filter: contrast(c) saturate(s);

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

eq=contrast=c:saturation=c*s

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

0
отвечен maxpaj 2023-04-24 00:30

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх