将你的视频导出为帧图片,注意,如果视频过长,请调整相关出图数量参数,避免卡顿。
★导出间隔设置建议:
如果视频很长(例如 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)