问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/m0_56512537/article/details/136953216

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

解决问题

我想将一个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格式
    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)

实现效果

输入视频:

生成效果:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号