python将视频一帧一帧的处理然后实时显示,python逐帧读取视频处理
当视频的关键内容被提取出来后,手动观看会比较耗时。即使视频快进,一个小时的视频也要十几分钟甚至更久。通常,一秒钟的视频包含24帧图像。如果能“捕捉”到视频中的关键帧,尤其是长时间拍摄类似镜头的场景,将有助于过滤掉大部分“嘈杂”的帧,最大程度地提取视频的核心内容。
1.两个核心库PyAV和Pillow。pip安装-I https://pypi.douban.com/simple/av
pip install-I https://pypi.douban.com/simple/枕头
2.主要测试代码如下:#-*-编码:UTF-8-*-@作者:TJM @软件:pycharm @ file: pyav _ test.py @时间:2021/11/1 11: 10 #虚拟环境:py36 _ py36提取视频导入关键帧avimport osimport shutil # #原始视频存放的目录dir _ video _ src=OS . path . join(OS . getcwd(),。\ \ /videos)#存储目录dir _ video _ des=OS . path . join(OS . getcwd(),。\ \ images) #扫描视频文件并检查是否有视频文件print(dir _ video _ src \ r \ n )list _ video=[]for item _ filename in OS . list dir(dir _ video _ src):list _ video . append(item _ filename)print(item _ filename)if len(list _ video)==0:print(。\\videos\\:视频文件不存在)#定义函数def extract _ video(文件名):container=av.open(文件名)#表示我们只想看关键帧。stream=container . streams . video[0]stream . codec _ context . skip _ frame= non key for frame in container . decode(stream):frame . to _ image()。保存(帧。{:04d}。巴布亚新几内亚。format(frame.pts),Quality=80,)#提取关键帧并保存def do _ video 2 image():for filename in list _ video:File _ dir _ desc=OS . path . join(dir _ video _ des,Filename)如果不是OS . path . exists(File _ dir _ desc):OS . makedirs(File _ dir _ desc)print(自动创建:,File_dir_desc) else: print(合并的目录已经存在)#提取关键帧Extract _ video(OS . path . join(dir _ video _ src,Filename))filename _ png中的 png: # shut.move (filename _ png,File _ dir _ desc)shutil . copy 2(filename _ png,File _ dir _ desc)OS . remove(filename _ png)print(filename _ png)if _ _ name _= _ _ main _ :do _ video 2 image()3 .运行后,效果如何
在一个48秒视频的情况下,最终提取了5个关键帧,大大提高了视频观看的效率,也支持批量视频操作。
请注意,关键帧的数量与视频的拍摄质量和时间延迟有关。如果镜头移动缓慢,拍摄清晰度高,关键帧提取的效果会越好。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。