[C++]让C++的opencv库支持写出h264格式视频

当我们写下面测试代码时候:

复制代码
#include <opencv2/opencv.hpp>

int main() {
    cv::VideoCapture cap("E:\\car.mp4"); // 打开默认摄像头
    if (!cap.isOpened()) {
        std::cout << "读取完毕!" << std::endl;
        return -1;
    }
    double fps = cap.get(cv::CAP_PROP_FPS);
    int width = cap.get(cv::CAP_PROP_FRAME_WIDTH);
    int height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);

    std::cout << "FPS : " << fps << std::endl;
    std::cout << "Width : " << width << std::endl;
    std::cout << "Height : " << height << std::endl;
    // 获取摄像头的帧率
   
    // 设置视频保存路径和编码格式
    cv::VideoWriter writer("output.mp4", cv::VideoWriter::fourcc('X', '2', '6', '4'), fps, cv::Size(width, height));

    cv::Mat frame;
    while (true) {
        cap >> frame; // 从摄像头读取新的帧
        if (frame.empty()) {
            std::cerr << "ERROR: 帧获取失败" << std::endl;
            break;
        }

        writer.write(frame); // 将帧写入视频

        cv::imshow("Frame", frame);
        if (cv::waitKey(5) >= 0)
            break;
    }

    // 释放资源
    cap.release();
    writer.release();
    cv::destroyAllWindows();

    return 0;
}

结果发现无法写出视频,原因是h264由于版权限制没有被ffmepg支持,而opencv又是依据ffmepg编译的,至今都不能被支持,报错截图:

因此我查阅了很多资料,根据官方issue建议重新编译ffmpeg源码才行,而且又得与opencv适配非常麻烦,虽然理论可行,但是这个不是比较懂底层编程的人很难完成,而且我发现网上都是理论上讲解从来没有一个弄出来可以用的库。因此这个办法显然不靠谱,后面我找到一个简单方法,只需要集成到opencv库里面即可。这个库(已经包含完整opencv库和集成的库,直接引用即可)下载地址如下:

https://download.csdn.net/download/FL1623863129/89112613

最后我运行上面一模一样的代码,成功保存h264格式视频 ,提示明显和以前不一样,而且保存视频可以正常用potplayer打开

注意上面提示不支持自动切换成avc1,avc1格式也是h264编码一种,这次可以成功保存视频了而且发现比mp4v,xvid等编码小了很多。注意我的测试环境为:

vs2019

opencv4.7.0 x64库

相关推荐
晴天的雨.9921 小时前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
linux_cfan10 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
知识分享小能手11 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
赛博仓鼠11 小时前
秋叶ComfyUI 3.2整合包实测:Python 3.13+Torch 2.13全栈升级,一键跑通MiniMax H3(附完整部署)
ai·ai作画·aigc·音视频
qq_1998868711 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
2401_8390805412 小时前
C++常见八股
数据结构·c++·算法
qq_1998868713 小时前
第6板块 第2节 CUDA运行时API与驱动API 核心笔记
c++·人工智能·gpu算力
江畔柳前堤13 小时前
字节跳动·大模型应用知识手册
前端·人工智能·深度学习·opencv·目标检测·重构·transformer
乐橙开放平台13 小时前
从「多套客户端」到一套开放能力:乐橙视频监控能力复盘
笔记·物联网·自动化·音视频·智能家居
syagain_zsx13 小时前
算法基础篇 · 03 枚举(C++ 题解)
c++·算法·二进制·枚举