JavaRush /Курсы /Python SELF /Применение визуальных фильтров и эффектов: изменение ярко...

Применение визуальных фильтров и эффектов: изменение яркости, контраста и цвета

Python SELF
48 уровень , 1 лекция
Открыта

1. Визуальные эффекты

Введение в визуальные эффекты

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

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

Основы изменения яркости, контраста и цвета

Прежде чем перейти к практике, давайте освежим наше понимание того, что такое яркость, контраст и цвет в контексте видео.

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

2. Изменение яркости видео

Теперь давайте окунемся в код и посмотрим, как можно применить эти эффекты с помощью MoviePy.

Изменение яркости видео с помощью метода fl_image()

Изменение яркости видео можно достичь с помощью метода fl_image, который позволяет применять пользовательские функции ко всем кадрам видео. Если вы хотите увеличить яркость на 20%, то укажите множитель 1.2

Python

from moviepy.editor import VideoFileClip

# Функция для изменения яркости
def change_brightness(image, factor=1.2):
    return image * factor

# Открытие видеофайла
clip = VideoFileClip("video.mp4")

# Применение изменения яркости
brightened_clip = clip.fl_image(lambda frame: change_brightness(frame, 1.2))

# Сохранение результата
brightened_clip.write_videofile("brightened_video.mp4")

Изменение яркости видео с помощью moviepy.video.fx.all

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

Увеличение яркости видео

Python

from moviepy.editor import VideoFileClip
from moviepy.video.fx.all import lum_contrast

# Загрузка видео
video = VideoFileClip("sample_video.mp4")

# Применение эффекта для увеличения яркости
bright_video = lum_contrast(video, lum=30)  # Увеличение яркости на 30 единиц

# Сохранение результата
bright_video.write_videofile("bright_video.mp4")

В этом примере:

  • lum_contrast(video, lum=30) увеличивает яркость видео на 30 единиц. Значение яркости может быть как положительным (для увеличения яркости), так и отрицательным (для затемнения).

Уменьшение яркости видео

Python

# Применение эффекта для уменьшения яркости
dark_video = lum_contrast(video, lum=-30)  # Уменьшение яркости на 30 единиц

# Сохранение результата
dark_video.write_videofile("dark_video.mp4")

3. Изменение контраста видео

Контрастность видео отвечает за яркость и насыщенность светлых и тёмных участков. Повышение контраста делает светлые участки ярче, а тёмные — темнее, в то время как понижение контраста уменьшает разницу между светлыми и тёмными участками.

Изменение контраста с помощью метода fl_image()

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

Python

import numpy as np

# Функция для изменения контраста
def change_contrast(image, factor=1.5):
    mean = np.mean(image)
    return (image - mean) * factor + mean

# Применение изменения контраста
contrasted_clip = clip.fl_image(lambda frame: change_contrast(frame, 1.5))

# Сохранение результата
contrasted_clip.write_videofile("contrasted_video.mp4")

Изменение контраста с помощью метода lum_contrast()

Повышение контраста видео

Python

# Повышение контраста
high_contrast_video = lum_contrast(video, contrast=1.5)  # Увеличение контраста на 50%

# Сохранение результата
high_contrast_video.write_videofile("high_contrast_video.mp4")

Здесь:

  • contrast = 1.5 увеличивает контраст на 50%. Можно указать любое значение больше 1 для увеличения контраста.

Понижение контраста видео

Python

# Понижение контраста
low_contrast_video = lum_contrast(video, contrast=0.5)  # Уменьшение контраста на 50%

# Сохранение результата
low_contrast_video.write_videofile("low_contrast_video.mp4")

Здесь:

  • contrast = 0.5 уменьшает контраст на 50%. Значения меньше 1 понижают контраст, что делает изображение менее насыщенным.

4. Изменение цветовых характеристик видео

MoviePy предоставляет возможности для изменения цветовой гаммы, преобразования изображения в черно-белый режим и других цветовых эффектов.

Цветокоррекция помощью метода fl_image()

Для цветокоррекции мы можем воспользоваться функцией rgb_color, которая позволяет преобразовать цветовую палитру видео.

Python

def adjust_color(image, factor=0.8):
    return image * np.array([1, factor, factor])  # уменьшение зеленого и синего каналов

# Применение цветокоррекции
color_corrected_clip = clip.fl_image(lambda frame: adjust_color(frame, 0.8))

# Сохранение результата
color_corrected_clip.write_videofile("color_corrected_video.mp4")

Цветокоррекция с помощью moviepy.video.fx.all

MoviePy предоставляет возможности для изменения цветовой гаммы, преобразования изображения в черно-белый режим и других цветовых эффектов.

Преобразование видео в черно-белый режим

Для создания черно-белого видео можно использовать метод fx с функцией blackwhite.

Python

from moviepy.video.fx.all import blackwhite

# Преобразование видео в черно-белое
bw_video = blackwhite(video)

# Сохранение результата
bw_video.write_videofile("black_and_white_video.mp4")

Здесь:

  • blackwhite(video) преобразует видео в оттенки серого.

Инверсия цветов видео

MoviePy позволяет создать эффект инверсии цветов, который может использоваться для создания драматических или художественных эффектов.

Python

from moviepy.video.fx.all import invert_colors

# Инверсия цветов видео
inverted_video = invert_colors(video)

# Сохранение результата
inverted_video.write_videofile("inverted_video.mp4")

Здесь:

  • invert_colors(video) инвертирует все цвета в видео, создавая эффект негативного изображения.

5. Применение фильтров

Применение цветовых фильтров для создания эффекта сепии

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

Создание эффекта сепии

Python

from moviepy.video.fx.all import colorx

# Применение эффекта сепии (уменьшение синего и зеленого канала)
sepia_video = colorx(video, 0.9)

# Сохранение результата
sepia_video.write_videofile("sepia_video.mp4")

В этом примере:

  • colorx(video, 0.9) уменьшает насыщенность цветов. Вы также можете комбинировать этот эффект с другими, чтобы получить теплые оттенки.

Использование пользовательских фильтров

Если вам нужно создать уникальный цветовой эффект, MoviePy позволяет писать собственные фильтры. Это делается путем создания функции, которая будет применяться к каждому кадру видео.

Создание пользовательского фильтра для усиления красного канала

Python

import numpy as np

# Пользовательская функция для увеличения красного канала
def enhance_red(image):
    image[:, :, 0] = np.clip(image[:, :, 0] * 1.5, 0, 255)  # Усиление красного канала
    return image

# Применение пользовательского фильтра
red_video = video.fl_image(enhance_red)

# Сохранение результата
red_video.write_videofile("enhanced_red_video.mp4")

В этом примере:

  • Функция enhance_red(image) усиливает красный канал изображения, делая его более насыщенным.
  • fl_image() применяет эту функцию к каждому кадру видео, создавая эффект увеличения красного канала.

Проблемы и решения

На первый взгляд, кажется, что сделать видео красочным — это просто. Однако, как и в программировании, всегда есть нюансы. Например, слишком высокая яркость может "съесть" детали в светлых областях, а чрезмерный контраст может сделать видео визуально "шумным". Рекомендуется применять эти изменения постепенно и проверять результат на небольших фрагментах видео.

Кроме того, не забывайте про производительность. Изменение каждого кадра — это процесс, который требует ресурсов. Разумно следить за тем, чтобы видео не было чрезмерно длинным, когда вы экспериментируете с эффектами.

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