需求分析:

需要对软件的客户区进行录屏,但是找了半天资料发现并不好集成到我的软件当中,最后发现利用cmd命令调用ffmpeg.exe可以实现录屏功能,实现录屏以及录屏格式转换,相当有趣。

知识点:

1.FFmpeg是什么

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行。首先下载ffmpeg.exe放到新建bin文件夹中。

FFmpeg有一个专用于Windows下屏幕录制的设备:gdigrab。gdigrab是基于GDI的抓屏设备,可以抓取屏幕的特定区域。支持两种方式的屏幕抓取:
(1)“desktop”:抓取整张桌面。或者抓取桌面中的一个特定的区域。
(2)“title={窗口名称}”:抓取屏幕中特定的一个窗口。(但是中文的窗口是不行的,会出现乱码!)
从屏幕的(10,20)点处开始,抓取640x480的屏幕,设定帧率为5(帧率越大越流畅的,但是太大就没什么用了,浪费资源)。
ffmpeg -f gdigrab -framerate 5 -offset_x 10 -offset_y 20 -video_size 640x480 -i desktop out.mpg  

2.如何执行cmd指令,并且隐藏进程,结束进程

请见我的另一篇文章。

功能实现:

        string ifoutput = "..bin\\output.mpg";fstream _file;_file.open(ifoutput, ios::in);//判断文件是否存在if (!_file){_file.close();}else{_file.close();DeleteFile(L"..bin\\output.mpg");//删除文件DeleteFile(L"..bin\\output.mp4");}POINT lpPoint, lpPoint1;int w = lpPoint1.x - lpPoint.x;char ww[10]; itoa(w, ww , 10);int h = lpPoint1.y - lpPoint.y;char hh[10];itoa(h, hh, 10);...
        //由于我的软件名字为中文,所以我获取的是软件在桌面的坐标char xx[10];itoa(lpPoint.x, xx, 10);char yy[10];itoa(lpPoint.y, yy, 10);
        string exe = "..\\bin\\ffmpeg.exe -f gdigrab -framerate 50 -offset_x ";exe += xx;//获取的左上角xexe += " -offset_y ";exe += yy;//获取的左上角y
exe += " -video_size ";exe += ww;exe += "x";exe += hh;exe += " -i desktop ";string output = "..\\bin\\output.mpg";//生成的是mpg格式视频exe += output;system(exe.c_str());//会出现控制台

转换为mp4格式:

        TCHAR szCommandLine[] = TEXT("..bin\\ffmpeg.exe -i ..bin\\output.mpg -vcodec libx264 -acodec aac ..bin\\output.mp4");STARTUPINFO si = { sizeof(si) };PROCESS_INFORMATION  pi; si.wShowWindow = FALSE;si.dwFlags = STARTF_USESHOWWINDOW;BOOL ret = ::CreateProcess(NULL, szCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);WaitForSingleObject(pi.hProcess, INFINITE);//等待进程完成

