opencv在视频的指定区间跳跃截图

Posted Eureka

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv在视频的指定区间跳跃截图相关的知识,希望对你有一定的参考价值。

内容简单,只是用了

video_capture.set(cv2.CAP_PROP_POS_FRAMES, start_fps)

来从指定位置播放视频而已。


在此记录一下。

import cv2
import os

video_path = \'D:/test/ccc/mp4/1.mp4\' #视频路径
picSavePath = \'./save/\' #图片保存路径
os.makedirs(picSavePath, exist_ok=True)



start_second= 760 #设置开始时间(单位秒)
end_second= 790   #设置结束时间(单位秒)



video_capture = cv2.VideoCapture(video_path) # 读取视频
fps = video_capture.get(cv2.CAP_PROP_FPS)    # 获取视频的帧率
print(fps)


start_fps = start_second*fps    # 开始帧 = 开始时间*帧率
end_fps = end_second*fps        # 结束帧 = 结束时间*帧率


video_capture.set(cv2.CAP_PROP_POS_FRAMES, start_fps) # 设置读取的位置,从第几帧开始读取视频
k = start_fps
while True:
    success, frame = video_capture.read()
    if success:
        k += 1
        if k <= end_fps: # 选取起始帧
            if k % (fps*2) == 0: # 每隔2s保存一次图片

                # 将 【秒数】 格式化为 【时:分:秒】
                seconds =k//fps
                m, s = divmod(seconds, 60)
                h, m = divmod(m, 60)
                print("保存时间点:%2d:%02d:%02d" % (h, m, s))
             
                time = "%d_%02d_%02d" % (h, m, s)   # 冒号不能出现在图片保存的路径中,换成一个别的字符
                cv2.imwrite(picSavePath + time+\'.jpg\', frame)
            
    if k > end_fps: #退出读取程序
        break


print(\'end\')
video_capture.release()

如果要剪辑多段,就在最外层加一个循环就好了

import cv2
import os

video_path = \'D:/test/ccc/mp4/1.mp4\' #视频路径
picSavePath = \'./save/\' #图片保存路径
os.makedirs(picSavePath, exist_ok=True)



start_second= [760,800] #设置开始时间(单位秒)
end_second= [790,830]   #设置结束时间(单位秒)

print(start_second*3)

video_capture = cv2.VideoCapture(video_path) # 读取视频
fps = video_capture.get(cv2.CAP_PROP_FPS)    # 获取视频的帧率
print(fps)



start_fps = [i * fps for i in start_second]    # 开始帧 = 开始时间*帧率
end_fps = [i * fps for i in end_second]        # 结束帧 = 结束时间*帧率
# 注意:如果单纯的用列表乘以一个数,则表示将这个列表拼接三份

for i in range(len(start_fps)):
    video_capture.set(cv2.CAP_PROP_POS_FRAMES, start_fps[i]) # 设置读取的位置,从第几帧开始读取视频
    k = start_fps[i]
    while True:
        success, frame = video_capture.read()
        if success:
            k += 1
            if k <= end_fps[i]: # 选取起始帧
                if k % (fps*2) == 0: # 每隔2s保存一次图片

                    # 将 【秒数】 格式化为 【时:分:秒】
                    seconds =k//fps
                    m, s = divmod(seconds, 60)
                    h, m = divmod(m, 60)
                    print("保存时间点:%2d:%02d:%02d" % (h, m, s))
                
                    time = "%d_%02d_%02d" % (h, m, s)   # 在windows系统下冒号不能出现在图片保存的路径中(linux下可以),换成一个别的字符
                    cv2.imwrite(picSavePath + time+\'.jpg\', frame)
                
        if k > end_fps[i]: #退出读取程序
            break


    print(\'第 {%d}段完成\'% (i+1))
video_capture.release()

以上是关于opencv在视频的指定区间跳跃截图的主要内容,如果未能解决你的问题,请参考以下文章

如何用opencv读取avi视频并在界面截图进行人脸检测

opencv学习-截图(图像和视频)

opencv入门-截图(图像和视频)

opencv学习之路鼠标截图,滑动条播放视频

以指定的时间间隔录制视频,然后将它们保存到文件 OpenCv Python

JavaCV开发详解之26补充篇3:指定视频在某个时间截图,支持视频文件和rtsp/rtmp/flv/hls等视频流指定时间截图