200字
Python视频导出帧脚本
2025-12-12
2025-12-13

将你的视频导出为帧图片,注意,如果视频过长,请调整相关出图数量参数,避免卡顿。

★导出间隔设置建议:

  • 如果视频很长(例如 1 小时),不要设置为 1,否则会生成数十万张图片,塞满你的硬盘。

  • 如果是 30fps 的视频,设置 interval = 30 意味着每秒导出一张图片

注意:你需要先安装python环境以及所需opencv-python库。

pip install opencv-python

脚本仅供学习参考!

#由--王者巅峰--制作
import cv2
import os

def extract_frames(video_absolute_path, output_folder=None, interval=1):
    """
    从视频中导出帧。
    :param video_absolute_path: 视频文件路径 
    :param output_folder: 图片保存的文件夹
    :param interval: 帧间隔 
    """
    
    if not os.path.exists(video_absolute_path):
        print(f"错误: 找不到文件: {video_absolute_path}")
        return

    #设置输出路径
    if output_folder is None:
        # 获取视频文件名
        video_name = os.path.splitext(os.path.basename(video_absolute_path))[0]
        # 在视频所在目录创建一个同名文件夹
        video_dir = os.path.dirname(video_absolute_path)
        output_folder = os.path.join(video_dir, video_name + "_frames")

    # 如果输出文件夹不存在,则创建
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        print(f"📂 已创建输出文件夹: {output_folder}")

    #读取视频
    cap = cv2.VideoCapture(video_absolute_path)
    
    if not cap.isOpened():
        print("错误: 无法打开视频文件。")
        return

    # 获取视频基本信息
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    fps = cap.get(cv2.CAP_PROP_FPS)
    print(f"开始处理: {os.path.basename(video_absolute_path)}")
    print(f"总帧数: {total_frames}, FPS: {fps:.2f}")

    frame_count = 0
    saved_count = 0

    while True:
        ret, frame = cap.read()

        # 视频结束,退出循环
        if not ret:
            break

        # 按间隔保存图片
        if frame_count % interval == 0:
            # 格式化文件名
            filename = f"Image{frame_count}.jpg"
            save_path = os.path.join(output_folder, filename)
            
            # 保存图片 (默认质量)
            cv2.imwrite(save_path, frame)
            saved_count += 1
            
            if saved_count % 100 == 0:
                print(f"   已保存 {saved_count} 张图片...")

        frame_count += 1

    # 释放资源
    cap.release()
    print("-" * 30)
    print(f"✅ 处理完成!")
    print(f"共导出图片: {saved_count} 张")
    print(f"保存路径: {output_folder}")

if __name__ == "__main__":
    VIDEO_PATH = r""
    # 设置采样间隔 (1 = 每一帧都存, 30 = 每30帧存一张)
    FRAME_INTERVAL = 1  
    extract_frames(VIDEO_PATH, interval=FRAME_INTERVAL)

Python视频导出帧脚本
作者
站长
发表于
2025-12-12

评论