gif提取 python_视频转gif动画或jpg图片的工具开发案例

一、引言

老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完GIF后都会在动画中打上对应工具的显著广告或Logo,根本没法将转换后的动画发布。如是想到了万能的Python,就找到了moviepy,没费多少时间就搞定了,因此萌发了学习和研究Moviepy的兴趣。本文利用前面介绍的知识来开发一个windows下图形化的视频转GIF或图片的工具。

二、背景知识介绍

1、视频转gif或图片会用到《moviepy音视频剪辑:视频剪辑基类VideoClip的属性及方法详解》、《moviepy音视频剪辑:视频剪辑基类VideoClip详解》介绍的write_images_sequence和write_gif方法,具体内容在此就不赘述了;
2、图形化工具开发会用到专栏《使用PyQt开发图形界面Python应用》或《PyQt入门知识》的知识;
3、打包生成exe会用到《PyQt(Python+Qt)学习随笔:windows下使用pyinstaller将PyQt文件打包成exe可执行文件》介绍的方法进行打包;
4、程序的框架与《PyQt+moviepy音视频剪辑实战1:多视频合成顺序播放或同屏播放的视频文件》、《PyQt+moviepy音视频剪辑实战2:实现一个剪裁视频文件精华内容留存工具》或《PyQt+moviepy音视频剪辑实战1:多个音视频合成顺序播放或同屏播放的视频文件实现详解》、《PyQt+moviepy音视频剪辑实战2:一个剪裁视频文件精华内容留存工具的实现》相同。

三、图形界面设计

本程序的界面框架除了主界面之外的部分都是复用《PyQt+moviepy音视频剪辑实战1:多个音视频合成顺序播放或同屏播放的视频文件实现详解》、《PyQt+moviepy音视频剪辑实战1:多视频合成顺序播放或同屏播放的视频文件》的公用框架。

主界面如下:

2809c1b34aec85dad4d9de762a91ff06.png

四、代码实现

4.1、主界面类及构造方法

class mainWin(QtWidgets.QMainWindow,ui_mainWin.Ui_MainWindow):    def __init__(self):        super().__init__()        self.setupUi(self)        self.initValues()        self.initSignalAndSlots()        self.initPublicFrame()123456789

4.2、槽和信号连接方法initSignalAndSlots

      def initSignalAndSlots(self):        self.btn_choiceSrc.clicked.connect(self.chooseFile)        self.videoFile.textChanged['QString'].connect(self.fileNameInputed)        self.btn_choiceDest.clicked.connect(self.chooseFile)        self.action2Gif.triggered.connect(self.convert)        self.action2Img.triggered.connect(self.convert)1234567

4.3、视频转换方法

    def convertByMoviepy(self,srcFile,destFile,toGif):        destFileName,destFileType = destFile.rsplit('.',1)        if toGif:            destFileType = '.gif'        else:            destFileType = '.jpg'        destFile = destFileName+destFileType        print("convertUseMoviepy start:",srcFile,'-->',destFile)        try:            start = int(self.startPos.text().strip(' '))            end = int(self.endPos.text().strip(' '))            vfps = int(self.fps.text())        except Exception as e:            print("输入了非法的数字字符,不能转换:",e)            return        try:            if  end:                if start>end:                    print("指定视频开始位置大于结束位置,不能转换")                    return                cache = mpe.VideoFileClip(srcFile).subclip(start, end)            else:cache = mpe.VideoFileClip(srcFile)        except Exception as e:            info = f"视频文件无法读取,可能是因为格式不支持:{e}"            print(info)            print("任务无法执行!")            return        if vfps<1 or vfps>30:vfps = 2        if not toGif:            imgCount = len(str(vfps*(end-start+1)))+1            format = f"_%0{imgCount}d"            destFileFormat = destFileName +format+ destFileType            fileFormat =  '_'+'X'*imgCount            destFileFormatName = destFileName +fileFormat+ destFileType        try:             if toGif:                 cache.write_gif(destFile,fps=vfps)             else:                 cache.write_images_sequence(destFileFormat,vfps)        except Exception as e:            if toGif:                print(f"视频{srcFile}转换gif失败:", e)            else:                print(f"视频{srcFile}转换图片失败:", e)        else:            if toGif:                print(f"视频{srcFile}转换gif成功,结果保存在{destFile}中")            else:                print(f"视频{srcFile}转换图片成功,结果保存在{destFileFormatName}中")        cache.close()

五、运行界面

5.1、初始主界面

a8ac858c0804020e34ef57a53d1b404d.png

5.2、进行视频转换的运行过程界面

d1f882bb6b1a3f2e1f48f89985907437.png

这是从F:videozbl1.mp4视频转成一系列图片输出,每秒取一帧图片保存,每个图片的名字是输出文件名加序号再加后缀的形式,如zbl1_09.jpg,第一张序号为0,即zbl1_00.jpg,序号的长度根据生成图片的视频需要生成的文件数来决定,超过100个就是3位、超过1000个就是4位…。

六、打包成windows执行文件

使用《PyQt(Python+Qt)学习随笔:windows下使用pyinstaller将PyQt文件打包成exe可执行文件》介绍的方法进行打包。

老猿的工程包含了两个公共框架目录,因此打包使用如下命令:

pyinstaller video2Gif.py  -w  -p F:coffeDogloadApp2 -p F:coffeDogcaptureStdout2>log.txt

注意:moviepy的包必须使用《关于moviepy打包报错AttributeError: module audio/video.fx.all has no attribute fadein、crop文章的纠错和抄袭》修改了的文件,否则打包执行会报错。

在win7、win10上可运行的可执行程序包已经上传到百度云,大家可以下载下来长期免费使用。具体下载地址为百度网盘。

链接:https://pan.baidu.com/s/1UNaA2UqQBoxx-v8rCIPDhA

提取码:yh2d

选择该链接下的:视频转图片和动画工具V2.0.rar 即可,下载后解压到指定目录后,选择exe文件直接执行即可。不过使用该工具会自动打开老猿的博客请大家点赞,敬请大家支持,谢谢。

注意:

百度云上分享的《咖啡狗免费工具软件共享空间》下的不同软件安装时必须解压到不同目录,如果解压到同一目录可能有冲突导致不能正常运行,
但解压后遵循如下要求可以将其聚合到同一个目录:

  1. 放置到同一目录的不同软件的版本必须相同,版本为压缩文件名中VX.X标注;
  2. 聚合拷贝时除拷贝执行文件外,还有resource目录必须拷贝,如果resource目录下有相同文件名可以覆盖;
  3. 聚合拷贝exe文件和resource目录及其下文件到其他已解压工具目录后,源目录可以删除。

更多moviepy的介绍请参考《PyQt+moviepy音视频剪辑实战文章目录》或《moviepy音视频开发专栏》。

更多内容请大家到CSDN官网“老猿Python”博客或“老猿Python”微信公众号上查看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值