内容简略,只是用了

video_capture.set(cv2.CAP_PROP_POS_FRAMES, start_fps)

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


在此记录一下。

import cv2import osvideo_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_fpswhile 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: #退出读取程序        breakprint('end')video_capture.release()

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

import cv2import osvideo_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()