视频转GIF

视频转GIF

以下是一个使用 Python 将视频转换为 GIF 的脚本,使用了 imageioopencv-python 库:

import cv2
import imageio
import numpy as np
"""将视频转换为GIF图参数:video_path -- 输入视频的路径gif_path -- 输出GIF的路径fps -- GIF的帧率,默认为15width -- 输出GIF的宽度,默认为720
"""
def video_to_gif(video_path, gif_path, fps=10, width=128):#    打开视频文件cap = cv2.VideoCapture(video_path)if not cap.isOpened():print(f"无法打开视频文件:{video_path}")return# 获取视频的原始宽度和高度original_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))original_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 计算新的高度以保持高宽比height = int(original_height * width / original_width)# 创建一个列表来存储GIF帧frames = []while True:ret, frame = cap.read()if not ret:break# 调整帧大小resized_frame = cv2.resize(frame, (width, height))# 转换为RGB格式(OpenCV使用BGR)rgb_frame = cv2.cvtColor(resized_frame, cv2.COLOR_BGR2RGB)# 添加到帧列表frames.append(rgb_frame)# 释放视频资源cap.release()# 保存为GIFimageio.mimsave(gif_path, frames, 'GIF', fps=fps)print"G(fIF已成功保存到:{gif_path}")if __name__ == "__main__":# 视频路径和输出GIF路径video_path = 'input.mp4'  # 输入你的视频文件路径gif_path = 'output.gif'   # 输出的GIF文件路径# 转换为GIFvideo_to_gif(video_path, gif_path)

这个脚本的工作流程如下:

  1. 使用 cv2.VideoCapture 打开视频文件
  2. 获取视频的原始尺寸,并根据宽度目标计算新的高度以保持宽高比
  3. 循环读取视频的每一帧
  4. 对每一帧进行调整大小和颜色格式转换
  5. 将所有处理后的帧存储在一个列表中
  6. 使用 imageio.mimsave 将帧列表保存为GIF文件

使用方法:

  1. 安装必要的库:

    pip install opencv-python imageio numpy
    
  2. 修改代码中的 video_pathgif_path 变量为你自己的输入和输出文件路径

你可以调整以下参数来自定义输出:

  • fps: 设置GIF的帧率(默认为15)
  • width: 设置输出GIF的宽度(默认为128)
    你还可以通过修改 frames.append() 前的代码来添加额外的处理,比如添加文字、调整对比度等

注意:转换后的GIF文件可能会比较大,如果原视频很长或者分辨率很高,你可能需要调整这些参数来控制输出文件的大小。

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

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

相关文章

计算机网络:详解TCP协议(四次握手三次挥手)

目录 1.Tcp协议介绍 1.1 Tcp协议层级 1.2 TCP协议的格式 2. 确认应答机制 2.1 确认应答 2.2 序号字段 2.3 捎带应答 3. 流量控制 4. 三次握手 四次挥手 4.1 认识标志位 4.2 简单认识 4.3 三次挥手 4.4 四次挥手 1.Tcp协议介绍 1.1 Tcp协议层级 计算机网络&#x…

小程序 IView WeappUI组件库(简单增删改查)

IView Weapp 微信小程序UI组件库:https://weapp.iviewui.com/components/card IView Weapp.png 快速上手搭建 快速上手.png iView Weapp 的代码 将源代码下载下来,然后将dict放到自己的项目中去。 iView Weapp 的代码.png 小程序中添加iView Weapp 将di…

用java实现一个简单的sql select 解析器,无需第三方依赖,完全从0开始

以下是一个简单的 SQL SELECT 解析器的 Java 实现,支持单表查询和基本条件过滤。代码包含词法分析和语法分析模块,并支持以下语法: SELECT column1, column2 FROM table WHERE column3 5 完整代码 1. Token 类型定义 (TokenType.java) pu…

阿里云 CentOS YUM 源配置指南

阿里云 CentOS YUM 源配置指南 在使用 CentOS 7 时,由于 CentOS 官方源停止维护等原因,yum install 命令可能会报错 “Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64”。以下是通过更换阿里云源解决该问题的详细步骤。 一、备份原有配…

Learning vtkjs之ThresholdPoints

过滤器 阈值过滤器 介绍 vtkThresholdPoints - 提取满足阈值条件的点 vtkThresholdPoints 是一个过滤器,它从数据集中提取满足阈值条件的点。该条件可以采用三种形式: 1)大于特定值; 2) 小于特定值; 3) 在特定值之间…

记录ruoyi-flowable-plus第一次运行流程报错

