当前位置: 首页 > news >正文

视频转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.dtcms.com/a/170588.html

相关文章:

  • VMware-centOS7安装redis分布式集群
  • MySQL复合查询全解析:从基础到多表关联与高级技巧
  • llfc项目TCP服务器笔记
  • SpringBoot的汽车商城后台管理系统源码开发实现
  • **马小帅面试记:Java技术问答**
  • Win10下安装Linux-Ubuntu24.04双系统
  • 2025-05-04 Unity 网络基础6——TCP心跳消息
  • Android第三次面试总结之Java篇补充
  • NV214NV217美光闪存固态NV218NV225
  • 基于Hive + Spark离线数仓大数据实战项目(视频+课件+代码+资料+笔记)
  • 【LeetCode Hot100】动态规划篇
  • 二叉搜索树实现删除功能 Java
  • 初识 iOS 开发中的证书固定
  • EasyExcel使用总结
  • 【Linux系统】第二节—基础指令(2)
  • 【ArcGIS微课1000例】0144:沿线或多边形要素添加折点,将曲线线段(贝塞尔、圆弧和椭圆弧)替换为线段。
  • Spring MVC设计与实现
  • 【Java JUnit单元测试框架-60】深入理解JUnit:Java单元测试的艺术与实践
  • 架构思维:利用全量缓存架构构建毫秒级的读服务
  • 【C++ Qt】输入类控件(上) LineEdit、QTextEdit
  • 仓颉编程语言快速入门:从零构建全场景开发能力
  • 主成分分析(PCA)与逻辑回归在鸢尾花数据集上的实践与效果对比
  • PyTorch_张量索引操作
  • 【C++】 —— 笔试刷题day_25
  • [硬件电路-12]:LD激光器与DFB激光器功能概述、管脚定义、功能比较
  • Qwen2.5模型性能测评 - 速度指标
  • 【Linux】命令行参数与环境变量
  • LeetCode 热题 100 54. 螺旋矩阵
  • ES6入门---第三单元 模块四:Set和WeakSet
  • LLama-v2 权重下载