CodeGym /Java Adesua /Python SELF TW /應用視覺過濾器與效果:調整亮度、對比度與顏色

應用視覺過濾器與效果:調整亮度、對比度與顏色

Python SELF TW
等級 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