iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
Software Development

學 Python 到底可以幹麻勒?系列 第 22

( Day 22 ) 調整影片亮度、對比、顏色、速度、倒轉影片

  • 分享至 

  • xImage
  •  

這篇文章會介紹使用 Python 的 moviepy 第三方函式庫,讀取影片並調整影片的亮度、對比和顏色 ( 黑白影片、負片效果...等 ),以及調整影片的速度,最後還可以做出倒轉影片的效果。

原文參考:調整影片亮度、對比、顏色調整影片速度、倒轉影片

本篇使用的 Python 版本為 3.7.12,所有範例可使用 Google Colab 實作,不用安裝任何軟體 ( 參考:使用 Google Colab )

調整影片亮度、對比、顏色、速度、倒轉影片

安裝 moviepy

輸入下列指令安裝 moviepy,根據個人環境使用 pip 或 pip3。

!pip install moviepy

由於影片轉檔會使用 ffmpeg,因此也要安裝 ffmpeg ( 影片存檔常見錯誤「TypeError: must be real number, not NoneType」往往都是 ffmpeg 沒有安裝導致 ),根據個人環境使用 pip 或 pip3,Anaconda Jupyter 可以使用 conda install。

!pip install ffmpeg

調整影片亮度與對比

載入 moviepy.video.fx.all 的特效模組,使用 moviepy 讀取影片後,使用 lum_contrast方法,就能調整影片的亮度和對比 ( 更多特效方法參考:moviepy.video.fx (vfx) ),lum_contrast 有下列幾個參數:

參數 說明
clip 要套用效果的影片。
lum 亮度,預設 0,範圍 -255~255,數字越大越亮。
contrast 對比度,預設 0,正常範圍 -1~3 ( 最大約 3~5,超過後產生的顏色會固定 ),若小於 -1 顏色會反轉。
contrast_thr 對比臨界值,預設 127,通常不需做設定。

下方的程式碼執行後,會四個亮度對比不同的影片。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # 使用 Colab 要換路徑使用

from moviepy.editor import *
from moviepy.video.fx.all import *
video = VideoFileClip("oxxostudio.mp4")
output_1 = lum_contrast(video, lum=-50, contrast=0)    # 亮度減少 50
output_2 = lum_contrast(video, lum=150, contrast=0)    # 亮度增加 150
output_3 = lum_contrast(video, lum=0, contrast=-0.5)   # 對比減少 0.5
output_4 = lum_contrast(video, lum=0, contrast=2)      # 對比增加 2

output_1.write_videofile("output_1.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_2.write_videofile("output_2.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_3.write_videofile("output_3.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_4.write_videofile("output_4.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")

print('ok')

Python 教學 - 調整影片亮度、對比、顏色

調整影片顏色

載入 moviepy.video.fx.all 的特效模組,使用 moviepy 讀取影片後,有下列幾種方法可以調整影片的顏色 ( 更多特效方法參考:moviepy.video.fx (vfx) ):

方法 說明
blackwhite 轉換成黑白影片。
invert_colors 反轉影片顏色 ( 負片效果 )。
gamma_corr 調整影片 gamma 值,包含一個參數,預設 0。
colorx 調整影片色彩,包含一個參數,預設 0,範圍約 -1~2。
import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # 使用 Colab 要換路徑使用

from moviepy.editor import *
from moviepy.video.fx.all import *
video = VideoFileClip("oxxostudio.mp4")
output_1 = colorx(video, 1.5)     # 調整顏色
output_2 = gamma_corr(video, 1)   # 調整 gamma 值
output_3 = blackwhite(video)      # 黑白影片
output_4 = invert_colors(video)   # 負片效果

output_1.write_videofile("output_1.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_2.write_videofile("output_2.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_3.write_videofile("output_3.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_4.write_videofile("output_4.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")

print('ok')

Python 教學 - 調整影片亮度、對比、顏色

調整影片速度

載入 moviepy.video.fx.all 的特效模組,使用 moviepy 讀取影片後,使用 speedx 方法,就能調整影片的播放速度 ( 更多特效方法參考:moviepy.video.fx (vfx) ),speedx 有下列三個參數:

參數 說明
clip 要套用效果的影片。
factor 影片的速度 ( 乘以幾倍 ),和 final_duration 擇一使用。
final_duration 轉換後影片的秒數,和 factor 擇一使用。

下方的程式碼執行後,會產生一個 2 倍速的影片 ( 速度變快 ),一個 0.5 倍速的影片 ( 速度變慢 ) 和一個變成只有 2 秒長的影片 ( 如果原本影片長度大於 2 秒就會變快,小於 2 秒就會變慢 )。

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # 使用 Colab 要換路徑使用

from moviepy.editor import *
from moviepy.video.fx.all import *
video = VideoFileClip("oxxostudio.mp4")     # 讀取影片
output_1 = speedx(video, factor=2)          # 2 倍速
output_2 = speedx(video, factor=0.5)        # 0.5 倍速
output_3 = speedx(video, final_duration=2)  # 將影片變成 2 秒長

output_1.write_videofile("output_1.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_2.write_videofile("output_2.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_3.write_videofile("output_3.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")

print('ok')

倒轉影片

載入 moviepy.video.fx.all 的特效模組,使用 moviepy 讀取影片後,使用 time_mirror 方法可以倒轉影片使用 time_symmetrize 方法可以讓影片播到底之後倒轉播放回頭,長度會變成兩倍長 ( 更多特效方法參考:moviepy.video.fx (vfx) ),下方的程式碼執行後,會產生兩段會倒轉播放的影片:

import os
os.chdir('/content/drive/MyDrive/Colab Notebooks')  # 使用 Colab 要換路徑使用

from moviepy.editor import *
from moviepy.video.fx.all import *
video = VideoFileClip("oxxostudio.mp4")   # 讀取影片
output_1 = time_mirror(video)             # 反轉影片
output_2 = time_symmetrize(video)         # 播到底後反轉影片回頭

output_1.write_videofile("output_1.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_2.write_videofile("output_2.mp4",temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")

print('ok')

更多 Python 教學

大家好,我是 OXXO,是個即將邁入中年的斜槓青年,我已經寫了超過 400 篇 Python 的教學,有興趣可以參考下方連結呦~ ^_^


上一篇
( Day 21 ) 改變影片尺寸、旋轉翻轉影片
下一篇
( Day 23 ) 影片加文字、影片自動加字幕
系列文
學 Python 到底可以幹麻勒?41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言