利用Python輕松實現(xiàn)視頻轉(zhuǎn)GIF動圖
前言
不知道大家是不是有過類似的經(jīng)歷,在看視頻的時候覺得某段非常有意思想弄成動圖,但是無從下手! 或可以在網(wǎng)上找一些在線工具但是多多少少需要付費或者帶有水印之類的,那么???
對,今天我們就來學(xué)習用Python搞定這一需求吧!

動圖效果
1. 準備工作
需要準備用于生成gif的視頻文件,我這里用的是上次《用Python制作一個B站視頻下載小工具》里案例中的視頻。另外,就是需要用到moviepy庫,關(guān)于這個庫更詳細的介紹可以查看它的官方文檔。
https://zulko.github.io/moviepy/
命令行鍵入pip安裝吧
pip install moviepy
這就搞定第1步了!
2. 初探
這一步也是我們開篇第一張動圖的制作腳本。
from moviepy.editor import *
video_path = "F:\PythonCool\視頻\【咒術(shù)回戰(zhàn)】第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。

視頻屬性
本次轉(zhuǎn)動圖的參數(shù)設(shè)定如下:
subclip((2,4.5),(2,6.0)選取的是整個視頻從2.45秒到2.60秒
resize(0.2)尺寸大小改為原始大小的0.2也就是1/5大?。ó吘箘訄D尺寸大小其文件大小也太大)
write_gif("動圖搞定了.gif",fps=8)保存gif的時候?qū)收{(diào)整為了8
基于上述參數(shù)設(shè)定下,這個動圖一共其實是(2.60-2.45)*8=12張圖構(gòu)成!

動圖屬性
3. 截取區(qū)域轉(zhuǎn)動圖
有時候我們可能只需要截取屏幕中指定矩形區(qū)域來進行動圖的制作,這就要用到crop函數(shù)截圖區(qū)域了。
video.crop(
x1=None,
y1=None,
x2=None,
y2=None,
width=None,
height=None,
x_center=None,
y_center=None,
)
參數(shù):
x1、y1:矩形區(qū)域左上角坐標
x2、y2:矩形區(qū)域右下角坐標
width、height:是寬度和高度
x_center、y_center:表示x1的坐標為x_center-width/2,x2的坐標為x_center+width/2,y_center類似處理
比如,我們截圖人物所在區(qū)域制作動圖代碼如下:
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)

裁剪
這里關(guān)于左上角和右下角坐標的確定可以采用preview方法預(yù)覽視頻,然后鼠標點擊對應(yīng)位置來獲取。
video.resize(0.2).preview()
4. 固定區(qū)域轉(zhuǎn)動圖
對于上面那個動圖中 的搞定了,我們希望它常駐,那么可以通過截圖搞定了出現(xiàn)這一時刻的內(nèi)容,然后覆蓋到原來位置常駐即可。
snapshot = (crop
# 截圖區(qū)域
.crop(x1=100,y1=190, x2=140,y2=216)
# 截取的時間段(1秒的時候)
.to_ImageClip(1)
# 設(shè)置位置(左上角,和截取區(qū)域的左上角一致)
.set_position((100, 190))
.set_duration(crop.duration))
# 合并
composition = CompositeVideoClip([crop, snapshot])
composition.write_gif('覆蓋.gif', fps=8)

覆蓋
5. 添加自定義文本
對于上面這個操作,我們還有很多方法來完成,比如用一張帶有搞定了的圖片去覆蓋(和上面的案例類似,只是不需要單獨截圖而是讀取一張現(xiàn)成的);另外,我們還可以通過添加蒙版再加上自定義文字的形式來玩。
from moviepy.video.VideoClip import TextClip
# 蒙版
mask = (# 長寬為40*20的顏色為黑色的mask
ColorClip((40, 20), (0, 0, 0))
# 設(shè)置位置(同第4節(jié))
.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)

自定義文本
到此這篇關(guān)于利用Python輕松實現(xiàn)視頻轉(zhuǎn)GIF動圖的文章就介紹到這了,更多相關(guān)Python視頻轉(zhuǎn)GIF內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)針對給定單鏈表刪除指定節(jié)點的方法
這篇文章主要介紹了Python實現(xiàn)針對給定單鏈表刪除指定節(jié)點的方法,結(jié)合實例形式分析了Python單鏈表的定義、節(jié)點添加、刪除、打印等相關(guān)操作技巧,需要的朋友可以參考下2018-04-04
python3使用diagrams繪制架構(gòu)圖的步驟
這篇文章主要介紹了python3使用diagrams生成架構(gòu)圖的步驟,幫助大家更好的理解和學(xué)習使用python,感興趣的朋友可以了解下2021-04-04

