CodeGym /Java 课程 /Python SELF ZH /应用视觉滤镜与效果:调整亮度、对比度和颜色

应用视觉滤镜与效果:调整亮度、对比度和颜色

Python SELF ZH
第 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() 将该函数应用于视频的每一帧,从而实现红色通道增强效果。

问题和解决方法

刚开始可能觉得让视频变得有色彩感很简单,但跟编程一样,这里总会有点小坑。比如,太高的亮度会让亮区细节丢失,而过强的对比度会让视频看起来“噪点”感很强。推荐逐步调整这些参数,并在小段视频上测试结果。

此外,别忘了性能问题。修改每一帧需要一定资源。实验效果时,视频别太长更为合理。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION