python 读取视频有多少帧并将视频转为GIF动态图

news/2024/10/22 10:54:23/

目录

1 python读取视频帧

2 python 将MP4格式视频前500帧转为动态图

3 python 将MP4格式视频第2688到2890帧转为动态图,并将gif图片的七分之一列和后七分之一列裁掉

4 python 将MP4格式视频第2688到2890帧转为动态图,并将gif图片的七分之一行和后七分之一行裁掉

1 python读取视频帧

要读取视频有多少帧,可以使用Python中的OpenCV库。以下是一个示例代码:

import cv2# 打开视频文件
cap = cv2.VideoCapture('path/to/video.mp4')# 获取视频的帧数
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))# 输出视频的帧数
print(f"The video contains {frame_count} frames.")# 释放视频对象
cap.release()

        在这个示例中,我们首先使用cv2.VideoCapture()函数打开视频文件,并将其存储在一个变量中。然后,我们使用cap.get(cv2.CAP_PROP_FRAME_COUNT)函数获取视频的帧数,并将其转换为整数类型。最后,我们打印视频的帧数。

        请注意,在完成对视频的操作后,需要使用cap.release()函数释放视频对象。

        值得注意的是,使用OpenCV库可以更加高效和稳定地处理视频文件。

2 python 将MP4格式视频前500帧转为动态图

        要将MP4格式视频的前500帧转换为动态图,您可以使用Python中的OpenCV库和imageio库。以下是一个示例代码:

import cv2
import imageio# 打开视频文件
cap = cv2.VideoCapture('path/to/video.mp4')# 获取视频帧率和尺寸
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 创建输出GIF文件的对象
output_file = 'path/to/output.gif'
writer = imageio.get_writer(output_file, fps=fps)# 读取视频的前500帧
for i in range(500):ret, frame = cap.read()if ret:# 将帧转换为RGB格式,并将其添加到GIF文件中frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)writer.append_data(frame)else:break# 关闭视频对象和输出GIF文件对象
cap.release()
writer.close()# 打印完成消息
print(f"Successfully converted the first 500 frames of the video to '{output_file}'.")

        在这个示例中,我们首先使用cv2.VideoCapture()函数打开视频文件,并获取视频的帧率和尺寸。然后,我们使用imageio.get_writer()函数创建输出GIF文件的对象,并设置帧率。

        接下来,我们使用for循环读取视频的前500帧。对于每一帧,我们首先使用cap.read()函数读取帧,并将其存储在一个变量中。如果读取成功,我们将使用cv2.cvtColor()函数将帧转换为RGB格式,并使用writer.append_data()函数将其添加到输出GIF文件中。

        当循环结束后,我们使用cap.release()函数关闭视频对象和writer.close()函数关闭输出GIF文件对象。最后,我们打印一个完成消息。

        请注意,在完成对视频的操作后,需要释放视频对象并关闭输出GIF文件对象。此外,如果希望转换的帧数不是固定的,可以将range(500)替换为适当的范围。

3 python 将MP4格式视频第2688到2890帧转为动态图,并将gif图片的七分之一列和后七分之一列裁掉