记录ruoyi-flowable-plus第一次运行流程报错 错误步骤 1.启动ruoyi-flowable-plus 正常登录后,打开流程分类然后点击新增按钮,新增了一个分类。增加成功后, 再点击流程分类,报错。 错误提示 org.springframework.cglib.core.C…

Java中的stream流介绍与使用

一、Stream 的基础概念 定义与特性 Stream 是单向数据流,对集合或数组进行高效处理,不存储数据,而是通过操作链生成新 Stream。不可变性:原始数据源不被修改,所有操作均返回新 Stream。延迟执行:中间操作&a…

OCR身份证识别(正反面)_个人证照OCR识别_开放API接口使用指南

一、接口简介 在数字化时代,快速准确地提取身份证信息变得尤为重要。**万维易源提供的“身份证OCR识别”API接口,能够快速提取二代居民身份证正反面的所有字段信息,包括姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限等。…

25年新版潮乎盲盒系统源码 盲盒商城系统前端分享

盲盒系统市场的前景一直都很不错,最近很多问我有没有盲盒源码的客户,下面给大家分享一个新版潮乎盲盒源码! 这款盲盒源码系统 前端Uniapp 后端使用了Laravel框架进行开发。Laravel是一个流行的PHP框架,具有强大的功能和易于使用的…

Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)

Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型) 目录 Transformer四模型回归打包(内含NRBO-Transformer-GRU、Transformer-GRU、Transformer、GRU模型)预测效果基本介绍程序设计参…

Axure疑难杂症:利用中继器制作三级下拉菜单(逻辑判断进阶)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:三级下拉菜单 主要内容:条件筛选时的逻辑判断思维,中继器使用 应用场景:复合条件下的下拉列表制作 案例展…

Nginx 核心功能之正反代理

目录 一、Nginx 二、正向代理 三、反向代理 四、Nginx 缓存 1. 缓存功能的核心原理和缓存类型 2. 代理缓存功能设置 五、Nginx rewrite和正则 (1)Nginx 正则 (2)nginx location (3)Rewrite &…

ssh连接云服务器记录

文章目录 1. 背景2. ssh连接2.1 win 下通过终端工具进行连接2.2 Linux下通过ssh指令连接2.3 ssh使用publickey来连接 ssh连接云服务器记录 1. 背景 最近开始接触docker技术、mysql技术,加上本人工作基本都在Linux下进行,因此需要一套Linux环境进行练习。…

软考-软件设计师中级备考 12、软件工程

一、软件工程概述 定义:软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量软件的学科。它涉及到软件的开发、测试、维护、管理等多个方面,旨在运用一系列科学方法和技术手段,提高软件的质量和开发效率,降低软件开…

【多次弹出“获取打开此tobiieyetracking链接的应用”的窗口】解决办法

使用联想R9000P突然出现“获取打开此tobiieyetracking链接的应用”的窗口,每隔几分钟就弹一次,特别恶心人,解决办法: 找到【此电脑】,鼠标右键【管理】;选择【服务】,如下所示,找到…

项目选择的三个核心因素:市场前景、竞争优势和成本控制

能保持持续增长和赚钱的项目就是好项目。 每个创业者创业之初,遇到的第一个难题就是选择做什么项目? 俗话说:方向不对,努力白费。 选错项目,意味着你所有的付出都是打水漂。 能做的项目那么多,在没有价值…

裸机 Kubernetes 集群负载均衡器:MetalLB 深度解析与实战指南

一、引言 在云原生架构中,Kubernetes 默认的负载均衡能力依赖于云厂商(如 AWS ELB、GCP LB),但在裸机或本地数据中心环境中,这一功能缺失导致 LoadBalancer 类型的 Service 始终处于 Pending 状态。此时,M…

2025年- H20-Lc128-240. 搜索二维矩阵 II(矩阵)---java版

1.题目描述 2.思路 遍历矩阵,然后如果遇到矩阵中的值正好等于target,输出true。否则,输出false。 3.代码 public class H240 {public boolean searchMatrix(int[][] matrix, int target) {//1.计算出总的行值,总的列值。int mm…

系统架构设计师:设计模式——行为设计模式

一、行为设计模式 行为模式涉及算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻画了在运行时难以跟踪的、复杂的控制流。它们将用户的注意力从控制流转移到对象间的联系方式上来。 行为类模式使用继承机制在类间分…

java springboot实现MCP Server SSE

参考: https://juejin.cn/post/7491881721278529570 SpringAI 实现 SSE MCP Server项目 - Auler - 博客园 springboot-MCPserver-JUnit: 使用springboot支持mcp项目搭建,同时有着便捷的单元测试来进行敏捷开发对话即服务:Spring BootMCP让…