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

目录

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)  # 将帧的位置设置为i
    ret, 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)  # 将帧的位置设置为i
    ret, 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文件对象,并打印一个完成消息。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值