python 视频分割处理

视频分割成图片

将视频逐帧读取时使用下面程序,需要隔几帧再读的话在cv2.imwrite前加上判断c%帧数==0

import tempfile
import cv2
frame_dir = os.path.join(tempfile.mkdtemp(), 'frame.jpg') # 使用缓存
video_path = 'dataset/'
video_name = 'person01.mp4'
vc = cv2.VideoCapture(video_path+video_name) #读入视频文件
c = 0
rval = vc.isOpened()
while rval:
    c = c + 1
    rval, frame = vc.read()  # 进行当前帧的读取
    if rval:
        cv2.imwrite(frame_dir, frame)  # 往frame_dir中加载当前帧
        func(frame_dir)  # 把当前帧传入自己定义的func函数尽情操作吧
    else:
        break
vc.release()

图片合成视频

运行下面的代码进行图片合成视频后,还有个问题就是,必须开始合成下一个视频的时候,当前视频才能播放,可能是opencv不自动写结束符的原因

# 算图片分辨率
image = cv2.imread('dataset/'+ 'bear' + '/figure0.jpg')
image_info=image.shape
height=image_info[0]
width=image_info[1]
size=(height,width)
print(size)

# 合成视频
video = cv2.VideoWriter('sr7.mp4', cv2.VideoWriter_fourcc('m', 'p', '4', 'v'), 30, (width, height)) 
"""
参数1 即将保存的文件路径
参数2 VideoWriter_fourcc为视频编解码器
    fourcc意为四字符代码(Four-Character Codes),顾名思义,该编码由四个字符组成,下面是VideoWriter_fourcc对象一些常用的参数,注意:字符顺序不能弄混
    cv2.VideoWriter_fourcc('I', '4', '2', '0'),该参数是YUV编码类型,文件名后缀为.avi
    cv2.VideoWriter_fourcc('P', 'I', 'M', 'I'),该参数是MPEG-1编码类型,文件名后缀为.avi
    cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'),该参数是MPEG-4编码类型,文件名后缀为.avi
    cv2.VideoWriter_fourcc('T', 'H', 'E', 'O'),该参数是Ogg Vorbis,文件名后缀为.ogv
    cv2.VideoWriter_fourcc('F', 'L', 'V', '1'),该参数是Flash视频,文件名后缀为.flv
    cv2.VideoWriter_fourcc('m', 'p', '4', 'v')    文件名后缀为.mp4
参数3 为帧播放速率
参数4 (width,height)为视频帧大小
"""
for i in range(3):
    file_name = 'dataset/' + 'bear' + '/figure' + str(i) + '.jpg'  # 当前帧
    print(file_name)
    image=cv2.imread(file_name)
    video.write(image)

posted @ 2022-01-25 11:14  IamIron-Man  阅读(243)  评论(0)    收藏  举报