小试视频文件逐帧保存图片(Python方法)

日常生活中可能会遇到一种需要从视频文件中抓取关键画面的情况,如刑侦警察断案看案件视频监控关键帧,特别是做美工的同事(当然他们有诸如premier和AE这样的专业软件可以实现),一般人手动暂定播放并截图的确可以做到,但还是有点累,下面要说的方法是利用Python实现的(当然Python还是比较方便,支持的库很多,C/C++,QT等等都是可以实现的),其实原理也简单,利用第三方库(主要OpenCV,很多视频图像处理都是用它)获取视频文件属性,包括帧率和时长,那么会得出所要生成的帧数 = 帧率 X 时长,确定了帧数后面第三方库就对视频进行等分处理保存图片了。

在正式处理之前,咱们可以对视频文件进行初次编辑,如只想对01:20:30 - 1:21:45之间这段内容进行编辑,一个笨方法是利用QQ影音自带视频截取功能或格式工厂进行操作生成新的视频片段,视频的帧率也可以重新编辑,从格式工厂里面操作即可改变帧率,提高帧数,具体操作请自行百度。

自从近一两年Python的广告加剧铺天盖地无孔不入以来,内心对Python产生了嫌弃之意,行动上也不再碰它好久了,但不得不承认在某些方面它还是表现的很好滴。

#以下两种方式均可以实现逐帧保存图片的目的

import cv2
import numpy as np
def save_image(image,addr,num):
    #存储的图片路径
    address=addr+str(num)+'.jpg'
    #存储图片
    cv2.imwrite(address,image)
#读入视频
videoCapture=cv2.VideoCapture("E:\Python Project\GetFrame\Video\Frame.mp4")
#读取视频帧
success,frame=videoCapture.read()
i=0
while success:
    i=i+1
    #保存图片,图片名称是img5.jpg
    save_image(frame,'E:\Python Project\GetFrame\Image\img',i)
    if success:
        print('save image:',i)
    else:
        print('save img done!')
        break
    #读取视频帧
    sucess,frame=videoCapture.read()

# 下方代码保存的是PNG格式,占用空间较大
# import cv2
# import os
#
#
# def save_img():
#     video_path = 'E:/Python Project/GetFrame/Video'
#     videos = os.listdir(video_path)
#     for video_name in videos:
#         file_name = video_name.split('.')[0]
#         folder_name = video_path + file_name
#         os.makedirs(folder_name, exist_ok=True)
#         vc = cv2.VideoCapture(video_path + '/' + video_name)
#         c = 0
#         rval = vc.isOpened()
#
#         while rval:
#             c = c + 1
#             rval, frame = vc.read()
#             pic_path = folder_name + '/'
#             if rval:
#                 cv2.imwrite(pic_path + str(c) + '.png', frame)
#                 cv2.waitKey(1)
#             else:
#                 break
#         vc.release()
#         print('save_success')
#         print(folder_name)
#
#
# save_img()

注意:若pycharm提示无cv,需通过IDE下载安装pythoncv.

以上代码为网友提供,实现代码很多,博主只是微调运行测试了一下,效果不错,以做记录留存。

原代码博客地址:https://blog.csdn.net/Jelly_11/article/details/107810066?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-1.nonecase

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值