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

Python 使用 OpenCV 将 MP4 转换为 GIF图

以下是使用 Python 和 OpenCV 将 MP4 转换为 GIF 的示例代码:

python

import cv2
import imageio

def mp4_to_gif(mp4_path, gif_path, fps=10, start_time=None, end_time=None):
    """
    将MP4视频转换为GIF动图。

    :param mp4_path: 输入MP4视频的路径。
    :param gif_path: 输出GIF文件的路径。
    :param fps: GIF的帧率,默认值为10。
    :param start_time: 开始时间(秒),默认值为None,表示从视频开头开始转换。
    :param end_time: 结束时间(秒),默认值为None,表示转换到视频结尾。
    """
    cap = cv2.VideoCapture(mp4_path)
    all_images = []
    frame_count = 0
    while True:
        ret, img = cap.read()
        if not ret:
            break
        # 根据开始时间和结束时间截取帧
        if start_time is not None and frame_count < start_time * fps:
            frame_count += 1
            continue
        if end_time is not None and frame_count >= end_time * fps:
            break
        # 将BGR图像转换为RGB格式,以适应imageio保存GIF的要求
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        all_images.append(img)
        frame_count += 1

    # 将帧率转换为每帧之间的延迟时间(毫秒)
    duration = int(1000 / fps)
    imageio.mimsave(gif_path, all_images, duration=duration)
    print("转换完成!")

if __name__ == "__main__":
    input_mp4_path = "your_input_mp4.mp4"  # 替换为实际的输入MP4视频路径
    output_gif_path = "output.gif"  # 替换为输出GIF文件的路径
    start_time = 0  # 开始时间,单位:秒,可根据需要修改
    end_time = 5  # 结束时间,单位:秒,可根据需要修改
    fps = 15  # GIF的帧率,可根据需要修改

    mp4_to_gif(input_mp4_path, output_gif_path, fps=fps, start_time=start_time, end_time=end_time)

在上述代码中:

读取视频帧

  • 首先使用cv2.VideoCapture函数打开指定的 MP4 视频文件,并创建一个视频捕获对象cap2.
  • 通过一个循环不断读取视频的帧,使用cap.read()函数读取视频的下一帧图像。如果读取失败(视频结束),则跳出循环2.

截取特定时间段的帧

  • 根据提供的start_timeend_time参数来控制要转换的帧范围。如果start_time不为None,并且当前帧索引小于start_time乘以帧率的值,则跳过该帧。如果end_time不为None,并且当前帧索引大于等于end_time乘以帧率的值,则跳出循环2.

转换图像格式

  • 使用cv2.cvtColor函数将读取的图像帧从 BGR 格式转换为 RGB 格式,以便后续生成 GIF 图片时颜色显示正确2.

保存为 GIF

  • 将转换后的图像帧添加到all_images列表中。
  • 根据提供的帧率fps计算每帧之间的延迟时间duration,以便生成的 GIF 图片播放时具有指定的帧率2.
  • 使用imageio.mimsave函数将all_images列表中的帧保存为 GIF 图片。指定参数duration为帧间延迟时间。保存的 GIF 图片文件名由提供的gif_path参数决定2.

在运行代码之前,需要先安装opencv-pythonimageio库,可以通过pip install opencv-python imageio命令进行安装1. 同时,要将代码中的输入 MP4 视频路径、输出 GIF 文件路径、开始时间、结束时间和帧率等参数按照实际需求进行替换 。

效果如下


http://www.kler.cn/a/409422.html

相关文章:

  • javaEE初阶——多线程(1)
  • Linux之管道,system V的共享内存,消息队列和信号量
  • C++ std::unique_ptr的使用及源码分析
  • 大语言模型---Llama7B和Llama8B的区别;模型参数量;权重文件的不同;嵌入层权重的不同;输入序列长度的不同;应用场景
  • Java爬虫:获取商品详情的实践之旅
  • 09 —— Webpack搭建开发环境
  • 新华三H3CNE网络工程师认证—子接口技术
  • 任子行网络安全审计系统 log_fw_ips_scan_jsondata SQL注入漏洞复现
  • java基础(一):JDK、JRE、JVM、类库等概念,java跨平台实现原理
  • On-Chip-Network之Topology
  • Pytorch自定义算子反向传播
  • cirros-0.3.4-x86_64-disk.img
  • 【Linux】使用nohup命令实现不挂断的后台运行
  • ECharts柱状图-带圆角的堆积柱状图,附视频讲解与代码下载
  • [Leetcode小记] 3233. 统计不是特殊数字的数字数量
  • shell脚本-笔记27
  • 《CSDN及其旗下产品:构建中国IT行业的知识与技术生态》
  • Java开发经验——SpringRestTemplate常见错误
  • 【C++】static修饰的“静态成员函数“--静态成员在哪定义?静态成员函数的作用?
  • 【论文笔记】Improved Baselines with Visual Instruction Tuning
  • 掌握移动端性能测试利器:深入JMeter手机录制功能
  • php日志系统
  • PICO VR串流调试Unity程序
  • [第五空间 2021]pklovecloud 详细题解
  • 跟着问题学5——深度学习中的数据集详解(1)
  • 【深度学习】Linux常见命令