python实现视频转GIF动图(无水印,包含代码详解和.exe执行文件)

news2024/9/20 18:32:00

        该代码提供了一个简单的界面,允许用户将视频转换为GIF动画,并且可以自定义采样率、GIF帧率和输出大小。修改后的代码将视频帧的大小调整为固定的尺寸,并在生成GIF动画时保持这个尺寸。

一、核心代码实现

     核心代码如下:

import cv2
import imageio
# 设置视频文件名和输出GIF文件名
videoName = '../video/demo.mov'
outName = "../video/" + videoName[:-3] + 'gif'

# 设置视频帧的缩放比例,采样率,和GIF动画的帧率
scale = 0.25
skipRate = 30
gifFps = 10
# 打开视频文件并获取视频的参数
cap = cv2.VideoCapture(videoName)
videoWidth = cap.get(3)
videoHeight = cap.get(4)
videoFps = cap.get(5)
frameTotal = cap.get(7)
frameForOutput = frameTotal / skipRate
# 创建GIF动画并逐帧处理
with imageio.get_writer(outName, duration=1/gifFps, mode='I') as writer:
    framerCounter = 0
    while True:
        ret, frame = cap.read()
        if not ret:
            print("finished")
            break
        # 增加帧计数器
        framerCounter += 1
        # 按照采样率,只处理每隔skipRate帧的视频帧
        if framerCounter % 10 == 0:
            # 对视频帧进行缩放
            frame = cv2.resize(frame, (0, 0), fx=scale, fy=scale)
            # 在窗口中显示处理后的视频帧
            cv2.imshow('frame', frame)
            # 将视频帧从BGR颜色空间转换为RGB颜色空间
            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            # 将处理后的视频帧添加到GIF动画中
            writer.append_data(frame)
            # 打印当前处理进度(ETA)百分比
            print("ETA-", round((framerCounter / frameTotal) * 100, 2), "%")
        else:
            # 跳过不需要处理的帧
            continue
        # 如果按下键盘上的“q”键,则停止处理视频
        if cv2.waitKey(1) == ord('q'):
            break
# 释放视频文件
cap.release()

        实现的代码逻辑如下:

1.导入必要的库:cv2(OpenCV):一个用于图像和视频处理的流行计算机视觉库。
imageio:一个用于读取和写入各种图像数据(包括视频格式)的库。
2.定义视频相关参数:设置视频文件名videoName和输出GIF文件名outName。定义视频帧的缩放比例scale,默认为0.25(即将视频帧的大小缩小为原来的1/4)。定义采样率skipRate,表示每隔多少帧采样一次视频帧,默认为30。定义GIF动画的帧率gifFps,表示输出的GIF动画每秒显示多少帧,默认为10。
3.打开视频文件并获取视频的参数:使用OpenCV的cv2.VideoCapture()打开视频文件,并获取视频的宽度、高度、帧率以及总帧数。
4.创建GIF动画并逐帧处理:使用imageio.get_writer()创建GIF动画的输出文件,并设置帧持续时间为1/GIF帧率,以确保动画的播放速度。

二、实现界面和运行程序

 可以调整按钮进行调整转化GIF动画的质量,展示如下:

         转化后的GIF图像存储到原来上传文件的位置,可自行进行查看。

        该代码GUI界面转化为了.exe程序,大家可以自己下载下来解压使用。解压后.exe程序存储在了./dist/mian1/文件下找到mian1.exe程序即可。

完整代码下载链接:包含.exe应用程序

