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

白灵片价格 https://mjbk.familydoctor.com.cn/bjbdfyy_zx/58473/

一、引言

老猿之所以学习和研究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:多视频合成顺序播放或同屏播放的视频文件》的公用框架。

主界面如下:

四、代码实现

4.1、主界面类及构造方法

classmainWin(QtWidgets.QMainWindow,ui_mainWin.Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)self.initValues()self.initSignalAndSlots()self.initPublicFrame().2、槽和信号连接方法initSignalAndSlots

definitSignalAndSlots(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).3、视频转换方法

defconvertByMoviepy(self,srcFile,destFile,toGif):destFileName,destFileType=destFile.rsplit(.,1)iftoGif:destFileType=.gifelse:destFileType=.jpgdestFile=destFileName+destFileTypeprint(convertUseMoviepystart:,srcFile,--,destFile)try:start=int(self.startPos.text().strip(\r\n\t))end=int(self.endPos.text().strip(\r\n\t))vfps=int(self.fps.text())exceptExceptionase:print(输入了非法的数字字符,不能转换:,e)returntry:ifend:ifstartend:print(指定视频开始位置大于结束位置,不能转换)returncache=mpe.VideoFileClip(srcFile).subclip(start,end)else:cache=mpe.VideoFileClip(srcFile)exceptExceptionase:info=f视频文件无法读取,可能是因为格式不支持:{e}print(info)print(任务无法执行!)returnifvfps1orvfps30:vfps=2ifnottoGif:imgCount=len(str(vfps*(end-start+1)))+1format=f_%0{imgCount}ddestFileFormat=destFileName+format+destFileTypefileFormat=_+X*imgCountdestFileFormatName=destFileName+fileFormat+destFileTypetry:iftoGif:cache.write_gif(destFile,fps=vfps)else:cache.write_images_sequence(destFileFormat,vfps)exceptExceptionase:iftoGif:print(f视频{srcFile}转换gif失败:,e)else:print(f视频{srcFile}转换图片失败:,e)else:iftoGif:print(f视频{srcFile}转换gif成功,结果保存在{destFile}中)else:print(f视频{srcFile}转换图片成功,结果保存在{destFileFormatName}中)cache.close()五、运行界面

5.1、初始主界面

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

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

六、打包成windows执行文件

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

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

pyinstallervideo2Gif.py-w-pF:\coffeDog\loadApp2-pF:\coffeDog\captureStdout2log.txt注意:moviepy的包必须使用《关于moviepy打包报错AttributeError:moduleaudio/video.fx.allhasnoattributefadein、crop文章的纠错和抄袭》修改了的文件,否则打包执行会报错。

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

链接:



转载请注明地址:http://www.chinajianan.net/jbzd/13864.html
  • 上一篇文章:
  • 下一篇文章: