内容简单,只是用了
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()
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。