import cv2
import os
class VideoFrameExtractor:
def __init__(self, video_folder, output_folder, frame_interval):
self.video_folder = video_folder
self.output_folder = output_folder
self.frame_interval = frame_interval
self.save_nums = 0
def extract_frames(self, video_path):
cap = cv2.VideoCapture(video_path)
if not cap.isOpened():
print("无法打开视频文件")
return
frame_count = 0
while True:
ret, frame = cap.read()
if not ret:
break
if frame_count % self.frame_interval == 0:
output_path = os.path.join(self.output_folder, f"frame_{self.save_nums}.png")
cv2.imwrite(output_path, frame)
self.save_nums += 1
frame_count += 1
cap.release()
print(f"从视频中提取了{int(frame_count / frame_interval)}帧图像")
def process_videos(self):
for video_file in os.listdir(self.video_folder):
if video_file.endswith(('.mp4', '.avi', '.mkv')):
video_path = os.path.join(self.video_folder, video_file)
print(f"处理视频:{video_path}")
self.extract_frames(video_path)
if __name__ == "__main__":
video_folder = "video" # 视频路径,里面可以存放多个视频
output_folder = "dataset" # 保存图像的路径
frame_interval = 10 # 每隔多少帧抽取一张图像
extractor = VideoFrameExtractor(video_folder, output_folder, frame_interval)
extractor.process_videos()
批量抽取视频帧,制作数据集
于 2024-05-17 13:50:33 首次发布