视频转GIF

视频转GIF

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

python 复制代码
import cv2
import imageio
import numpy as np
"""
    将视频转换为GIF图
    参数:
    video_path -- 输入视频的路径
    gif_path -- 输出GIF的路径
    fps -- GIF的帧率,默认为15
    width -- 输出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()
    
    # 保存为GIF
    imageio.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文件路径
    
    # 转换为GIF
    video_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文件可能会比较大,如果原视频很长或者分辨率很高,你可能需要调整这些参数来控制输出文件的大小。

相关推荐
C嘎嘎嵌入式开发2 小时前
(2)100天python从入门到拿捏
开发语言·python
Stanford_11063 小时前
如何利用Python进行数据分析与可视化的具体操作指南
开发语言·c++·python·微信小程序·微信公众平台·twitter·微信开放平台
white-persist4 小时前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
Java 码农5 小时前
Centos7 maven 安装
java·python·centos·maven
倔强青铜三5 小时前
苦练Python第63天:零基础玩转TOML配置读写,tomllib模块实战
人工智能·python·面试
浔川python社6 小时前
《网络爬虫技术规范与应用指南系列》(xc—3):合规实操与场景落地
python
B站计算机毕业设计之家6 小时前
智慧交通项目:Python+YOLOv8 实时交通标志系统 深度学习实战(TT100K+PySide6 源码+文档)✅
人工智能·python·深度学习·yolo·计算机视觉·智慧交通·交通标志
IT森林里的程序猿6 小时前
基于机器学习方法的网球比赛胜负趋势预测
python·机器学习·django
正牌强哥6 小时前
Futures_ML——机器学习在期货量化交易中的应用与实践
人工智能·python·机器学习·ai·交易·akshare
倔强青铜三6 小时前
苦练Python第62天:零基础玩转CSV文件读写,csv模块实战
人工智能·python·面试