Python實現(xiàn)將MP4視頻轉(zhuǎn)化為GIF圖像
前言
GIF圖片對于我來說是一個很好的展示方式,GIF 圖片能夠展示動態(tài)的圖像效果,對于展示計算機(jī)視覺算法或結(jié)果非常有用。例如,我可以使用 GIF 圖片來展示運動跟蹤、姿勢識別、圖像分割、目標(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,但卻如下報錯。
解決方案: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圖
上面修改查詢了一點時間未能解決這個問題,我就手寫來實現(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)換到視頻的最后一幀。
實現(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 計算每幀之間的延遲時間 duration,以便生成的 GIF 圖片播放時具有指定的幀率。
(8)使用 imageio.mimsave 函數(shù)將 all_images 列表中的幀保存為 GIF 圖片。指定參數(shù) duration 為幀間延遲時間。保存的 GIF 圖片文件名由提供的 name 參數(shù)決定。
(9)在轉(zhuǎn)換完成后,輸出提示信息表示轉(zhuǎn)換過程已完成。
以上就是Python實現(xiàn)將MP4視頻轉(zhuǎn)化為GIF圖像的詳細(xì)內(nèi)容,更多關(guān)于Python視頻轉(zhuǎn)GIF的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python基于pygame實現(xiàn)飛機(jī)大作戰(zhàn)小游戲
這篇文章主要為大家詳細(xì)介紹了python基于pygame實現(xiàn)飛機(jī)大作戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11python簡單實現(xiàn)整數(shù)反轉(zhuǎn)的畫解算法
這篇文章主要介紹了python簡單實現(xiàn)整數(shù)反轉(zhuǎn)采用了一個有趣的畫解算法,通過示例的題目描述來對問題分析進(jìn)行方案的解決,有需要的朋友可以參考下2021-08-08Python中schedule模塊關(guān)于定時任務(wù)使用方法
這篇文章主要介紹了Python中schedule模塊關(guān)于定時任務(wù)使用方法,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05Python單個項目列表轉(zhuǎn)換為整數(shù)的實現(xiàn)
本文主要介紹了Python單個項目列表轉(zhuǎn)換為整數(shù)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02