如何使用python中的opencv将视频的特定部分保存到单独的视频中?
我有一个视频,我想用帧号获得视频的特定部分并保存它们 例如,如果有一个视频,它总共有200帧,我想提取视频的一些特定部分,比如从第15帧到第30帧、第50帧到第79帧等等,我想分别保存这些部分如何使用python中的opencv将视频的特定部分保存到单独的视频中?,python,opencv,video-editing,Python,Opencv,Video Editing,我有一个视频,我想用帧号获得视频的特定部分并保存它们 例如,如果有一个视频,它总共有200帧,我想提取视频的一些特定部分,比如从第15帧到第30帧、第50帧到第79帧等等,我想分别保存这些部分 cap= cv2.VideoCapture('Trademill.mp4') video_length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) print ("Number of frames: ", video_length) succe
cap= cv2.VideoCapture('Trademill.mp4')
video_length = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print ("Number of frames: ", video_length)
success,image = cap.read()
count = 0
while success:
cv2.imwrite("frame%d.jpg" % count, image)
success,image = cap.read()
count += 1
如何使用python和OpenCV实现这一点?以下是我的实现方法:
import cv2
file = "video.avi"
parts = [(15, 30), (50, 79)]
cap = cv2.VideoCapture(file)
ret, frame = cap.read()
h, w, _ = frame.shape
fourcc = cv2.VideoWriter_fourcc(*"XVID")
writers = [cv2.VideoWriter(f"part{start}-{end}.avi", fourcc, 20.0, (w, h)) for start, end in parts]
f = 0
while ret:
f += 1
for i, part in enumerate(parts):
start, end = part
if start <= f <= end:
writers[i].write(frame)
ret, frame = cap.read()
for writer in writers:
writer.release()
cap.release()
while
循环,但在此之前,定义一个变量以跟踪while循环在捕获设备中的帧:循环中使用for
循环,而在循环中,循环零件的开始帧和结束帧,使用枚举
方法允许程序在需要时访问每次迭代的零件索引。如果在while
循环之前定义的变量介于(包括)部件的开始和结束之间,则将该帧写入相应的视频写入器(使用enumerate
方法提供的索引):
我在h,w,=frame.shape中得到一个错误。当我打印图像时,它没有给出任何信息。即使当我打印的宽度和高度和帧,我得到0。我也检查了路径,它是正确的。我保存的视频部分没有播放。请告诉我该怎么解决this@codexx您是如何输入路径的?这是视频的完整路径吗?我试着输入了整个路径,只是名称太多了,两者都没有working@codexxWindows还是Linux?它是Windows。当我打印一个特定的帧时,该帧不显示,并且显示为无响应。
import cv2
file = "video.avi"
parts = [(15, 30), (50, 79)]
cap = cv2.VideoCapture(file)
ret, frame = cap.read()
h, w, _ = frame.shape
fourcc = cv2.VideoWriter_fourcc(*"XVID")
writers = [cv2.VideoWriter(f"part{start}-{end}.avi", fourcc, 20.0, (w, h)) for start, end in parts]
f = 0
while ret:
f += 1
for i, (start, end) in enumerate(parts):
if start <= f <= end:
writers[i].write(frame)
ret, frame = cap.read()
for writer in writers:
writer.release()
cap.release()