美文网首页
Python | 常规的视频操作

Python | 常规的视频操作

作者: yuanCruise | 来源:发表于2019-06-12 07:50 被阅读0次

    常规的视频操作主要有:缩小视频分辨率,分辨率不变缩小视频保存空间,加快视频播放速度等功能。不得不说,利用Python及其相应的第三方库,能使得很多功能变的实现变得更加便捷。

    利用Python的第三方库opencv,实现上述的常规视频操作的代码如下所示。后面将对代码段中各语句块功能进行详细描述。

    import cv2
    from cv2 import VideoWriter,VideoWriter_fourcc
    
    video_root ="D:/yuanlei/test.avi"
    out_root = "D:/yuanlei/out.avi"
    
    cap = cv2.VideoCapture(video_root)
    fps = cap.get(cv2.CAP_PROP_FPS)
    video_width = cap.get()
    video_height = cap.get()
    
    resize_width = 1280
    resize_height = 960
    double_fps = 2*fps
    
    fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
    videoWriter = cv2.VideoWriter(out_root,fourcc,fps,(1280,960))
    
    success = cap.isOpened()
    while (success):
        success,frame = cap.read()
        print("Read a new frame:",success)
        if not success:
            break
        frame = cv2.resize(frame,(1280,960))
        videoWriter.write(frame)
    videoWriter.release()
    

    如下部分的代码段,主要用于提取输入视频帧的各种原生参数,比如视频的帧率,视频帧的宽高信息等。

    cap = cv2.VideoCapture(video_root)
    fps = cap.get(cv2.CAP_PROP_FPS)
    video_width = cap.get()
    video_height = cap.get()
    

    如下部分的代码段,用于计算需要对视频做一下操作时的参数,比如需要改变视频分辨率的对应宽高,又比如需要改变视频播放速度的帧率。

    resize_width = 1280
    resize_height = 960
    double_fps = 2*fps
    

    如下代码段,用于限定输出视频的编码格式,不同的编码格式所对应的存储空间差别较大,可以根据自己的需求改变对应的编码格式,opencv支持的编码格式有如下几种。

    fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
    四个字符用来表示压缩帧的codec 例如:
    CV_FOURCC('P','I','M','1') = MPEG-1 codec
    CV_FOURCC('M','J','P','G') = motion-jpeg codec
    CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec
    CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec
    CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec
    CV_FOURCC('U', '2', '6', '3') = H263 codec
    CV_FOURCC('I', '2', '6', '3') = H263I codec
    CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec
    NOTE:生成文件占用空间最小的编码方式是MPEG-4.2 codec。
    在VideoWriter类的构造函数参数为CV_FOURCC('M', 'P', '4', '2') 。
    最大的是MPEG-1 codec,
    对应在VideoWriter类的构造函数参数为CV_FOURCC('P','I','M','1') ,
    所占磁盘空间是前者的5.7倍。
    所以如果需要24小时全天候录制监控,可以优先使用MPEG-4.2的编解码方式。
    

    通过如下代码段,将提前设置好的需要对视频做更改的参数输入,构建一个视频输出流接口,用于对视频帧进行改变并重新写成视频。

    videoWriter = cv2.VideoWriter(out_root,fourcc,fps,(1280,960))
    

    最终通过如下代码段,对视频的每一帧进行读取和相应的操作,如下实例中是要将视频的每一帧的分辨率修改为(1280,960),所以需要对每一帧视频做resize之后,在通过上述构建的videoWriter写成视频。若是改变视频速度的话,已经在构建videoWriter的时候通过fps限定了,那么在该过程中只需要直接写入视频帧即可。

    success = cap.isOpened()
    while (success):
        success,frame = cap.read()
        print("Read a new frame:",success)
        if not success:
            break
        frame = cv2.resize(frame,(1280,960))
        videoWriter.write(frame)
    videoWriter.release()
    

    相关文章

      网友评论

          本文标题:Python | 常规的视频操作

          本文链接:https://www.haomeiwen.com/subject/idnhfctx.html