☞ ░ 前往老猿Python博文目录

一、引言

老猿之所以学习和研究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、主界面类及构造方法

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

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)

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(' \r\n\t'))
end = int(self.endPos.text().strip(' \r\n\t'))
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、初始主界面

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

这是从F:\video\zbl1.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:\coffeDog\loadApp2 -p F:\coffeDog\captureStdout2>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音视频开发专栏》。

关于老猿的付费专栏

老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏加起来只需要19.9元,都适合有一定Python基础但无相关专利知识的小白读者学习。这2个收费专栏都有对应免费专栏,只是收费专栏的文章介绍更具体、内容更深入、案例更多。

收费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》,本文收费专栏对应文章为《Moviepy音视频开发:开发视频转gif动画或jpg图片exe图形化工具的案例》。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

跟老猿学Python、学Moviepy!

☞ ░ 前往老猿Python博文目录

Moviepy音视频开发:视频转gif动画或jpg图片exe图形化工具开发案例的更多相关文章

  1. Moviepy音视频开发:开发视频转gif动画或jpg图片exe图形化工具的案例

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 老猿之所以学习和研究Moviepy的使用,是因为需要一个将视频转成动画的工具,当时在网上到处搜索查找免费使用工具,结果找了很多自称免费的工具,但转完 ...

  2. Python音视频开发:消除抖音短视频Logo的图形化工具实现

    ☞ ░ 前往老猿Python博文目录 ░ 一.引言 在<Python音视频开发:消除抖音短视频Logo和去电视台标的实现详解>节介绍了怎么通过Python+Moviepy+OpenCV实现 ...

  3. [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit

    [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit 读前必备: 接上篇: 分布式版本控制系统Git——使用GitS ...

  4. 如何使用IDEA开发工具中右键中的Git图形化工具

    首先,你的项目一定是git服务器上面down下来的,下面来演示如何使用IntelliJ IDEA 开发中在鼠标右键中提供的一个非常方便的图形化Git管理工具: 这里使用的IDEA开发工具的版本是 In ...

  5. Windows下搭建远程Linux主机的图形化本地开发环境

    在实际开发中,项目的类生产.生产环境一般都是选择Linux为服务器进行部署. 相应的,我们的开发最好也在Linux环境下进行,否则容易引发其他的问题,比如不同环境下功能不一致.库依赖差异等. 但是Li ...

  6. wxPYTHON图形化软件开发(一)---LOMO工具箱

    最近学了wxPYTHON,这次就做了一个工具箱软件练手,软件主要是包含各种小工具,目前想到的有密码管理器,日记本,记账本,今天还看到一个网页浏览器,也可能加进来.目前实现的是密码管理器 软件GUI部分 ...

  7. PyQt+moviepy音视频剪辑实战文章目录

    ☞ ░ 前往老猿Python博文目录 ░ 本专栏为moviepy音视频剪辑合成相关内容介绍的免费专栏,对应的收费专栏为<moviepy音视频开发专栏>. 一.moviepy基础能力系统介绍 ...

  8. moviepy音视频开发:使用credits1给视频加片头片尾字幕

    ☞ ░ 前往老猿Python博文目录 ░ 一.概述 在<moviepy音视频剪辑:视频基类VideoClip子类DataVideoClip.UpdatedVideoClip.ImageClip. ...

  9. moviepy音视频开发:音频剪辑基类AudioClip

    ☞ ░ 前往老猿Python博文目录 ░ 一.背景知识介绍 1.1.声音三要素: 音调:人耳对声音高低的感觉称为音调(也叫音频).音调主要与声波的频率有关.声波的频率高,则音调也高. 音量:也就是响度 ...

随机推荐

  1. Java_多线程实现

    一个类两个接口 Tread类: 使用时继承Thread类 Runnable接口: 使用时实现Runnable接口 Callable接口: 使用时实现Callable接口 由于类只能单继承, 接口可以多 ...

  2. 带货直播源码开发采用MySQL有什么优越性

    MySQL是世界上最流行的开源关系数据库,带货直播源码使用MySQL,可实现分钟级别的数据库部署和弹性扩展,不仅经济实惠,而且稳定可靠,易于运维.云数据库 MySQL 提供备份恢复.监控.容灾.快速扩 ...

  3. 剑指Offer-Python(6-10)

    6.旋转数组的最小数字 class Solution: def minNumberInRotateArray(self, rotateArray): l = len(rotateArray) if l ...

  4. C++ 基础 6:模板

    1 函数模板 泛型(Generic Programming),即是指具有在多种数据类型上皆可操作的含意. 泛型编程 的代表作品 STL 是一种高效.泛型.可交互操作的软件组件. 泛型编程最初诞生于 C ...

  5. 解决无法访问 Github

    可以正常使用Google,但无法打开Github. 查阅了一些资料,发现需要在hosts文件中添加映射. 在hosts文件中加入两行 140.82.113.4 github.com 140.82.11 ...

  6. ctf堆叠注入总结(持续更新)

    第一种 1';USE db_name;SET @sql=CONCAT('sql contents');PREPARE stmt_name FROM @sql;EXECUTE stmt_name; 第二 ...

  7. 1. 安装虚拟机,Hadoop和Hive

    由于想自学下Hive,所以前段时间在个人电脑上安装了虚拟机,并安装上Hadoop和Hive.接下我就分享下我如何安装Hive的.步骤如下: 安装虚拟机 安装Hadoop 安装Java 安装Hive 我 ...

  8. 前端动画框架GSAP框架随笔

    gsap是目前非常流行的前端动画框架,可以非常轻松构造出复杂的动画效果,这里仅对我实际使用中的一些例子进行总结 官网 示例 文章种所使用代码的在线示例 基础用法 // 声明一个滚动控制器 let ct ...

  9. 《.NET 5.0 背锅案》第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore

    在第1集的剧情中,主角是".NET 5.0 正式版 docker 镜像",它有幸入选第1位嫌疑对象,不是因为它的嫌疑最大,而是它的验证方法最简单,只需要再进行一次发布即可.我们在周 ...

  10. nice-ni 耗光cpu

    可以看到 低优先级的进程 暂用了比较高的CPU时间. top 命令中可以看到 NI 为19, 其优先级最低 但是使用cpu 最高. 说明这个进程需要经行优化了, 通过gdb 发现此进程一直都在处理报文 ...