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


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

    1、一些限制

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

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

    2、正片

    复制代码
     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

    3、实践

    这是成果的动图:

     也可以看到明显的噪点

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

  • 相关阅读:
    3.Android应用资源:处理配置变更
    08_ue4进阶_开始结束暂停菜单等ui
    【华为OD机试真题 JS】字符串比较
    java 企业工程管理系统软件源码 自主研发 工程行业适用
    2023年中国光子嫩肤行业市场规模及市场格局分析[图]
    2023年09月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
    Windows原理深入学习系列-Windows内核提权
    Unity 获取桌面路径的方法
    【线性代数】三、特征值和特征向量
    【C++】手撕string(string的模拟实现)
  • 原文地址:https://www.cnblogs.com/blogray/p/18168882