CSDN

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据挖掘实战:基于KMeans算法对超市客户进行聚类分群(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

3 分钟全面了解 API Moke

一、什么是密闭服务? Google 测试团队的博客中,有一篇博文介绍的正是《Hermetic Servers(密闭服务)》。如下图所示,当被测试系统依赖了 Another Backend,这种依赖即产生了 “不可控” 因素。 怎么定义密闭…

ECharts:一款超实用的基于JavaScript的数据可视化图表库

一、ECharts的简单介绍 ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。ECharts最初由百度团队开源,并于2018年初捐赠给Apache基金会,成为ASF孵化级…

MapBox 做聚合图点位聚合效果实现教程

最近收到一个需求,要对 5000的点位进行展示。直接展示的话满屏幕都是点,效果太丑,于是想到了聚合,聚合有很多种方案。首先你可以手动的些代码来计算某个范围内的点的数量然后再把聚合的结果展示在这个范围的某个位置。这针对于简单…

使用java.io.BufferedReader的readLine()函数读入一行文本

说明 可以使用java.io.BufferedReader的readLine()函数读入一行文本,返回的字符串不包含回车和换行字符。 https://docs.oracle.com/en/java/javase/19/docs/api/java.base/java/io/BufferedReader.html#readLine() 代码示例 读取控制台的输入 使用下面的代码来验…

TSINGSEE青犀视频汇聚平台EasyCVR多种视频流播放协议介绍

众所周知,TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入,包括主流标准协议GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。今天我们来说一说,EasyCVR平台支持分…

年度最强大模型顶会来袭!喊话中国数百万AI开发者,速来!

能硬核 生态共创”“产业共振 智能涌现”“产教融合 人才共育”“携手飞桨 创新加速”2023年全球AI浪潮迭起,大语言模型热度空前,生成式人工智能为千行百业高质量发展带来更多想象空间。作为前沿科技风向标、汇聚全球开发者的顶级盛会,WAVE S…

Java on VS Code 7 月更新|反编译器支持升级、代码补全性能提升、AI 相关更新及更多

作者:Nick Zhu 排版:Alan Wang 大家好,欢迎来到 Visual Studio Code for Java 的7月更新!在这篇博客中,我们将为您提供有关反编译器支持的重要更新。此外,我们将分享更多最近代码补全性能提升的进展&#x…

B079-项目实战--支付模块 定时任务 项目总结

目录 概述示例jar包配置类任务详情 项目应用封装的工具类QuartzUtils封装IQuartzSrvice和QuartzServiceImpl封装参数QuartzJobInfo编写任务逻辑MainJob调用第三方支付前添加定时任务异步回调后移除定时任务 订单支付整体流程 概述 优势:Tmer不支持持久化&#xff0…

亚马逊水基灭火器UL8测试报告ISO17025实验室办理

在跨境电商平台上销售的境外电商,在美国市场中需要提供相关的安全规范报告。其中,美国相关部门要求,如果商家未能提交UL(Underwriters Laboratories)标准的检测报告,将会被责令停止销售。而为了在亚马逊、T…

【论文精读】用于多文档摘要生成的层次Transformer方法

前言 论文分享 来自2019ACL的多文档摘要生成方法论文,作者来自英国爱丁堡大学,引用数310 Hierarchical Transformers for Multi-Document Summarization 代码地址hiersumm 多文档摘要抽取的难点在于没有合适的数据集,同时过长的文档文本也导…

Makefile模板和工程模板(消息队列和共享内存)的使用

一、 Makefile模板 #指定生成的文件名 OJB_OUT test#指定每一个c文件对应的.o文件 OBJS a.o b.o main.o#指定编译器 CC gcc#指定需要的库 ULDFLAGS ########################################### #以下的内容不需要修改 ########################################### all:…

行业追踪,2023-08-01

自动复盘 2023-08-01 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

leetcode-143-重排链表

题意描述: 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能只是单纯的改变节点内部的值,而是需要…

cmake+pybind11打包c++库成python wheel安装包

目录 写在前面准备1、pybind11获取源码编译安装 2、conda demo官方源码修改CMakeLists.txt编译生成安装测试 参考完 写在前面 1、本文内容 有时候我们需要用c代码,供python调用,本文提供将c库封装成python接口的方法,并将库打包成可通过pip安…

Apikit 自学日记:API 异常监控-创建 API 监控

如何在apikit中,创建 API 监控呢? 创建并开启监控API 一、手动创建监控API Eolink API 网络监控平台支持从 Eolink API Management(API管理产品)中导入API信息,或者手动创建监控API。 进入API监控页面,点击…

23款奔驰S450 4MATIC升级原厂流星雨智能数字大灯,让智能照亮您前行的路

凭借智能数字大灯 (DIGITAL LIGHT),您可体验根据其他道路使用者和周围环境进行优化调节的理想照明条件。这款包含130万像素模块大灯,进一步扩展了几何多光束 LED 大灯的功能。其高分辨率的照明可有针对性地点亮各个区域。解锁车辆时,大灯将通…

快速制作美容行业预约小程序

随着科技的不断进步,移动互联网的快速发展,小程序成为了很多行业迅速发展的利器。对于美容行业来说,一款美容预约小程序不仅可以方便用户进行预约,还可以提升美容店铺的服务质量和管理效率。下面,我们来介绍一下如何快…

23 设计模式(详细介绍附DEMO)

设计模式在Java中的应用与实现 🚀🚀🚀1.创建型模式1. 工厂方法模式(Factory Pattern)2.抽象工厂模式(Abstract Factory Pattern)3. 单例模式(Singleton Pattern)4.原型模…

rfid资产盘点管理系统软件

很多企业开始规划固定资产的总结,或者现在开始总结资产。面对众多不同种类的固定资产,总结已经成为一项工程量大、耗时长的任务。采用轻松的RFID固定资产管理系统后,可以大大提高这种总结工作的效率,获得比过去更清晰的资产清单和…