直接看代码吧,我在旁边会给出注释
import cv2 as cv
# 1.源视频处理
capture = cv.VideoCapture("resource.mp4") # 首先获取并打开源视频,这个自己弄好路径就好
# 获取开始帧和介绍帧,start和end 是我们想要从整个视频中想要截取的一小段视频的开始和结束
start = 0
end = 100
# 2.创建一个写入视频对象
output = './target.mp4' # 这是我们要保存的一小段视频的文件路径,要精确到文件名
# 下面三个cap.get我加了int()强制类型转换,因为返回的是float类型,在创建写入视频对象时不允许,也有可能有的opencv版本不需要,大家可以自行尝试判断,加一个不碍事
fps = 25 # fps = int(cap.get(cv2.CAP_PROP_FPS)) 获取视频帧数,或者自己写
weight = 1920 # width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) 获取视频宽,或者自己写
height = 1080 # height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) 获取视频长,或者自己写
# fourcc = cv.VideoWriter_fourcc('M', 'J', 'P', 'G') 用于avi格式的生成的参数
fourcc = cv.VideoWriter_fourcc(*'mp4v') # 用于mp4格式的生成的参数
videowriter = cv.VideoWriter(output, fourcc, fps, (weight, height)) # 创建一个写入视频对象
# 3.开始保存目标视频
capture.set(cv.CAP_PROP_POS_FRAMES, start) # 设置开始帧
pos = capture.get(cv.CAP_PROP_POS_FRAMES) # 获取当前帧数
while pos < end: # 从start到end之间读取帧数
ret, frame = capture.read() # 从开始帧开始读取,之后会从开始帧依次往后读取,直到退出循环
videowriter.write(frame) # 利用'写入视频对象'写入帧
pos = capture.get(cv.CAP_PROP_POS_FRAMES) # 获取当前帧数pos
videowriter.release() # 关闭写入视频对象
capture.release() # 关闭读取视频对象