视频逐帧提取并保存
基于python 的cv2进行视频转图片
今天在使用中,需要将视频中的每一帧进行提取并保存在文件夹下面。因为包含多个视频,手动提取不方便,因此写了一个基于Python的代码段对视频进行逐帧提取。
使用说明
使用时仅仅需要将视频文件放在videos目下即可
文档结构如下
- root
- imgs 和 videos
最终图像会保存在imgs文件夹下面,并且会根据视频文件的名称进行保存,即保存在 “imgs/视频名”文件夹下
下面是基于Python 3的代码片段代码片
.
import os
import cv2
# parameters
videos_path = 'videos' # 视频文件夹地址
saved_path = 'imgs' # 保存的图像文件夹地址
def save2img(video_path, img_path):
frame_ind = 1 # 帧索引
frame_gap = 100 # 保存视频的帧间隔
exist_ok = True
obj = cv2.VideoCapture(video_path)
while(exist_ok):
exist_ok, frame = obj.read()
print(f'the frame index of video {video_path} is:', frame_ind)
if exist_ok == True and frame_ind % frame_gap == 0:
cv2.imwrite(f'{img_path}/{frame_ind}.jpg', frame)
frame_ind = frame_ind + 1
for video_name in os.listdir(videos_path):
if os.path.exists(os.path.join(saved_path, video_name.split('.')[0])):
print(f"You need to delete the filedoc: {os.path.join(saved_path, video_name.split('.')[0])}")
break
os.makedirs(os.path.join(saved_path, video_name.split('.')[0]))
img_path = os.path.join(saved_path, video_name.split('.')[0])
video_path = os.path.join(videos_path, video_name)
save2img(video_path, img_path)