Python實作視訊轉 gif 動圖
1. 準備工作
需要準備用于生成
gif
的 視訊檔案 ,另外,就是需要用到
moviepy
庫,關于這個庫更詳細的介紹可以檢視它的官方文檔。
https://zulko.github.io/moviepy/
指令行鍵入pip安裝吧
pip install moviepy
這就搞定第1步了!
上面就完成了實作這個功能的子產品了
想要實作
動态效果
上面gif動圖是通過下面代碼實作的python
from moviepy.editor import *
clip = (VideoFileClip("video(4).mp4").resize((488,225)))
clip.write_gif("movie.gif",fps=15) #設定為每秒15幀
制作動圖的制作腳本。
from moviepy.editor import *
video_path = "F:\PythonCool\視訊\【咒術回戰】第20集五條悟帥的有些過分了.mp4"
video = VideoFileClip(video_path)
clip = (video.subclip((2,4.5),(2,6.0))
.resize(0.2))
clip.write_gif("動圖搞定了.gif",fps=8)
我們原始視訊素材是尺寸
1920*1080
,幀率是
30
。
視訊屬性
本次轉動圖的參數設定如下:
-
選取的是整個視訊從2.45秒到2.60秒subclip((2,4.5),(2,6.0)
-
尺寸大小改為原始大小的0.2也就是1/5大小(畢竟動圖尺寸大小其檔案大小也太大)resize(0.2)
-
儲存gif的時候将幀率調整為了8write_gif("動圖搞定了.gif",fps=8)
基于上述參數設定下,這個動圖一共其實是
(2.60-2.45)*8=12
張圖構成!
3. 截取區域轉動圖
有時候我們可能隻需要截取螢幕中指定矩形區域來進行動圖的制作,這就要用到
crop
函數截圖區域了。
video.crop(
x1=None,
y1=None,
x2=None,
y2=None,
width=None,
height=None,
x_center=None,
y_center=None,
)
參數:
、
x1
y1
:矩形區域左上角坐标
、
x2
y2
:矩形區域右下角坐标
、
width
height
:是寬度和高度
、
x_center
:表示x1的坐标為x_center-width/2,x2的坐标為x_center+width/2,y_center類似處理
y_center
比如,我們截圖人物所在區域制作動圖代碼如下:
crop = (video.subclip((2,4.5),(2,6.0))
.resize(0.2)
.crop(x1=70,y1=0, x2=310,y2=216))
crop.write_gif("裁剪.gif",fps=8)
裁剪
video.resize(0.2).preview()
- 固定區域轉動圖
- 對于上面那個動圖中 的搞定了,我們希望它常駐,那麼可以通過截圖搞定了出現這一時刻的内容,然後覆寫到原來位置常駐即可。
snapshot = (crop
# 截圖區域
.crop(x1=100,y1=190, x2=140,y2=216)
# 截取的時間段(1秒的時候)
.to_ImageClip(1)
# 設定位置(左上角,和截取區域的左上角一緻)
.set_position((100, 190))
.set_duration(crop.duration))
# 合并
composition = CompositeVideoClip([crop, snapshot])
composition.write_gif('覆寫.gif', fps=8)
5. 添加自定義文本
from moviepy.video.VideoClip import TextClip
# 蒙版
mask = (# 長寬為40*20的顔色為黑色的mask
ColorClip((40, 20), (0, 0, 0))
# 設定位置(同第4節)
.set_pos((100, 190))
.set_duration(crop.duration)
)
# 文字
text = (TextClip("搞定啦",
fontsize=30, color='white',
font='SimHei', interline=-25)
.set_pos((80, 160))
.set_duration(crop.duration))
composition = CompositeVideoClip([crop, mask, text])
composition.write_gif('覆寫.gif', fps=8)