如何用AI和FFmpeg自主开发替代付费录屏工具?

摘要:写在前面 最近在训练 QwenVL 模型时,需要大量的视频素材。由于数据源在客户的远程电脑上(通过向日葵访问),我需要录制一段监控实时视频作为训练数据。 本以为这是一个简单的任务,没想到却引发了一段有趣的开发经历。 寻找录屏软件的困境 打开
写在前面 最近在训练 QwenVL 模型时,需要大量的视频素材。由于数据源在客户的远程电脑上(通过向日葵访问),我需要录制一段监控实时视频作为训练数据。 本以为这是一个简单的任务,没想到却引发了一段有趣的开发经历。 寻找录屏软件的困境 打开浏览器,搜索"录屏软件",映入眼帘的是琳琅满目的选择。随便下载了一款看起来不错的软件,安装、启动、开始录制... 一切都很顺利,直到... "您的免费录制时长已用完,请开通VIP会员" 看着屏幕上弹出的提示,再看看右上角的倒计时,我愣住了。1分钟?就这? 卸载软件时,我习惯性地打开安装目录,想看看有没有残留文件。就在这时,一个熟悉的文件名跳入眼帘: ffmpeg.exe 恍然大悟 看到这个文件的那一刻,我突然意识到:这不就是我用过无数次的那个开源神器吗?既然软件底层用的是FFmpeg,那我为什么不自己动手呢? 打开AI助手,输入需求: "帮我写一个Qt6录屏软件,需要手动选定区域,点击录屏即可" AI很快就给出了完整的代码实现。复制、粘贴到Qt项目中,编译运行...结果当然是没那么顺利。 遇到的那些坑 坑一:FFmpeg路径问题 第一次运行,程序提示"FFmpeg Not Found"。奇怪,明明系统里已经安装了FFmpeg。 检查发现,虽然命令行可以直接调用ffmpeg,但Qt程序运行时读取的PATH环境变量并不包含FFmpeg的安装路径。解决方法是直接在代码中指定完整路径: QString specificPath = "E:/ffmpeg/bin/ffmpeg.exe"; if (QFile::exists(specificPath)) { ffmpegPath = specificPath; } 坑二:录制区域背景全黑 选择录制区域时,整个屏幕背景全黑,完全看不清要选择什么区域。这显然不是想要的效果。 通过修改RegionSelector的实现,启用透明背景和半透明遮罩: setAttribute(Qt::WA_TranslucentBackground); // 启用透明背景 painter.fillRect(rect(), QColor(0, 0, 0, 100)); // 半透明遮罩 这样选择区域时,选中区域完全透明,其他区域半透明黑色,既清晰又美观。 坑三:录制的视频无法播放 视频文件生成了,但播放器打不开。原因是停止录制时直接终止了FFmpeg进程,没有让它优雅地完成文件写入。 解决方案:向FFmpeg发送q命令,让它自己完成收尾工作: ffmpegProcess->write("q"); // 优雅停止 ffmpegProcess->waitForFinished(5000); 最终效果 经过几轮与AI的"对话式调试",最终实现了一个功能完整的录屏工具: 自由选择录制区域 可调节帧率(15/30/60 FPS) 可调节画质(CRF值) 支持音频录制(可选) 实时显示录制时长 生成标准MP4格式视频 最关键的是:完全免费,没有任何限制。 一点感悟 回头看看这个过程,不禁感叹: 时代真的变了。 以前遇到这种需求,我需要: 花时间搜索各种软件 下载试用,遇到各种限制 要么付费,要么找破解版(不安全) 或者自己花几天时间研究FFmpeg参数 现在呢?打开AI,描述需求,复制代码,遇到问题继续问AI,1小时搞定。 但是,不管时代怎么变,FFmpeg这样的开源项目永远值得致敬。没有它,AI生成的代码也无法运行。我们只是站在巨人的肩膀上,让AI帮我们更好地使用这些工具。 技术栈 开发框架: Qt6 视频编码: FFmpeg (libx264) 开发语言: C++17 写在最后 如果你的需求和我类似,需要录制视频素材,不妨试试自己动手。代码已经有了,FFmpeg是免费的,AI助手随时待命。为什么不呢? 毕竟,自己造的轮子,才最适合自己的车。 代码在我的快速开源框架中:https://www.cnblogs.com/tlink/p/19582758 ps:单独录屏功能分支上线,windows版本已经打包,地址为:https://gitee.com/Tlink/machine/tree/TlinkScreenRecorder/ 发行版下载即可 关注我,带你每天进步亿点点