在视频处理领域,提取视频中的帧并保存为图片是一项非常实用的技能。今天,我将带大家使用Python的OpenCV库来
功能介绍
本脚本可以帮助你从视频中按照指定的帧间隔提取图片,并保存到指定的文件夹中。你可以自定义图片的宽高、帧率以及帧间隔。
提取为24位图的BMP格式图片,用于嵌入式开发LCD屏幕显示图片,多张图片循环显示,达成视频效果
实现这一功能。以下是详细的步骤和代码解析:
import cv2
import os
def extract_frames_from_video(video_path, output_folder, width=472, height=300, fps=30, frame_interval=1):
# 确保输出文件夹存在
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 读取视频文件
cap = cv2.VideoCapture(video_path)
# 尝试设置视频帧率
cap.set(cv2.CAP_PROP_FPS, fps)
# 获取实际帧率
actual_fps = cap.get(cv2.CAP_PROP_FPS)
print(f"设置的帧率为: {fps}, 实际帧率为: {actual_fps}")
frame_count = 0
frame_index = 0
while True:
# 逐帧读取视频
ret, frame = cap.read()
if not ret:
break # 如果读取帧失败,则结束循环
# 根据间隔提取帧
if frame_count % frame_interval == 0:
# 调整帧尺寸
frame = cv2.resize(frame, (width, height))
# 保存帧为24位bmp格式
frame_filename = os.path.join(output_folder, f"frame_{frame_index}.bmp")
cv2.imwrite(frame_filename, frame)
frame_index += 1
frame_count += 1
# 释放视频捕获对象
cap.release()
return frame_index
# 使用示例
video_path = '1.mp4' # 请替换为您的视频文件路径
output_folder = 'image1' # 请替换为您的输出文件夹路径
frame_interval = 5 # 每隔5帧提取一张图片
frames_extracted = extract_frames_from_video(video_path, output_folder, fps=30, frame_interval=frame_interval)
print(f"提取了 {frames_extracted} 帧。")