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

ffmpeg -i 3.mp4 -c:v libx264 -c:a libfaac -filter_complex "[0:v]eq=1.0:0:1.3:2.4:0.175686275:0.103529412:0.031372549:0.4[outv]" -map [outv] out.mp4

Документация FFmpeg помогла мне определить границы для каждого значения для фильтра eq . Но все же я не получаю ожидаемый результат для эффекта "Кельвина", как в ссылке выше. Я рассчитал значения rg, gg, bg в соответствии со значениями для значения sepia использованными в css. (r = 112, g = 66, b = 20 - это значения, которые я использовал для преобразования сепии в rgb) Ниже приведена простая математика, которую я использовал для получения значений rg, gg, bg.

rg = (112/255) * (gamma_r max - gamma_r min) * значение сепии

Здесь gamma_r max равно 10, а gamma_r min равно 0,1 согласно документации.

Что я здесь не так делаю? Есть ли другая альтернатива, чтобы сделать это?

2 ответа2

0

Наконец, создали эффекты с помощью цепочек colorchannelmixer и eq . В соответствии с эффектами, упомянутыми здесь, я применил эффект sepia используя фильтр colorchannelmixer и откорректировал остальные свойства, используя фильтр eq .

Для эффекта сепии вы можете использовать матрицу сепии , подставив amount sepia value . Все остальные свойства могут быть применены напрямую без какой-либо математики, кроме значения яркости. Я заменил значение яркости на,

(яркость - контрастность) / 20

что привело к более вероятному выходу. Кто-то может исправить это, поскольку это не точный расчет. Ниже приведена команда FFmpeg для эффекта "Ива" после выполнения этих вычислений.

ffmpeg -i input_image -filter_complex "
[0:v]colorchannelmixer=0.98786:0.01538:0.00378:0.0:0.00698:0.99372:0.00336:0.0:0.00544:0.01068:0.98262:0.0[colorchannelmixed];
[colorchannelmixed]eq=0.85:0.0175:0.02:1.0:1.0:1.0:1.0:1.0[color_effect]" -map [color_effect] -c:v png output_image

Надеюсь, это поможет кому-то еще. Ура!

0

eq фильтр регулирует цветовые каналы относительно их текущего состояния, то есть увеличение или уменьшение их интенсивности (как "объемной" ручка в звуке). Чтобы достичь целевой цветовой температуры с помощью eq вам необходимо рассчитать текущую цветовую температуру каждого региона на фотографии, а затем изменить ее - то, для чего вам нужен сервер кадров, такой как AviSynth. Но все это на самом деле не нужно, потому что вы на самом деле не хотите полностью контролировать свой баланс белого, вы просто хотите применить фиксированный фильтр, который даст определенный цветовой тон - в данном случае сепия. Для этого вы должны использовать вместо фильтра colorchannelmixer, который обеспечивает способ управлять балансом белого пикселей друг относительно друга. В документации фильтра есть конкретный пример для сепии:

colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131

Как это работает (очень упрощенное объяснение)

Фильтр colorchannelmixer описывает изображение так, как если бы оно имело 4 цветовых канала - называемых красным, зеленым, синим и альфа (канал "маски"). По умолчанию каждый канал представляет интенсивность цвета, после которой он называется 1.0. Таким образом, "красный" канал представляет часть изображения, которая красного цвета равна 1,0, часть, которая зеленого цвета равна 0,0, часть, которая синего цвета равна 0,0, и часть, которая является альфа-умножением 0,0. Аналогично, каждый канал имеет значение 1,0 для "своего" цвета и 0,0 для всех остальных. Теперь фильтр позволяет "красть" цвет из его канала и вводить его "энергию" в другой канал. Например, вы можете увеличить значение красного в канале "Зеленый" до 1,0, а значение красного в канале "Красный" - до 0,0, так что теперь интенсивность зеленого будет увеличиваться в каждом пикселе на исходную интенсивность красный, не оставляя никакого красного на изображении, и не изменяя относительную интенсивность синего и альфа. Применяя эту концепцию ко всем 16 комбинациям цветов, вы получаете матрицу, которая определяет результирующую интенсивность цвета каждого пикселя как произведение всех исходных интенсивностей цвета. Затем результат нормализуется, и вы получаете простой способ выражения кривой преобразования цвета.

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

Надеюсь, это хорошо для вас!

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