使用python+opencv对视频中一段进行提取,保存为mp4或者avi格式

直接看代码吧,我在旁边会给出注释

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()  # 关闭读取视频对象
posted @ 2021-07-13 16:46  小Aer  阅读(75)  评论(0编辑  收藏  举报  来源