惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security @ Cisco Blogs
P
Privacy & Cybersecurity Law Blog
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Threatpost
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Project Zero
Project Zero
C
CERT Recently Published Vulnerability Notes
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Cisco Blogs
博客园 - 司徒正美
L
LINUX DO - 热门话题
D
Docker
M
MIT News - Artificial intelligence
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Microsoft Security Blog
Microsoft Security Blog
Cisco Talos Blog
Cisco Talos Blog
Jina AI
Jina AI
Last Week in AI
Last Week in AI
Security Latest
Security Latest
The Hacker News
The Hacker News
L
Lohrmann on Cybersecurity
Y
Y Combinator Blog
A
Arctic Wolf
小众软件
小众软件
T
Threat Research - Cisco Blogs
Know Your Adversary
Know Your Adversary
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
I
InfoQ
腾讯CDC
Google DeepMind News
Google DeepMind News
B
Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
C
CXSECURITY Database RSS Feed - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - 叶小钗
I
Intezer
NISL@THU
NISL@THU
A
About on SuperTechFans
爱范儿
爱范儿
C
Cybersecurity and Infrastructure Security Agency CISA
D
Darknet – Hacking Tools, Hacker News & Cyber Security
G
Google Developers Blog
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Cyberwarzone
Cyberwarzone
AWS News Blog
AWS News Blog
Engineering at Meta
Engineering at Meta
Latest news
Latest news

博客园 - Tlink

电子积木 光敏电阻与光敏电阻模块:从原理到实战应用 电子小白:什么是PCB(印刷电路板) 电子小白:万用表使用场景 电子小白的枕边书:电子学(The Art of Electronics) 电子小白:光耦到底是什么? 数码管与LED点阵:电子世界的“像素屏幕” 熟悉电子元器件之后,电子小白下一步该怎么走? 电子小白:什么是运算放大器(运放) 电子小白入门:什么是稳压芯片? 电子小白入门之NE555 电子小白的工具三件套:面包板、杜邦线、万能板 电子小白入门:步进电机以及驱动器到底是个啥? 电子小白之集成电路 AI新时代真的来了,不管愿意还是不愿意 avalonia在国产芯片瑞芯微RK3588这么容易就跑起来了? 电子小白之晶振 电子小白之电感:通过无线充电带你彻底搞懂电感 电子小白之继电器 电子小白之MOS管 电子小白之三极管 电容是什么?一个“快充快放”的微型充电宝 电子小白之二极管 电压与电流之间的关系 电子电路中的“心脏”:电源 新手小白学电路
从付费软件到自主开发:我用AI和FFmpeg实现了一个录屏工具
Tlink · 2026-03-25 · via 博客园 - Tlink

写在前面

最近在训练 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格式视频

最关键的是:完全免费,没有任何限制

一点感悟

回头看看这个过程,不禁感叹:

时代真的变了。

以前遇到这种需求,我需要:

  1. 花时间搜索各种软件
  2. 下载试用,遇到各种限制
  3. 要么付费,要么找破解版(不安全)
  4. 或者自己花几天时间研究FFmpeg参数

现在呢?打开AI,描述需求,复制代码,遇到问题继续问AI,1小时搞定。

但是,不管时代怎么变,FFmpeg这样的开源项目永远值得致敬。没有它,AI生成的代码也无法运行。我们只是站在巨人的肩膀上,让AI帮我们更好地使用这些工具。

技术栈

  • 开发框架: Qt6
  • 视频编码: FFmpeg (libx264)
  • 开发语言: C++17

写在最后

如果你的需求和我类似,需要录制视频素材,不妨试试自己动手。代码已经有了,FFmpeg是免费的,AI助手随时待命。为什么不呢?

毕竟,自己造的轮子,才最适合自己的车

代码在我的快速开源框架中:https://www.cnblogs.com/tlink/p/19582758

微信图片_20260325145052_7545_907

ps:单独录屏功能分支上线,windows版本已经打包,地址为:https://gitee.com/Tlink/machine/tree/TlinkScreenRecorder/ 发行版下载即可

ScreenShot_2026-03-27_161902_120

关注我,带你每天进步亿点点
关注我,带你每天进步亿点点