用python提取视频关键帧,python截取视频帧
介绍了一种从视频中提取视频帧的方法。因为单线程提取视频帧的速度比较慢,所以我们这里增加了一个多线程的方法。有兴趣的朋友可以试试。
00-1010 1、视频帧提取2、多线程方法3、整体代码补充Python快速提取视频帧(多线程)
今天,我们介绍一种从视频中提取视频帧的方法。因为单线程提取视频帧的速度比较慢,所以我们在这里加了一个多线程的方法。
目录
Opencv模块主要用于提取视频帧。
其中包括:
相机=cv2。Videocapture(),函数主要通过调用笔记本内置摄像头读取视频帧;
Res,image=camera.read()函数主要是按帧读取视频,返回值“res”为布尔值,如果读取成功则返回True,否则返回False如果失败;
最后,使用cv2.imwrite()函数存储读取的视频帧。
视频帧提取的方法请参考本文。
导入cv2
导入操作系统
def video_to_frames(视频路径,输出目录名):
次数=0
#提取视频的频率,每1帧一次
帧频率=1
#如果文件目录不存在,则创建一个
如果不是OS . path . exists(output dirname):
os.makedirs(outPutDirName)
#读取视频帧
相机=cv2。视频捕获(视频路径)
而True:
次数=次数1
res,image=camera.read()
如果不是res:
打印(“非分辨率,非图像”)
破裂
#以设定的时间间隔存储视频帧
如果乘以% frame_frequency==0:
cv2 . im write(output dirname \ \ str(times)。jpg ,图像)
打印(“图片提取结束”)
#释放摄像设备
camera.release()
1、抽取视频帧
线程库主要用于多线程应用。
其中包括:
穿线。Thread()函数主要用于调用多线程,其中参数“target”是上面使用的函数,参数“args”是上面函数的输入参数。
关于多线程的详细介绍以及速度提升的效果,请参考本文。
导入线程
穿线。Thread(target=video_to_frames,args=(video_path,outPutDirName))。开始()
事实证明,提速还是很快的!
2、多线程方法
导入cv2
导入操作系统
导入线程
def video_to_frames(视频路径,输出目录名):
次数=0
#提取视频的频率,每1帧一次
帧频率=1
#如果文件目录不存在,则创建一个
如果不是OS . path . exists(output dirname):
os.makedirs(outPutDirName)
#读取视频帧
相机=cv2。视频捕获(视频路径)
而True:
次数=次数1
res,image=camera.read()
如果不是res:
打印(“非分辨率,非图像”)
b
reak
if times % frame_frequency == 0:
cv2.imwrite(outPutDirName + \\ + str(times)+.jpg, image)
print(图片提取结束)
camera.release()
if __name__ == "__main__":
input_dir = rD:\datasets\cow_dataset # 输入的video文件夹位置
save_dir = rE:\relate_code\dataset # 输出图片到当前目录video文件夹下
count = 0 # 视频数
for video_name in os.listdir(input_dir):
video_path = os.path.join(input_dir, video_name)
outPutDirName = os.path.join(save_dir, video_name[:-4])
threading.Thread(target=video_to_frames, args=(video_path, outPutDirName)).start()
count = count + 1
print("%s th video has been finished!" % count)
补充
还可以利用Python实现抽取剔除视频帧工具
代码
下面是使用opencv对视频中间几帧抽取的方法。
主要的思路是在读取frame的时候,顺便把帧写下来。
同时如果不是需要抽取剔除的帧,直接continue到下个循环。
样例代码如下,主要按照MP4格式进行处理。
#!/user/bin/env python# coding=utf-8
"""
@project : csdn-pro
@author : 剑客阿良_ALiang
@file : test.py
@ide : PyCharm
@time : 2022-06-30 17:55:48
"""
import cv2
# 视频抽帧
def extract_frame(video_path: str, result_path: str, fps, weight, height, start, end):
fourcc = cv2.VideoWriter_fourcc(*mp4v)
videoWriter = cv2.VideoWriter(result_path, fourcc, fps, (weight, height))
vc = cv2.VideoCapture(video_path)
if vc.isOpened():
ret, frame = vc.read()
else:
ret = False
count = 0 # count the number of pictures
while ret:
ret, frame = vc.read()
if start <= count <= end:
count += 1
continue
else:
videoWriter.write(frame)
count += 1
print(count)
videoWriter.release()
vc.release()
if __name__ == __main__:
extract_frame(C:\\Users\\xxx\\Desktop\\123.mp4, C:\\Users\\xxx\\Desktop\\114.mp4, 25, 640, 368, 119, 125)
注意
1、extract_frame方法的入参分别为:输入视频地址、输出视频地址、视频fps、视频分辨率宽、视频分辨率高、视频需要抽掉的起始帧、视频需要抽掉的结束帧。
到此这篇关于Python快速从视频中提取视频帧的方法详解的文章就介绍到这了,更多相关Python提取视频帧内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。