Opencv Python:图片与视频互转

视频转图片

# -*- coding: UTF-8 -*-
"""
@项目名称:PlayerCharOCR.py
@作   者:陆地起飞全靠浪
@创建日期:2022-03-11-15:24
"""
import cv2 as cv
def test_video_2_img():
    vedio_path = '单视频.mp4'
    imgDir = '.'.join(vedio_path.split('.')[0:-1]) 
    if not os.path.exists(imgDir):
        os.mkdir(imgDir)
    vc = cv.VideoCapture(vedio_path)
    c = 0
    if vc.isOpened():
        rval, frame = vc.read()
        rate = round(vc.get(5))  # 帧速率
        frame_number = vc.get(7)  # 视频文件的帧数
        duration = frame_number / rate / 60  # 帧速率/视频总帧数=时间s,除以60之后单位是分钟
    else:
        print('未能打开视频'.format(vedio_path))
        rval = False
    space_num = 0.5  # 隔几秒抽一帧
    while rval:
        c += 1
        rval, frame = vc.read()
        if c % int(rate * space_num) != 0:
            continue  # 间隔抽取
        try:
            # 保存
            if frame is None:
                continue
            cv.imwrite(imgDir + '/' + str(time.time()) + '.jpg', frame)
            cv.waitKey(1)
        except:
            print('未能保存图片:', imgDir + '/' + str(c) + '.jpg')
    vc.release()

图片转视频

def test_img_2_video_opencv():
    width, height = 960, 544
    img_dir = 'Img'  # 图片文件夹
    save_dir = 'img_2_video.mp4'
    # 保存地址,视频格式,播放速读,视频宽、高*'mp4v'
    fourcc = cv.VideoWriter_fourcc(*'mp4v')
    video_out = cv.VideoWriter(save_dir, fourcc, fps=25, frameSize=(width, height))

    # 其它格式的图片也可以
    for filename in glob.glob(f'{img_dir}/*'):
        img_np = cv.imread(filename)
        # 缩放为相同大小的图片
        img_r = cv.resize(img_np, (width, height)).astype('uint8')
        video_out.write(img_r)
    video_out.release()  # 释放资源

关键配置参数(2种写法效果一样)

#文件扩展名:mp4。
cv.VideoWriter_fourcc('m', 'p', '4', 'v')
cv.VideoWriter_fourcc(*'mp4v')
#文件扩展名:avi。未压缩的YUV颜色编码,4:2:0色度子采样。兼容性好,但文件较大。
cv.VideoWriter_fourcc('I','4','2','0')
cv.VideoWriter_fourcc(*'I420')
#文件扩展名:avi。MPEG-1编码类型,随机访问,灵活的帧率、可变的图像尺寸、定义了I-帧、P-帧和B-帧 、运动补偿可跨越多个帧 、半像素精度的运动向量 、量化矩阵、GOF结构 、slice结构 、技术细节、输入视频格式。
cv.VideoWriter_fourcc('P','I','M','1')
cv.VideoWriter_fourcc(*'PIM1')
#文件扩展名:avi。MPEG-4编码类型,视频大小为平均值,MPEG4所需要的空间是MPEG1或M-JPEG的1/10,它对运动物体可以保证有良好的清晰度,间/时间/画质具有可调性。
cv.VideoWriter_fourcc('X','V','I','D')
cv.VideoWriter_fourcc(*'XVID')
#件扩展名:ogv。音频压缩格式,有损压缩,类似于MP3等的音乐格式,兼容性差。
cv.VideoWriter_fourcc('T','H','E','O')
cv.VideoWriter_fourcc(*'THEO')
#文件扩展名为:flv。文件极小、加载速度极快。
cv.VideoWriter_fourcc('F','L','V','1')
cv.VideoWriter_fourcc(*'FLV1')

你可能感兴趣的:(python,python,视频,opencv)