import cv2
import imageio# 打开视频文件
cap = cv2.VideoCapture('path/to/video.mp4')# 获取视频帧率和尺寸
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 计算裁剪后的GIF宽度和高度
cropped_width = width - width // 7 * 2
cropped_height = height# 创建输出GIF文件的对象
output_file = 'path/to/output.gif'
writer = imageio.get_writer(output_file, fps=fps)# 读取视频的第2688到2890帧
for i in range(2688, 2891):cap.set(cv2.CAP_PROP_POS_FRAMES, i)  # 将帧的位置设置为iret, frame = cap.read()if ret:# 将帧裁剪为指定的大小,并将其转换为RGB格式frame = frame[:, width//7:width-width//7, :]frame = cv2.resize(frame, (cropped_width, cropped_height))frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 将帧添加到GIF文件中writer.append_data(frame)else:break# 关闭视频对象和输出GIF文件对象
cap.release()
writer.close()# 打印完成消息
print(f"Successfully converted frames 2688 to 2890 of the video to '{output_file}' with cropped edges.")

        在这个示例中,我们首先计算裁剪后的GIF宽度和高度,即将GIF的宽度缩小为原来的5/7,并保持高度不变。

        然后,我们使用for循环读取视频的第2688到2890帧。对于每一帧,我们首先使用cap.set(cv2.CAP_PROP_POS_FRAMES, i)函数将帧的位置设置为当前帧的索引i,然后使用cap.read()函数读取帧,并将其存储在一个变量中。

        如果读取成功,我们将使用frame[:, width//7:width-width//7, :]将GIF的第七分之一列和后七分之一列裁掉,再使用cv2.resize()函数将帧裁剪为指定的大小,将其转换为RGB格式,并使用writer.append_data()函数将其添加到输出GIF文件中。

        最后,我们关闭视频对象和输出GIF文件对象,并打印一个完成消息。

        请注意,我们使用了整数除法//来计算要裁剪的列的索引。这是因为GIF的宽度可能不是7的倍数,所以我们需要向下取整以确保我们裁剪正确的列。

4 python 将MP4格式视频第2688到2890帧转为动态图,并将gif图片的七分之一行和后七分之一行裁掉

        如果需要裁剪的是行而不是列,则可以类似地计算裁剪后的GIF宽度和高度,并使用frame[row_start:row_end, :, :]来裁剪每一帧的行。以下是一个示例代码:

import cv2
import imageio# 打开视频文件
cap = cv2.VideoCapture('path/to/video.mp4')# 获取视频帧率和尺寸
fps = int(cap.get(cv2.CAP_PROP_FPS))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))# 计算裁剪后的GIF宽度和高度
cropped_width = width
cropped_height = height - height // 7 * 2# 创建输出GIF文件的对象
output_file = 'path/to/output.gif'
writer = imageio.get_writer(output_file, fps=fps)# 读取视频的第2688到2890帧
for i in range(2688, 2891):cap.set(cv2.CAP_PROP_POS_FRAMES, i)  # 将帧的位置设置为iret, frame = cap.read()if ret:# 将帧裁剪为指定的大小,并将其转换为RGB格式frame = frame[height//7:height-height//7, :, :]frame = cv2.resize(frame, (cropped_width, cropped_height))frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)# 将帧添加到GIF文件中writer.append_data(frame)else:break# 关闭视频对象和输出GIF文件对象
cap.release()
writer.close()# 打印完成消息
print(f"Successfully converted frames 2688 to 2890 of the video to '{output_file}' with cropped edges.")

        在这个示例中,我们使用了类似于前一个示例的方法来计算裁剪后的GIF宽度和高度,但这次我们将GIF的高度缩小为原来的5/7,并保持宽度不变。

        然后,我们使用for循环读取视频的第2688到2890帧,并使用                

  cap.set(cv2.CAP_PROP_POS_FRAMES, i)函数将帧的位置设置为当前帧的索引i

        对于每一帧,我们使用frame[height//7:height-height//7, :, :]来裁剪GIF的第七分之一行和后七分之一行,再使用cv2.resize()函数将帧裁剪为指定的大小,将其转换为RGB格式,并使用writer.append_data()函数将其添加到输出GIF文件中。

        最后,我们关闭视频对象和输出GIF文件对象,并打印一个完成消息。


http://www.ppmy.cn/news/39339.html

相关文章

R-CNN(Region with CNN feature)

目录 1. 介绍 2. R-CNN 2.1 SS(Selective Search) 算法 生成候选框 2.2 CNN 提取特征 2.3 SVM 分类 非极大值抑制 2.4 回归器微调候选框 3. R-CNN 的缺点 1. 介绍 目标识别的发展历史如图 2. R-CNN RCNN 是两阶段目标检测的鼻祖,类似于深度学习开山之作Al…

Cartesi 2023 年 3 月回顾

2023 年 3 月 31 日 ,欢迎新一批建设者加入Cartesi 社区。我们在三月初非常愉快地结束了ETH Denver,看到所有使用Cartesi技术建立的创新项目,让我们印象深刻,这些项目来自我们今年的第一次黑客马拉松!想要了解更多关于…

Python 自动化指南(繁琐工作自动化)第二版:十二、网络爬取

原文:https://automatetheboringstuff.com/2e/chapter12/ 在那些没有 Wi-Fi 的罕见、可怕的时刻,我意识到我在电脑上做的事情有多少是我在互联网上做的。出于纯粹的习惯,我会发现自己试图查看电子邮件,阅读朋友的 Twitter 信息&am…

Python 进阶指南(编程轻松进阶):五、发现代码异味

原文:http://inventwithpython.com/beyond/chapter5.html 导致程序崩溃的代码显然是错误的,但是崩溃并不是发现程序问题的唯一手段。其他迹象可能表明程序存在更微妙的错误或不可读的代码。就像气体的味道可以指示气体泄漏或者烟雾的味道可以指示火灾一样…

【高分好刊邀稿】IEEE出版社,中科院1区(TOP),CCF-C类,涵盖网络物理系统智能领域

IEEE出版社 【期刊简介】IF:7.0-8.0,JCR1区,中科院1区(TOP) 【检索情况】SCI&EI 双检,正刊,CCF-C类 【参考周期】3-5个月左右录用 【截稿日期】2023.7.30 【征稿领域】网络物理系统在生物医学中的应用…

Python四种常用的高阶函数,你会用了吗

1、什么是高阶函数 把函数作为参数传入,这样的函数称为高阶函数 例如: def func1(x,y,f): return f(x) f(y)num func1(-10, 2, abs) print(num) 注意: 把函数作为参数传入的时候,不要再传入函数后面解括号, …

【ChatGPT】ChatGPT-5 强到什么地步?

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 ChatGPT-5 强到什么地步? 技术 深度学习模型的升级 更好的预测能力 自适应学习能力 特点 语言理解能力更强 自我修正和优化 更广泛的应用领域 应用 对话系统 智能写作…

Centos7安装Redis

一、下载安装包 地址1: 下载地址:http://download.redis.io/releases/redis-4.0.14.tar.gz 下载后上传到服务器上,并解压: 地址2: 链接:https://pan.baidu.com/s/1aED9QbG4cgu4lO-gdFDt0Q 提取码&…