将自己的视频抽取成帧只需要替换下面代码主函数的文件路径即可实现。
import cv2
import os
def video_to_frames(video_paths, output_path, frame_interval=1):
"""
将多个视频文件的帧按照指定的间隔抽取到输出文件夹中。
参数:
video_paths (list of str): 视频文件路径的列表。
output_path (str): 保存帧图像的文件夹路径。
frame_interval (int): 抽取帧的间隔。
"""
# 确保输出目录存在
if not os.path.exists(output_path):
os.makedirs(output_path)
# 遍历每个视频文件
for video_path in video_paths:
# 打开视频文件
video_capture = cv2.VideoCapture(video_path)
# 获取视频文件名(不包括扩展名),用于生成帧文件名
video_filename = os.path.splitext(os.path.basename(video_path))[0]
# 初始化帧计数器和保存帧计数器
frame_count = 0
save_frame_count = 0
# 读取视频帧直到结束
success = True
while success:
# 读取下一帧
success, frame = video_capture.read()
# 如果成功读取帧
if success:
# 检查是否应该保存当前帧
if frame_count % frame_interval == 0:
# 构造唯一的帧文件名
frame_filename = os.path.join(output_path, f"{video_filename}_frame_{save_frame_count:06d}.png")
# 保存帧到文件
cv2.imwrite(frame_filename, frame)
# 递增保存帧计数器
save_frame_count += 1
# 递增帧计数器
frame_count += 1
# 释放视频捕获对象
video_capture.release()
if __name__ == "__main__":
# 替换成你的视频文件路径列表
video_paths = [ "video1.mp4",
"video2.mp4",
"video3.mp4"
]
# 替换成保存帧图像的文件夹路径
output_path = "output_frames"
# 设置抽取帧的间隔,5代表每隔5帧保存一张图片
frame_interval = 5
# 调用函数将多个视频的帧按照指定间隔抽取到同一个文件夹中
video_to_frames(video_paths, output_path, frame_interval)