学习ffmpeg-录屏实现记录

news2024/11/27 18:34:53

项目需要一个录屏的功能,之前看到了一个使用Qt计时器+截图+avilib生成AVI+ffmpeg合并视频音频的方式:

Qt C++ 录屏录音功能实现(avilib+ffmpeg)以及动态库生成

https://blog.csdn.net/qq_35769071/article/details/125323624

使用后,出现不少问题;首先32位的avilib里的pos是有符号的long型,如果要保存的图片大小大于long型的有效范围,则会崩溃;如果是1920*1080的分辨率,视频只能保存2分钟左右;其次是视频和音频是分别录制的,需要使用ffmpeg.exe合并,如果连续录制2个小时,avi和mav的大文件使用ffmpeg合并,可能会出现问题;

同事找到了一个开源的C#例子,Captura-9.0.0-beta4,可以支持选择区域录制;底层是用process调用的ffmpeg的命令实现的;

还是觉得应该使用C++的ffmpeg库来实现该功能;

同学推荐了基本ffmpeg的书和以及编译可用的Windows库,有需要的可以从下面链接下载;

链接:https://pan.baidu.com/s/1xnHlS0KLUelzSqT5nUleLg

提取码:hl1q

这里贴一个ffmpeg实现录屏的地址;

FFMPEG录屏(1)----录制桌面

https://blog.csdn.net/peilinok/article/details/102981560

里面将了ffmpeg的常用使用方式,还有一个录屏的一个开源代码:

https://gitcode.net/mirrors/peilinok/screen-recorder?utm_source=csdn_github_accelerator

使用的ffmpeg

遇到的问题:

需要关闭ffmpeg的日志打印

av_log_set_level(AV_LOG_ERROR);

如果需要录制扩展屏幕,需要使用Recorder中的record_desktop_duplication类,根据get_adapters获取所有的适配器信息,主屏幕的坐标是从(0,0)开始的,扩展屏幕是相对主屏幕的坐标计算的;

auto adapters = d3d_helper::get_adapters(&error, true);

在函数get_dst_adapter内修改,for内逻辑,需要将adapters内的每个适配器的信息记录下来,然后决定录制那个屏幕;还有一个问题,如果获取屏幕的缩放比例?

int record_desktop_duplication::get_dst_adapter(IDXGIAdapter ** adapter)

如果主屏幕有缩放,就需要计算出相对于1920*1080的位置,拿我的屏幕举例:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【.dll 没有被指定在windows上运行】

修复(重新注册DLL)的具体步骤如下: 方法一: 1、快捷键winr打开“运行”输入cmd,点击确定打开命令提示符窗口。 2、复制:for %1 in (%windir%\system32*.dll) do regsvr32.exe /s %1 命令,在打开的管理员…

ubuntu安装vue

首先建议使用ubuntu18.04以上的系统,不然会有类似fcntlGLIBC_2.28‘未定义的引用的报错 VUE官网:http://caibaojian.com/vue/guide/installation.html 其中安装说明只写到:npm install vue 我们还需要安装node.js、npm 1、安装 NVM&#xf…

Windows安装TensorRT

文章目录前言TensorRT下载TensorRT安装参考资料前言 本文将介绍Windows如何安装TensorRT。本文的基础是:Windows安装PytorchCUDA环境 TensorRT下载 进入官方网站:https://developer.nvidia.com/nvidia-tensorrt-8x-download 寻找自己对应的版本&#…

RabbitMQ之Work Queue(工作队列)

前言:大家好,我是小威,24届毕业生,曾经在某央企公司实习,目前在某税务公司。本篇文章将记录和分享RabbitMQ工作队列相关的知识点。 本篇文章记录的基础知识,适合在学Java的小白,也适合复习中&am…

【自学Python】Python string转bytes

Python string转bytes Python string转bytes教程 在 Python 中,bytes 类型和 字符串 的所有操作、使用和内置方法也都基本一致。因此,我们也可以实现将字符串类型转换成 bytes 类型。 Python string转bytes方法 如果字符串内容都是 ASCII 字符&#…

从0到1完成一个Vue后台管理项目(十六、后端分页方法以及分页组件的封装以及复用)

往期 从0到1完成一个Vue后台管理项目(一、创建项目) 从0到1完成一个Vue后台管理项目(二、使用element-ui) 从0到1完成一个Vue后台管理项目(三、使用SCSS/LESS,安装图标库) 从0到1完成一个Vu…

C++STL——list类与模拟实现

Listlistlist的常用接口模拟实现完整代码list与vector的区别list list是一个带头双向循环链表。 list文档介绍:https://legacy.cplusplus.com/reference/list/list/ list因为是链表结构,所以没有 [] 去访问数据的方式,只有用迭代器&#xff…

第十六届中国大数据技术大会五大分论坛顺利举办!

