视频处理---Python对视频抽帧得到图片
引:
近期做CV方面算法,分享几个简单的视频、图片处理脚本
脚本中均有print调试代码,,方便更改
Python对视频抽帧得到图片:
# -*- coding:utf8 -*-
import cv2
import os
import shutil
def get_frame_from_video(video_name, prefix_path):
"""
Args:
video_name:输入视频名字
interval: 保存图片的帧率间隔
Returns:
"""
# 保存图片的路径
save_path = video_name.split('.mp4')[0] + "\\"
print(f'aaaaaa_+++video_name: {video_name} ')
# 开始读视频
video_capture = cv2.VideoCapture(video_name)
# 读取视频的 FPS ,便于确定抽帧频次
fps = int(video_capture.get(cv2.CAP_PROP_FPS))
# fps = 15
print(f'fps_____: {fps}')
i = 0
j = 0
while True:
success, frame = video_capture.read()
print(f'success: {success};;')
i += 1
# 用 i 直接对帧率取余, 此脚本为每秒抽一张图片, 可灵活更改此处改变抽帧频度
if i % fps == 0:
# 保存图片
j += 1
# save_name = save_path + str(j) + '_' + str(i) + '.jpg'
save_name = './' + prefix_path + str(j) + '_' + str(i) + '.jpg'
print(f'nbnbbbbb_save_path: {save_path}')
print(f'nbnbbbbb_savename: {save_name}')
cv2.imwrite(save_name, frame)
print('image of %s is saved' % save_name)
if not success:
print('video is all read')
break
# 获取文件夹下所有文件名
def get_filename(path: str, file_list: list):
for file_name in os.listdir(path):
file_path = os.path.join(path, file_name)
if os.path.isdir(file_path):
print("文件夹, 跳过")
continue
file_list.append(file_name)
file_list.sort()
if __name__ == '__main__':
# 视频文件名字
# video_name = './sss.mp4'
interval = 60
data_path = "E:\\PersonShape\\"
files = list()
get_filename(data_path, files)
total = len(files)
print(f'total: {total}')
for i in range(len(files)):
try:
video_name = data_path + files[i]
prefix_path = files[i].split('.mp4')[0] + "\\"
if not os.path.exists('./' + files[i].split('.mp4')[0]):
os.mkdir('./' + files[i].split('.mp4')[0])
print(f'video_name: {video_name}, prefix_path:{prefix_path}')
get_frame_from_video(video_name, prefix_path)
except Exception as e:
print(f'e______________: {e}')

浙公网安备 33010602011771号