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

news/2024/4/30 19:29:45

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

#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库 


http://www.mrgr.cn/p/58786756

相关文章

flutter 创建第一个项目(二)

新建flutter project 项目这样就创建出了第一个项目

HarmonyOS-基础之动画

1、是什么? 动画可以在UI界面发生变化时,提供渐变过渡效果,提升用户体验。 动画的实现原理是通过在一段时间内连续播放一系列静止画面(帧),从而产生流畅的视觉效果。 ArkUI 提供了多种动画接口,例如:显式动画、属性动画、转场动画等,来实现各种动画效果。 2、显示动画…

基于yolov2深度学习网络的螺丝螺母识别算法matlab仿真

1.算法运行效果图预览 2.算法运行软件版本 matlab2022a3.算法理论概述在工业自动化和质量控制领域,准确且高效的螺丝螺母识别至关重要。深度学习方法,特别是基于卷积神经网络(CNN)的目标检测技术,因其卓越的特征提取能力,成为解决此类问题的有效手段。YOLOv2作为实时目标…

FactoryMethod工厂方法模式详解

目录 模式定义实现方式简单工厂工厂方法主要优点 应用场景源码中的应用 模式定义 定义一个用于创建对象的接口&#xff0c;让子类决定实例化哪一个类。 Factory Method 使得一个类的实例化延迟到子类。 实现方式 简单工厂 以下示例非设计模式&#xff0c;仅为编码的一种规…

设计模式系列:简单工厂模式

作者持续关注 WPS二次开发专题系列&#xff0c;持续为大家带来更多有价值的WPS二次开发技术细节&#xff0c;如果能够帮助到您&#xff0c;请帮忙来个一键三连&#xff0c;更多问题请联系我&#xff08;QQ:250325397&#xff09; 目录 定义 特点 使用场景 优缺点 (1) 优点…

2.JavaScript

变量/对象 声明 var - 绑定到window,无法清理,且重复声明会污染全局(尽量不用) let - 只在 let 命令所在的代码块 {} 内有效 const - 与let类似但它是只读常量,值不可修改 参考视频 增删改查 let obj={}//创建对象 obj.a=1//新增属性a,值为1 obj[1]=1//新增属性1,值为1(…

【Jenkins】Jenkins自动化工具介绍

目录 技术背景常规的手动打包步骤 Jenkins简介起源与发展Jenkins的核心价值1.自动化1.1代码构建1.2测试自动化1.3自动部署 2.持续集成与持续部署CI/CD的概念如何减少集成问题更快速地发布软件版本 Jenkins优势Jenkins的主要竞争对手Travis CI:CircleCI:GitLab CI: Jenkins与其他…

JVM主要知识点详解

目录 1. 性能监控和调优 1.1 调优相关参数 1.2 内存泄漏排查 1.3 cpu飙⾼ 2. 内存与垃圾回收 2.1JVM的组成&#xff08;面试题&#xff09; 2.2 Java虚拟机栈的组成 2.3 本地方法栈 2.4 堆 2.5 方法区&#xff08;抽象概念&#xff09; 2.5.1 方法区和永久代以及元空…

20. 缓冲池

缓冲池介绍每次读写数据都是通过Buffer Pool;当Buffer Pool中没有用户所需要的数据时,才去硬盘中获取;通过innodb_buffer_pool_size进行设置总容量; 该值设置的越大越好; innodb_buffer_pool_instances 设置为多少个缓冲池;总容量 还是 innodb_buffer_pool_size 设置 多个…

python-常用数据结构(2)

6、某企业为职工发放奖金:如果入职超过5年,且销售业绩超过15000元的员工,奖金比例为0.2;销售业绩超过10000元的员工,奖金比例为0.15:销售业绩超过5000元的员工,奖金比例为0.1;其他奖金比例为0.05。如果是人职不超过5年,且销售业绩超过4000的员工,奖金比例为0.045;否则为0.01。输…

jenkins拉取github代码报错问题解决

问题起因: 踩坑踩坑 用jenkins拉取github项目的代码时,配置完成点击构建时,报错信息为:Couldnt find any revision to build. Verify the repository and branch configuration for this job. 解决方式: jenkins拉取git项目时,默认使用的主分支是master,gitee项目的默认…

为什么钱难赚? 因为你想的到和想不到的方向, 都有人在做了

赚钱三途:钱生钱、资源换现、劳力智力。多数人仰赖后者,却遭遇市场饱和、创新先被占位。以自媒体工具为例,“集中分发”表面蓝海实则竞争炽热,专业需求复杂,非业内者难以精准满足。虽有技术,个人开发者受限API权限、资质,难与大厂较量。赚钱的种类 大家都知道, 赚钱无非…

3dmax云渲染100怎么收费?渲染100邀请码1a12

3dmax云渲染平台有很多&#xff0c;它们的收费标准是什么&#xff1f;这次我们一起来看看吧。 以渲染100云渲染平台为例&#xff0c;它的价格分为以下几个档次&#xff1a;1、48线程 48线程是价格最低的档次&#xff0c;使用单台服务器渲染&#xff0c;价格是2.7元每小时&#…

MyBatis-08-Spring的MyBatis Interceptor

addInterceptor3个地方XML 解析的 SqlSessionFactoryBean: 生成 SqlSession 的 FactoryBean PageHelperAutoConfiguration: 分页助手的自动配置SqlSessionFactoryBean 发现现在都没有将他作为一个 FactoryBean 使用了 getObject 调用了 afterPropertiesSet 生成 SqlSessionFact…

性能测试汇总一

目录 性能测试流程​编辑性能相关概念 什么是新能测试 性能测试思维 性能测试环境要求 负载测试 压力测试 可靠性测试 稳定性测试 压力测试 容量测试 性能指标 并发用户数 响应时间 TPS 吞吐量 吞吐率 QPS 性能测试流程 测试准备 性能测试环境搭建 性能测试…

第1章:自动驾驶车辆“规划”与“控制”的通用架构

1.1 自动驾驶的分级 2014年美国汽车工程师学会 (SAE) 定义了6个无人驾驶等级&#xff0c;从0级&#xff08;完全手动&#xff09;到5级&#xff08;完全自动&#xff09;&#xff0c;这些无人驾驶等级准则已经被美国交通部采纳&#xff1b;该标准也被称为SAE标准&#xff1b; …

[Java、Android面试]_18_详解Handler机制 常见handler面试题(非常重要,非常高频!!)

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&#xff0c;后续会陆续分享出来&#xff0c;感兴趣的朋友可关注收…

结对编程-c++四则运算

题目: 小学老师要每周给同学出300道四则运算练习题。 –这个程序有很多种实现方式: C/C++ C#/VB.net/Java Excel Unix Shell Emacs/Powershell/Vbscript Perl Python –两个运算符,100 以内的数字,不需要写答案。 –需要检查答案是否正确,并且保证答案在 0..100 之间 –尽可…

重载全局的new和delete

重载全局的new和delete ::operator new ::operator new[] -> 不可以被声明与同一个namespace之内 new会执行三个动作: -> 之前的代码提到:new本身会开辟内存空间.所以声明方法需要一个size_t size的参数inline void* operator new(size_t size) {}::operator delete ::op…

django celery 异步任务 异步存储

环境&#xff1a;win11、python 3.9.2、django 4.2.11、celery 4.4.7、MySQL 8.1、redis 3.0 背景&#xff1a;基于django框架的大量任务实现&#xff0c;并且需要保存数据库 时间&#xff1a;20240409 说明&#xff1a;异步爬取小说&#xff0c;并将其保存到数据库 1、创建…