1月8日下午,由苏州市人民政府指导、中国计算机学会主办、苏州市吴江区人民政府支持,CCF大数据专家委员会、苏州市吴江区工信局、吴江区东太湖度假区管委会、苏州市吴江区科技局、苏州大学未来科学与工程学院及DataFounain数联众创联合承办的第十六届中国…

基于java springboot+mybatis学生学科竞赛管理管理系统设计和实现

基于java springbootmybatis学生学科竞赛管理管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言…

10.Isaac教程--在Docker中通过模拟训练目标检测

在Docker中通过模拟训练目标检测 文章目录在Docker中通过模拟训练目标检测怎么运行的主机设置硬件要求软件要求NGC Docker 注册表设置第一次运行数据集生成配置您的工作区Jupyter 变量设置开始训练添加您自己的 3D 模型故障排除接下来人工智能中的一个常见问题是训练样本的数据…

02【Http、Request】

文章目录02【Http、Request】一、HTTP协议1.1 HTTP协议概述1.1.1 HTTP协议的概念1.1.2 HTTP协议的特点:2.1 HTTP请求的组成2.1.1 请求行2.1.2 请求头2.1.3 请求体二、HttpServletRequest对象2.1 HttpServletRequest对象简介2.2 HttpServletRequest的使用2.2.1 请求行…

Redis未授权访问漏洞(三)Redis写入反弹连接定时任务

前言 系列文章 Redis未授权访问漏洞(一)先导篇 Redis未授权访问漏洞(二)Webshell提权篇 Redis写入反弹连接任务 环境准备 攻击机: Centos7 IP:192.168.142.44 靶机:Centos7 IP:192.168.142.66 我们先来回顾一下corntab定时任务的一些基本命令&#xf…

python数据分析及可视化(二十)Power BI的可视化制作以及A股上市公司数据分析

可视化制作 通过图表展示如何用Power BI 制作可视化的图表,来展示可视的数据内容。 柱形图 用水平的柱子来表示不同分类数据的大小,类似于条形图,相当于竖着的条形图。堆积柱形图是不同的序列数据都堆积在一个柱子上,簇状柱形图…

【Spring源码】20. MergedBeanDefinitionPostProcessor修改/合并bean定义

随后进入applyMergedBeanDefinitionPostProcessors()方法applyMergedBeanDefinitionPostProcessors()方法中调用MergedBeanDefinitionPostProcessor后置处理器修改/合并bean定义 进入bdp.postProcessMergedBeanDefinition(mbd, beanType, beanName) 从源码中可以看到&#xff0…

Spring为什么这么火 之 Spring蕴含的设计思想

目录 1、什么是IoC? 2、传统程序开发 3、控制反转式程序开发 4、理解Spring IoC 5、依赖注入【DI】 前言 很多人说:“Java程序员都是Spring程序员”,从这句话就能看出,对于Java程序员来说,Spring是一项必备技能&am…

Mathorcup数学建模竞赛第六届-【妈妈杯】B题:车位分布的优化设计与评价(附一等奖获奖论文、C++和matlab代码)

赛题描述 随着现代社会经济的快速发展,房地产成为国家经济发展中重要的经济增长点之一。而小区内汽车停车位的分布对于小区居民的上下班出行影响很大。请建立数学模型,解决下列问题: 问题1:分析评判小区汽车停车位分布是否合理的几个关键指标,建立评判车位分布合理的数学…

C语言常用字符串函数

专栏:C语言 每日一句:别在乎别人的目光,自己只管一心走路。熬过去,你就能看到柳暗花明,熬过去,你就能看到雨后彩虹,熬过去,你就能看到动人风景。 字符串函数前言一、求字符串长度&am…

UDS - 10.3 ECUReset (11) service

10.3 电子控制单元复位(11)服务 来自:ISO 14229-1-2020.pdf 10.3.1 服务说明 客户端使用ECUReset服务请求服务器重置。 此服务请求服务器基于ECUReset请求消息中嵌入的resetType参数值的内容有效地执行服务器重置。ECUReset肯定响应消息&am…

剑指 Offer 26树的子结构(相关话题:对称性递归,在线算法)

目录 开篇引言 题目描述 代码实现 题目拓展 拓展解读 一类 100. 相同的树 226. 翻转二叉树 104. 二叉树的最大深度 110. 平衡二叉树 543. 二叉树的直径 617. 合并二叉树 572. 另一个树的子树 965. 单值二叉树 二类 101. 对称二叉树 解题总结 开篇引言 力扣上…

Vue引入并使用Element-UI组件库的两种方式

前言 在开发的时候,虽然我们可以自己写css或者js甚至一些动画特效,但是也有很多开源的组件库帮我们写好了。我们只需要下载并引入即可。 vue和element-ui在开发中是比较般配的,也是我们开发中用的很多的,下面就介绍下如何在eue项…