当前位置: 首页 > 后端技术 > Python

opencv在视频指定区间跳转

时间:2023-03-25 23:08:42 Python

内容很简单,使用video_capture.set(cv2.CAP_PROP_POS_FRAMES,start_fps)从指定位置开始播放视频即可。在这里记下来。importcv2importosvideo_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#startframe=starttime*framerateend_fps=end_second*fps#endframe=endtime*frameratevideo_capture.set(cv2.CAP_PROP_POS_FRAMES,start_fps)#设置读取位置,从哪一帧开始读取视频k=start_fpswhileTrue:success,frame=video_capture.read()ifsuccess:k+=1ifk<=end_fps:#选择起始帧ifk%(fps*2)==0:#saveevery2sImage#Format[seconds]as[时:分:秒]seconds=k//fpsm,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)ifk>end_fps:#退出阅读程序breakprint('end')video_capture.release()如果要编辑多段,在最外层加个循环即可importcv2importosvideo_path='D:/test/ccc/mp4/1.mp4'#视频路径picSavePath='./save/'#图片保存路径os.makedirs(picSavePath,exist_ok=True)start_second=[760,800]#set开始时间(秒)end_second=[790,830]#设置结束时间(秒)print(start_second*3)video_capture=cv2.VideoCapture(video_path)#读取视频fps=video_capture.get(cv2.CAP_PROP_FPS)#获取视频帧rateprint(fps)start_fps=[i*fpsforiinstart_second]#startframe=starttime*framerateend_fps=[i*fpsforiinend_second]#endframe=endtime*framerate#注意:如果你简单的用一个数乘一个list,就是把list拼接成三份foriinrange(len(start_fps)):video_capture.set(cv2.CAP_PROP_POS_FRAMES,start_fps[i])#设置读取位置,从多少个frames开始读取视频k=start_fps[i]whileTrue:success,frame=video_capture.read()ifsuccess:k+=1ifk<=end_fps[i]:#选择起始帧ifk%(fps*2)==0:#每2s保存一次图片#Format[seconds]as[hour:minute:second]seconds=k//fpsm,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)ifk>end_fps[i]:#退出阅读程序breakprint('th{%d}片段完成'%(i+1))video_capture.release()