• 利用OpenCV进行H264视频编码的简易方式


    在Python下,利用pip安装预编译的opencv库,并实现h264格式的视频编码。

    1. 安装OpenCV

    $ pip install opencv-python
    

    建议在python虚拟环境下安装,不容易产生相互影响。

    2. 代码示例

    读取笔记本自带摄像头,并保存为视频的最简实现。

    import cv2
    
    def main():
        output_path = './output.avi'
        vc = cv2.VideoCapture(0)
        ret, frame = vc.read()
        w = int(vc.get(cv2.CAP_PROP_FRAME_WIDTH))
        h = int(vc.get(cv2.CAP_PROP_FRAME_HEIGHT))
        fps = vc.get(cv2.CAP_PROP_FPS)
        
        fourcc = cv2.VideoWriter_fourcc('H', '2', '6', '4')
        # fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
        # fourcc = cv2.VideoWriter_fourcc('H', 'E', 'V', 'C')
        vw = cv2.VideoWriter(output_path, fourcc, fps, (w, h), True)
        while ret:
            vw.write(frame)
            ret, frame = vc.read()
            cv2.imshow('frame', frame)
            if cv2.waitKey(5) & 0xFF == ord('q'):
                cv2.destroyAllWindows()
                return -1
    
    if __name__ == '__main__':
        main()
    

    2.1 默认编码

    预编译的opencv,默认支持XVID格式的编码,但是不支持H264。

    如果将# fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')注释取消,程序可以正常运行并保存视频。

    2.2 H264支持

    按示例代码配置为H264编码,会显示如下错误提示。摄像头可以采集到图像,但是不能正常保存为视频。

    Failed to load OpenH264 library: openh264-1.8.0-win64.dll
    Please check environment and/or download library: https://github.com/cisco/openh264/releases
    
    [libopenh264 @ 000001e7a96ddec0] Incorrect library version loaded
    Could not open codec 'libopenh264': Unspecified error
    

    根据提示,到Github库中搜索对应的动态库。

    注意选取对应的版本。我安装的OpenCV版本为4.4.0.42,提示需要的动态库为openh264-1.8.0-win64.dll,在Release页中找到对应的版本,将下载获得的dll文件解压并放在与py文件同级的工程目录下。

    不同OpenCV版本可能需要的支持库版本也不同,没有测试,注意看提示就行。

    如果考虑通用性也可以将dll所在的路径加入环境变量Path中。

    本示例实现是在Windows平台下,Linux下应该也是类似的操作,下载对应的h264支持库文件,并加入到PATH能够搜索到的地址。

    重新运行程序,可以正常显示图像,并保存为视频文件。

    用Potplayer之类的播放器打开,可以在属性中看到,编码格式的相关信息:

     视频编码: H264 - Native D3D9 DXVA Decoder(VLD)
    

    2.3 H265支持

    想着用同样的方法尝试一下H265编码。

    # fourcc = cv2.VideoWriter_fourcc('H', 'E', 'V', 'C')注释取消,发现如下错误提示:

    OpenCV: FFMPEG: tag 0x43564548/'HEVC' is not found (format 'avi / AVI (Audio Video Interleaved)')'
    

    看起来目前预编译版本的OpenCV是不支持H265编码的。如果要用H265编码,需要从源码编译,并在编译过程中添加对应的支持库。看到一篇帖子有介绍,目前还没有验证。

  • 相关阅读:
    我们毕业了!!!@全体成员
    华东交通大学编译原理期末试卷
    软件设计师中级下午答题解题策略分析~
    Java实现旅行商最短距离
    基于SSH的医院在线挂号
    基于Java的模拟写字板的设计与实现
    基于java的雷电游戏
    基于Java的飞机大战游戏的设计与实现
    基于Java的超级玛丽游戏的设计与实现
    基于Javaee的影视创作论坛的设计与实现
  • 原文地址:https://www.cnblogs.com/lylec/p/13570248.html
Copyright © 2020-2023  润新知