iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0
Software Development

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

( Day 21 ) 改變影片尺寸、旋轉翻轉影片

  • 分享至 

  • xImage
  •  

改變影片尺寸、旋轉翻轉影片

這篇文章會介紹使用 Python 的 moviepy 第三方函式庫,改變影片的長寬尺寸、裁切出指定大小的影片,以及將影片套用旋轉、左右翻轉、上下翻轉的效果。

原文參考:改變影片尺寸、旋轉翻轉影片

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

Python 教學 -  改變影片尺寸、旋轉翻轉影片

安裝 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 讀取影片後,使用 resize 方法,參數使用 tuple 格式填入長度和寬度,就能改變影片的尺寸。

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

from moviepy.editor import *
video = VideoFileClip("oxxostudio.mp4")    # 讀取影片
output = video.resize((480,360))           # 改變尺寸
output.write_videofile("output.mp4", fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')

如果不確定影片的長寬比例,也可以單獨指定寬度 width 或高度 height,就會根據比例,自動計算出另外的寬度或高度

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

from moviepy.editor import *
video = VideoFileClip("oxxostudio.mp4")
output = video.resize(width=480)         # 改變尺寸,設定寬度改變為 480
output.write_videofile("output.mp4", fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')

裁切出指定的尺寸

載入 moviepy.video.fx.all 的特效模組,使用 moviepy 讀取影片後,*使用 crop 方法中可以在影片中裁切出特定區域 ( 更多特效方法參考: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 = crop(video, x1=10, y1=10, width=50, height=50)  # 方法 1,指定左上 (x1, y1) 座標和寬高
output_2 = crop(video, x1=10, y1=10, x2=50, y2=50)         # 方法 2,指定左上 (x1, y1) 座標和右下 ( x2, y2 )座標
output_3 = crop(video, x1=10, width=100)                   # 方法 3,指定左上 x1 座標和寬度,就會自動採用 y1=0 和影片高度

output_1.write_videofile("output.mp4", fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')

旋轉影片

使用 rotate 方法,可以將影片旋轉到指定的角度,如果不是 90、-90、180、-180 之類的數值,空白的區域會變成黑色。

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

from moviepy.editor import *
video = VideoFileClip("oxxostudio.mp4")
output = video.rotate(90)             # 影片旋轉 90 度
output.write_videofile("output.mp4", fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
print('ok')

Python 教學 -  改變影片尺寸、旋轉翻轉影片

翻轉影片

載入 moviepy.video.fx.all 的特效模組,使用 moviepy 讀取影片後,使用 fx 方法中的 mirror_x 可以將影片水平翻轉,mirror_y 可以將影片垂直翻轉 ( 更多特效方法參考: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_x = mirror_x(video)    # 左右翻轉
output_y = mirror_y(video)    # 垂直翻轉

output_x.write_videofile("output_x.mp4", fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")
output_y.write_videofile("output_y.mp4", fps=30, temp_audiofile="temp-audio.m4a", remove_temp=True, codec="libx264", audio_codec="aac")

print('ok')

Python 教學 -  改變影片尺寸、旋轉翻轉影片

更多 Python 教學

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


上一篇
( Day 20 ) 影片混合與排列顯示
下一篇
( Day 22 ) 調整影片亮度、對比、顏色、速度、倒轉影片
系列文
學 Python 到底可以幹麻勒?41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言