調整影片速度、倒轉影片
這篇文章會介紹使用 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 讀取影片後,使用 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')
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~