Python實(shí)現(xiàn)將MP4視頻轉(zhuǎn)化為GIF圖像
前言
GIF圖片對于我來說是一個很好的展示方式,GIF 圖片能夠展示動態(tài)的圖像效果,對于展示計(jì)算機(jī)視覺算法或結(jié)果非常有用。例如,我可以使用 GIF 圖片來展示運(yùn)動跟蹤、姿勢識別、圖像分割、目標(biāo)檢測等任務(wù)的結(jié)果,以更生動和直觀的方式向讀者展示算法的效果。
與靜態(tài)圖像相比,動態(tài)的 GIF 圖片更能吸引各位讀者的注意力,使用 GIF 圖片就可以提供更生動、有趣和引人入勝的內(nèi)容,幫助大家更好地理解和吸收相關(guān)的概念和技術(shù)。
不僅如此,通過在動態(tài)圖像中展示關(guān)鍵步驟和變化,我可以更清晰地傳達(dá)我想表達(dá)的信息。
MP4文件轉(zhuǎn)GIF圖片
安裝moviepy
正常使用pip install moviepy,但卻如下報(bào)錯。

解決方案:pip3 install moviepy -i http://pypi.douban.com/simple–trusted-host=pypi.douban.com
最后安裝成功。
import moviepy.editor as mpe
GIF = mpe.VideoFileClip("01.mp4")
print(GIF.fps)
new_clip = GIF.subclip(1, 6)
new_clip.write_gif("output.gif", fps=2)
我查到大家都說的是通過moviepy,三行就能進(jìn)行轉(zhuǎn)化,但我卻發(fā)現(xiàn)無論我怎么修改,保存的GIF圖片始終只有一幀的畫面。
如果有人知道問題所在,還望評論指正!
使用Opencv轉(zhuǎn)化為GIF圖
上面修改查詢了一點(diǎn)時間未能解決這個問題,我就手寫來實(shí)現(xiàn)MP4文件轉(zhuǎn)化為GIF圖片。
"""
author : Auorui(夏天是冰紅茶)
time : 2023-6-7
function: mp4——>GIF
"""
import cv2
import imageio
def Mp4toGif(mp4, name='result.gif', fps=10, start=None, end=None):
cap = cv2.VideoCapture(mp4)
all_images = []
frame_count = 0
while True:
ret, img = cap.read()
if ret is False:
break
if start is not None and frame_count < start:
frame_count += 1
continue
if end is not None and frame_count >= end:
break
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
all_images.append(img)
frame_count += 1
duration = int(1000 / fps) # 將幀率轉(zhuǎn)換為每幀之間的延遲時間(毫秒)
gif = imageio.mimsave(name, all_images, duration=duration)
print("轉(zhuǎn)換完成!")
# 轉(zhuǎn)換整個視頻為 GIF
Mp4toGif(mp4="04.mp4", fps=10)
# 轉(zhuǎn)換指定幀范圍的視頻為 GIF
Mp4toGif(mp4="04.mp4", fps=10, start=0, end=75)參數(shù)簡介:
- mp4:要轉(zhuǎn)換為 GIF 的 MP4 視頻文件的路徑。
- name:生成的 GIF 文件的名稱。默認(rèn)值為 “result.gif”。
- fps:生成的 GIF 的幀率(每秒播放的幀數(shù))。默認(rèn)值為 10。
- start:指定要轉(zhuǎn)換的起始幀索引。默認(rèn)值為 None,表示從視頻的第一幀開始轉(zhuǎn)換。
- end:指定要轉(zhuǎn)換的結(jié)束幀索引。默認(rèn)值為 None,表示轉(zhuǎn)換到視頻的最后一幀。
實(shí)現(xiàn)思路:
(1)使用 OpenCV 的 cv2.VideoCapture 函數(shù)打開指定的 MP4 視頻文件,并創(chuàng)建一個視頻捕獲對象 cap。
(2)創(chuàng)建變量 all_images 來存儲所有的圖像幀,創(chuàng)建變量 frame_count 來記錄當(dāng)前幀的索引。
(3)通過一個循環(huán)不斷讀取視頻的幀,使用 cap.read() 函數(shù)讀取視頻的下一幀圖像。如果讀取失?。ㄒ曨l結(jié)束),則跳出循環(huán)。
(4)根據(jù)提供的 start 和 end 參數(shù)來控制要轉(zhuǎn)換的幀范圍。如果 start 不為 None,并且當(dāng)前幀索引小于 start,則跳過該幀。如果 end 不為 None,并且當(dāng)前幀索引大于等于 end,則跳出循環(huán)。
(5)使用 cv2.cvtColor 函數(shù)將讀取的圖像幀從 BGR 格式轉(zhuǎn)換為 RGB 格式,以便后續(xù)生成 GIF 圖片時顏色顯示正確。
(6)將轉(zhuǎn)換后的圖像幀添加到 all_images 列表中。
(7)根據(jù)提供的幀率 fps 計(jì)算每幀之間的延遲時間 duration,以便生成的 GIF 圖片播放時具有指定的幀率。
(8)使用 imageio.mimsave 函數(shù)將 all_images 列表中的幀保存為 GIF 圖片。指定參數(shù) duration 為幀間延遲時間。保存的 GIF 圖片文件名由提供的 name 參數(shù)決定。
(9)在轉(zhuǎn)換完成后,輸出提示信息表示轉(zhuǎn)換過程已完成。
以上就是Python實(shí)現(xiàn)將MP4視頻轉(zhuǎn)化為GIF圖像的詳細(xì)內(nèi)容,更多關(guān)于Python視頻轉(zhuǎn)GIF的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python基于pygame實(shí)現(xiàn)飛機(jī)大作戰(zhàn)小游戲
這篇文章主要為大家詳細(xì)介紹了python基于pygame實(shí)現(xiàn)飛機(jī)大作戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11
python Popen 獲取輸出,等待運(yùn)行完成示例
今天小編就為大家分享一篇python Popen 獲取輸出,等待運(yùn)行完成示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12
python?selenium模擬點(diǎn)擊問題解決方案
這篇文章主要介紹了python?selenium模擬點(diǎn)擊問題,涉及到安裝谷歌瀏覽器和瀏覽器驅(qū)動的相關(guān)知識介紹,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
python簡單實(shí)現(xiàn)整數(shù)反轉(zhuǎn)的畫解算法
這篇文章主要介紹了python簡單實(shí)現(xiàn)整數(shù)反轉(zhuǎn)采用了一個有趣的畫解算法,通過示例的題目描述來對問題分析進(jìn)行方案的解決,有需要的朋友可以參考下2021-08-08
Python中schedule模塊關(guān)于定時任務(wù)使用方法
這篇文章主要介紹了Python中schedule模塊關(guān)于定時任務(wù)使用方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05
Python單個項(xiàng)目列表轉(zhuǎn)換為整數(shù)的實(shí)現(xiàn)
本文主要介紹了Python單個項(xiàng)目列表轉(zhuǎn)換為整數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
一文詳解Python中的行為驗(yàn)證碼驗(yàn)證功能
最近在開發(fā)行為驗(yàn)證碼,經(jīng)常觸及到關(guān)于驗(yàn)證類型的相關(guān)內(nèi)容。但使用起來不太熟練,所以本文就來總結(jié)一下對行為驗(yàn)證碼驗(yàn)證類型的理解2023-03-03

