将视频按时长平均分成指定数量的帧并保存在指定路径

将视频按时长平均分成指定数量的帧并保存在指定路径

解决问题

我想将一个mp4格式的视频按视频播放顺序截30张图片,也就是按视频时长平均截30张图,并保存在指定文件夹内。接下来就以视频female-1-casual.mp4为例,输入路径和输出路径都是我自己设置的,如果需要使用代码,记得按自己的路径改。

代码实现

from moviepy.editor import VideoFileClip
import os
import cv2
from PIL import Image

# 视频文件路径
video_path = 'F:\\admin\\Downloads\\Nerf\\dataset\\people_snapshot_public\\female-1-casual\\female-1-casual.mp4'
# 输出文件夹路径
output_folder = 'F:\\admin\\Downloads\\Nerf\\dataset\\MyDataset\\llfftest\\images\\1'

# 确保输出文件夹存在
if not os.path.exists(output_folder):
    os.makedirs(output_folder)

# 读取视频文件
clip = VideoFileClip(video_path)

# 获取视频时长(秒)
duration = clip.duration

# 计算每隔多少秒截取一帧
frame_interval = duration / 30

# 定义帧的数量
frame_number = 1
# 编号和保存截图
for frame in clip.iter_frames(fps=frame_interval):
    # 将帧转换为RGB模式
    #frame = Image.fromarray(frame)
    #rgb_frame = frame.convert('RGB')
    # 检查帧是否是RGB格式
    if frame.shape[-1] == 3:
        # 如果是RGB格式,可以在这里进行进一步的处理或保存
        pass
    else:
        # 如果不是RGB格式,可以将它转换为RGB格式
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    # 保存截图
    if frame_number>30:
        break
    image_path = os.path.join(output_folder, f'{frame_number}.png')
    #将numpy.ndarray对象转换为PIL图像:
    image = Image.fromarray(frame)
    #最后,将图像保存到指定路径
    image.save(image_path)
    #frame_number迭代
    frame_number += 1


print("截图已保存到:", output_folder)

实现效果

输入视频:
在这里插入图片描述
生成效果:
在这里插入图片描述

  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值