2

一个用Python将视频变为表情包的工具 - yyy114

 4 months ago
source link: https://www.cnblogs.com/blogray/p/18168882
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

这是一个将视频转变为表情包的工具,现实生活中当我们看到一段搞笑的视频,我们可以将这段视频喂给这段程序,生成gif表情包,这样就可以用来舍友斗图了

1、一些限制

1、这个程序不能转化超过15秒以上的视频,因为占用的内存较高,会被终端杀死(除非你的计算机性能很好,也许1分钟的短视频都可以),为了整个程序的鲁棒性,我就调成了15秒

2、转化来的gif噪点画质有显著的下降,GIF 格式有颜色限制(通常为 256 色),可能不适合所有类型的图像内容,所以你可能会整出以下的阴间动图

3291804-20240430232216687-1527891177.gif
 1 import cv2#导入库
 2 import sys
 3 import imageio
 4 
 5 def video_turn_gif(add):
 6     cap  = cv2.VideoCapture(add)#读取视频
 7 
 8     video_frames = []#存储帧数据
 9 
10     total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))#总共帧数
11     fps = cap.get(cv2.CAP_PROP_FPS)#帧率
12     time_total = total_frames/fps#总共时间
13 
14     if time_total <= 10:
15         while True:
16             ret, frame = cap.read()
17             if ret:
18                 video_frames.append(frame)#保存视频帧数据
19             else:
20                 cap.release()#重置
21                 imageio.mimsave("test.gif", video_frames, duration=0.005)#将一帧一帧的图像并入gif,这是整个程序的点睛之笔
22                 print("finish!")
23                 sys.exit(1)
24     else:
25         print("太长了,老子不干咯!")
26 
27 if __name__ == "__main__":
28     add_video = input("video_add......")#获取视频地址
29     video_turn_gif(add_video)

我的思路是,通过cv2将视频分为一帧一帧的图像,将图像信息存在一个列表里,然后用imageio库将这一帧一帧的图像合成一个gif文件,保存再结束程序。 cap.get(cv2.CAP_PROP_FRAME_COUNT) 用来获取总共的帧数, cap.get(cv2.CAP_PROP_FPS) 用来获取视频帧率,我们知道,视频时长=帧数/帧率,这样我们就可以得到时间了,进而判断视频是否超过15秒。 ret, frame = cap.read() 获取视频的帧数,ret是一个布尔值,代表着这一帧是否获取,获取则是True,没获取就是False,frame则是这一帧的图像信息。mimsave函数专门保存GIF或其他动画格式的图像,其第一项为存储的文件地址,第二项为一个列表,存入每一帧图像信息,duration=0.005设置GIF中每帧的持续时间为0.005s,也就是5ms

这是成果的动图:

3291804-20240430232410276-367955223.gif

 也可以看到明显的噪点

所以大家可以通过录屏、爬虫等方式,将原视频进行剪辑,投给这个程序,得到一个搞笑的表情包。去斗图吧!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK