python-(opencv)视频转glf

文章目录

  • 前言
    • python-(opencv)视频转glf
      • [1. 下载 opencv-python](#1. 下载 opencv-python)
      • [2. cv2(OpenCV)和imageio的区别](#2. cv2(OpenCV)和imageio的区别)
      • [3. demo源码](#3. demo源码)

前言

如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。

而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


python-(opencv)视频转glf

cv2(OpenCV)和imageio 都可以用来将视频转出glf的的python库。

我这里使用的是cv2(OpenCV)python库来做视频转glf demo。

1. 下载 opencv-python

pip install opencv-python

2. cv2(OpenCV)和imageio的区别

功能和应用场景:

OpenCV (cv2):OpenCV 是一个功能强大的计算机视觉库,支持广泛的图像处理、计算机视觉和机器学习任务,如图像处理、视频处理、对象检测与跟踪、人脸识别等。它提供了丰富的算法和函数,适用于复杂的计算机视觉项目。

imageio:imageio 是一个用于读写多种图像和视频格式的库。它的主要功能是方便地读取和写入图像和视频文件,支持多种格式,并且可以直接处理GIF动画等。imageio 的设计更加简洁,专注于图像和视频的I/O操作。
易用性和适用范围:

OpenCV 在处理复杂的计算机视觉任务时更为强大和灵活,提供了丰富的图像处理算法和功能。

imageio 更适合于简单的图像和视频读写操作,特别是对于处理少量数据或需要快速实现的任务而言更为便捷。
依赖和兼容性:

OpenCV 需要依赖于底层的计算机视觉和数值计算库,如 numpy 等,而且需要正确配置编译环境,适应性较强。

imageio 设计简单,依赖较少,适用于快速安装和使用的场景。
社区和支持:

OpenCV 是一个广为人知且使用广泛的开源项目,有一个活跃的社区支持和大量的文档资源。

imageio 也有不少用户和社区支持,但相对于OpenCV来说,其社区和文档资源可能较少。


因此选择使用哪个库取决于你的具体需求和项目复杂性。如果需要进行复杂的计算机视觉任务或者需要丰富的图像处理功能,推荐使用 OpenCV (cv2)。如果只需进行简单的图像和视频读写操作,并希望快速上手,那么 imageio 是一个不错的选择。

3. demo源码

python 复制代码
import cv2
from PIL import Image
import time

# 视频文件路径
video_path = 'D:/嗨格式录屏文件/test.mp4'

# 打开视频文件
cap = cv2.VideoCapture(video_path)

# 获取视频帧率和总帧数
fps = int(cap.get(cv2.CAP_PROP_FPS))
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print(f'视频帧率:{fps}')
print(f'总帧数:{frame_count}')

# 图片尺寸(这里使用视频的默认尺寸)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))


# 逐帧读取视频并保存为图片
def read_frames():
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)  # 将 OpenCV 的 BGR 格式转换为 RGB 格式
        yield Image.fromarray(frame_rgb)  # 将 NumPy 数组转换为 PIL 图像对象


print("保存为 GIF 动画")

# 记录开始时间
start_time = time.time()

# 保存为 GIF 动画
images = list(read_frames())

images[0].save('D:/嗨格式录屏文件/test.gif',
               save_all=True,
               append_images=images[1:],
               duration=int(1000 / fps),  # 每帧间隔时间(毫秒)
               loop=0)                   # 循环次数(0 表示无限循环)

# 计算耗时
elapsed_time = time.time() - start_time
print(f"视频转换为 GIF 图片成功,耗时: {elapsed_time:.2f} 秒。")

# 释放视频文件资源
cap.release()

效果:

可以看到耗时6分钟,时间还是比较久的,这种场景下,可以采取优化
【调整帧采样率】【使用其他视频处理库】(虑使用其他专门用于视频处理和转换的库,比如 moviepy 或 imageio。它们可能针对性能和效率进行了优化,可以比原生 OpenCV 更快速地进行帧的读取和处理。)、调**【整保存参数】(整保存 GIF 图像时的参数,例如调整每帧的间隔时间、循环次数等。有时候减少帧率或减少循环次数可以减少处理时间),【使用多线程或异步处理】(在读取帧和保存图像时,可以考虑使用多线程或异步处理。这样可以并行处理帧的读取和图像的保存,提高整体处理速度),【降低图像尺寸和质量】**(如果目标是减少文件大小或简化处理过程,可以在保存 GIF 图像时降低图像的尺寸和质量。这会减少每帧的处理时间和最终 GIF 文件的大小)。

下面是通过调整调整帧采样率的demo:

python 复制代码
import cv2
from PIL import Image
import time

# 视频文件路径
video_path = 'D:/嗨格式录屏文件/test.mp4'

# 打开视频文件
cap = cv2.VideoCapture(video_path)

# 获取视频帧率和总帧数
fps = int(cap.get(cv2.CAP_PROP_FPS))
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print(f'视频帧率:{fps}')
print(f'总帧数:{frame_count}')

# 图片尺寸(这里使用视频的默认尺寸)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))


# 逐帧读取视频并保存为图片(增加帧采样率)
def read_frames(sampling_rate=2):
    frame_number = 0
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        if frame_number % sampling_rate == 0:
            frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            yield Image.fromarray(frame_rgb)
        frame_number += 1


print("保存为 GIF 动画")

# 记录开始时间
start_time = time.time()


# 调整帧采样率为每隔2帧保存一次图像
images = list(read_frames(sampling_rate=2))
images[0].save('D:/嗨格式录屏文件/test.gif',
               save_all=True,
               append_images=images[1:],
               duration=int(1000 / fps),  # 每帧间隔时间(毫秒)
               loop=0)                   # 循环次数(0 表示无限循环)

# 计算耗时
elapsed_time = time.time() - start_time
print(f"视频转换为 GIF 图片成功,耗时: {elapsed_time:.2f} 秒。")

# 释放视频文件资源
cap.release()

效果:

明显生成时间减少很多。

相关推荐
KevinRay_7 分钟前
Python超能力:高级技巧让你的代码飞起来
网络·人工智能·python·lambda表达式·列表推导式·python高级技巧
Captain823Jack38 分钟前
nlp新词发现——浅析 TF·IDF
人工智能·python·深度学习·神经网络·算法·自然语言处理
资源补给站1 小时前
大恒相机开发(2)—Python软触发调用采集图像
开发语言·python·数码相机
Captain823Jack1 小时前
w04_nlp大模型训练·中文分词
人工智能·python·深度学习·神经网络·算法·自然语言处理·中文分词
PieroPc2 小时前
Python 自动化 打开网站 填表登陆 例子
运维·python·自动化
VinciYan2 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
测试老哥3 小时前
外包干了两年,技术退步明显。。。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
終不似少年遊*3 小时前
美国加州房价数据分析01
人工智能·python·机器学习·数据挖掘·数据分析·回归算法
如若1233 小时前
对文件内的文件名生成目录,方便查阅
java·前端·python
西猫雷婶4 小时前
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
开发语言·python·opencv