利用Python实现视频每秒截取一帧图像保存至文件夹
在Python中,可以使用cv2(OpenCV)库来截取视频的每一秒的一帧图像,并将这些图像保存为图片到文件夹。以下是一个简单的示例代码:
import cv2
import os
def extract_frames_per_second(video_path, output_dir, fps=1):
# 创建输出目录(如果不存在)
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 打开视频文件
cap = cv2.VideoCapture(video_path)
# 检查视频是否成功打开
if not cap.isOpened():
print("Error: Could not open video.")
return
# 初始化帧计数器
frame_count = 0
prev_time = 0
# 逐帧读取视频
while True:
ret, frame = cap.read()
# 如果读取帧失败(例如,视频结束),则退出循环
if not ret:
break
# 获取当前帧的时间戳(以秒为单位)
current_time = int(cap.get(cv2.CAP_PROP_POS_MSEC) / 1000)
# 如果当前时间戳与上一次保存帧的时间戳之差大于或等于指定的fps,则保存当前帧
if current_time - prev_time >= fps:
# 构造输出文件名
output_file = os.path.join(output_dir, f"frame_{frame_count:04d}.jpg")
# 保存当前帧为图片
cv2.imwrite(output_file, frame)
# 更新帧计数器和上一次保存帧的时间戳
frame_count += 1
prev_time = current_time
# 释放视频文件和所有OpenCV窗口
cap.release()
cv2.destroyAllWindows()
# 使用示例
video_path = 'path_to_your_video.mp4' # 替换为你的视频文件路径
output_dir = 'output_frames' # 替换为你希望保存帧图片的目录路径
extract_frames_per_second(video_path, output_dir, fps=1)
这段代码定义了一个extract_frames_per_second函数,它接受三个参数:video_path(视频文件路径)、output_dir(输出目录路径)和fps(每秒截取的帧数,默认为1)。函数首先检查输出目录是否存在,如果不存在则创建。然后,它使用cv2.VideoCapture打开视频文件,并逐帧读取视频。对于每一帧,它检查当前时间戳与上一次保存帧的时间戳之差是否大于或等于指定的fps。如果是,则保存当前帧为图片,并更新帧计数器和上一次保存帧的时间戳。最后,释放视频文件和所有OpenCV窗口。你可以通过修改video_path和output_dir变量的值来使用这个函数,并调整fps参数来改变每秒截取的帧数。
作者:油条豆汁