c++录屏、FFmpeg录屏、录屏格式转换相关推荐

  1. FFmpeg学习4:音频格式转换

    前段时间,在学习试用FFmpeg播放音频的时候总是有杂音,网上的很多教程是基于之前版本的FFmpeg的,而新的FFmepg3中audio增加了平面(planar)格式,而SDL播放音频是不支持平面格式 ...

  2. 史林枫:C#.NET利用ffmpeg操作视频实战(格式转换,加水印 一步到位)

    ffmpeg.exe是大名鼎鼎的视频处理软件,以命令行参数形式运行.网上也有很多关于ffmpeg的资料介绍.但是在用C#做实际开发时,却遇到了几个问题及注意事项,比如如何无损处理视频?如何在转换格式的 ...

  3. Java借助ffmpeg进行音视频的格式转换(如m4a转mp3)

    FFmpeg 是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用 LGPL 或GPL 许可证(依据你选择的组件) FFmpeg 官网: FFMPEG分为3个版本:Static,Shared,D ...

  4. 利用ffmpeg将.m4s的视频格式转换成.mp4

    下载ffmpeg 下载地址:https://www.gyan.dev/ffmpeg/builds/ 点击红色链接就可以下载,一般下载.zip格式就好,当然也可以选择.7z 题外话:什么是ffmpeg ...

  5. C# 使用IMAPI2行光盘刻录 支持多段封口及VCD/DVD刻录 集成FFMPEG

    使用IMAPI2 进行光盘多段/封口刻录 擦除 支持XP 03. 集成视频格式转换 获取驱动 读取光盘信息 读取媒体支持信息 读取速度值 初始化.NET FFMPEG 组件 刻录 格式化媒体>创 ...

  6. windows安装ffmpeg_免费实用的录屏工具!支持全屏、特定窗口、选定区域录制,支持添加水印、嵌入摄像头(附ffmpeg安装)...

    哈喽大家好,我是菌菌~ 在线授课.游戏录制.视频编辑.网上会议--现如今,视频录制非常火爆,一款好用的视频录制工具自然必不可少. 今天,菌菌就给大家分享3款免费又好用的电脑录屏工具,一起来看看吧! w ...

  7. 利用FFmpeg实现录屏、直播推流、音频视频格式转换、剪裁等功能

    一.FFmpeg简介. 二.FFmpeg常用参数及命令. 三.FFmpeg在Unity 3D中的使用. 1.FFmpeg 录屏. 2.FFmpeg 推流. 3.FFmpeg 其他功能简述. 一.FFm ...

  8. Mac录屏减少文件体积和格式转换

    有Mac录屏的需求,Mac自带的录屏软件挺好用的.就是默认帧率高达 60fps,文件体积比较大.文件是 .mov 格式不通用. 我平时录屏的内容就是演示一些软件的基本操作发送给客户,通常是临时录制(非 ...

  9. 桌面录屏录音技术,录屏软件原理

    要实现MP4录屏功能,有很多种方法. 方法一: 可以借助于ffmpeg工具.基于以下命令: 录制视频 ffmpeg -f dshow -i video="screen-capture-rec ...

最新文章

  1. 2016多校赛2 A 数学推公式 E 极角排序,组合数(待补) L dp+bitset优化
  2. Java项目:人事管理系统(java+javaweb+jdbc)
  3. RDKit | 分子坐标的测量和绘图
  4. es6学习---.babelrc文件
  5. 助力健康中国,国内首个中文医疗信息处理挑战榜正式发布
  6. python最流行的框架_2020年最流行Python web开发框架(下)
  7. flume spooldir bug修复
  8. pipeline代码自动生成
  9. 腾讯朋友、钉钉等被微信违规公示点名;谷歌更新安卓修复数百万台芯片漏洞;微软终止支持.NET Core 3.0 | 极客头条...
  10. B6-简析响应者链条
  11. 807. 保持城市天际线
  12. 解决方案: NIS+NFS+AUTOFS
  13. cygwin中如何使用gcc
  14. nvidia控制面板只有3d设置?
  15. 第一行代码 Hello world
  16. 如何将硬盘数据迁移包括系统一起迁移到另一个硬盘?
  17. python验证考拉兹猜想_Python考拉兹猜想输出序列代码实践
  18. 如何建立企业级数据分析能力?
  19. 我学历低,学软件测试能找到工作吗?
  20. 小红书商品详情API接口(商品详情页面数据接口)

热门文章

  1. 硬盘的读写速度如何计算
  2. 图解Linux命令之--hwclock命令
  3. 菜鸟学习Python+Selenium遇到的第一个要崩溃的问题
  4. word实现转换成图片的实现
  5. 论文阅读笔记(4):Local Convex Representation with Pruning for Manifold Clustering ,带剪枝的局部凸表达进行流形聚类
  6. 最漂亮的人是为梦想而努力的人
  7. python 字符串转ASCII码
  8. Linux三大剑客之sed
  9. bat 命令获取当前目录和子目录下的所有文件的文件名
  10. 传感器系列之4.12GPS定位传感器