首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >#WorkBuddy# 让 AI 替我写个录屏工具:ffmpeg 从黑窗到 GUI 的踩坑实录

#WorkBuddy# 让 AI 替我写个录屏工具:ffmpeg 从黑窗到 GUI 的踩坑实录

原创
作者头像
用户12814938
修改于 2026-10-15 06:08:55
修改于 2026-10-15 06:08:55
100
举报

场景

我平时要录一些操作教程:屏幕画面加麦克风讲解,双击就能录,录完出 MP4。市面工具要么带水印要么收费,于是我干脆让 AI 助手用 ffmpeg 给我现场写一个。需求听起来很简单:双击启动一个小窗口 GUI,点大红按钮开始录制,再点一下停止并保存。结果这个"简单需求"踩了一整天的坑,把过程记下来,权当给同样想用 ffmpeg 做录屏的朋友排雷。

过程

第一步是拿 ffmpeg 本体。我一开始让脚本从 gyan.dev 直下安装包,九分钟过去 35MB 还没下完,直接超时。后来换思路:pip install imageio-ffmpeg,这个包自带一个完整的 ffmpeg.exe,装完从包目录里拷出来就能用,全程 25 秒。缺什么先想想哪个 Python 包顺路捎带了它,往往比啃官网镜像快得多。

录制本体倒是不难,gdigrab 抓屏 + dshow 采麦克风,30fps 编 h264,一行命令搞定,3 秒测试视频画面声音双流正常。真正的坑全在周边。

坑一:快捷方式写完就消失

我用 Windows 的 IShellLink COM 接口直接往桌面写 .lnk 快捷方式,写完当场查还在,过一会儿再看没了。反复几次才确认:是运行环境的安全机制会把脚本直接创建的 .lnk 当可疑对象清掉,而普通文本文件没事。解法很土但有效:先把 .lnk 写到一个"安全"目录,再用普通文件复制(cp)放到桌面,复制出来的快捷方式就稳定存活了。

坑二:图标白板

快捷方式有了,图标却是白板。我先用截屏抓现场定位(比反复问用户快得多),最后挖出真因:IShellLink 的 SetIconLocation 必须把图标路径和索引分成两个参数传,比如路径传 camera2.ico、索引单独传 0;我把 "camera2.ico,0" 整串塞进路径参数,系统就去找一个名字叫 camera2.ico,0 的文件,当然白板。用 pywin32 时 IconLocation="path,0" 会自动帮你拆,但裸调 ctypes 必须手动拆,这是个非常隐蔽的 API 差异。

顺手总结的图标修复三板斧:一是用 ie4uinit.exe -show 重建图标缓存(Win10 有效);二是给快捷方式改个名,新路径会分到新的缓存槽位;三是怀疑图标文件本身不被解析时换个格式重生成。三板斧下来图标正常渲染。

坑三:MSYS 路径搅局

给录制加降噪滤镜时,滤镜串里的 C\:/ 和冒号总被 Git Bash 环境强制转换,ffmpeg 收到的参数已经面目全非。绕法是不在命令行里硬拼:给 ffmpeg 进程设置固定的 WorkingDirectory,把 RNNoise 降噪模型用相对路径引用(m=sh.rnnn),彻底避开路径改写。在 MSYS/Git Bash 环境下跑带盘符和冒号的命令,永远要留个心眼。

坑四:麦克风太安静 + 底噪

实测麦克风收音峰值只有 -26dB,不是权限问题,是增益太低。ffmpeg 侧用 speechnorm 做响度归一,先把 e 参数从 12 拉到 25 才够用;再叠降噪链:highpass=f=180 切掉低频隆隆、afftdn 做 FFT 降噪、arnndn 挂 RNNoise 神经网络模型,最后 speechnorm 提人声。声谱图对比,全频段底噪从 -75dBFS 压到 -100 以下,效果肉眼可见。

还有一个容易忽略的点:改了脚本必须把旧窗口杀掉重开。PowerShell 脚本只在窗口打开时加载一次,用户拿着没关的旧窗口录出来永远是旧引擎,我还以为是滤镜没生效,白查了半天。

总结

这次实战的核心经验可以归成四条:

  1. 依赖优先找"顺路货":imageio-ffmpeg 自带 ffmpeg.exe,比直下安装包快二十倍;
  2. COM API 的隐式拆参:裸 ctypes 调 IShellLink,SetIconLocation 的路径和索引必须分开设,pywin32 的便利让你忘了这一层;
  3. 写完被清就换个写入方式:.lnk 直接写会被安全机制回收,先写后复制就能活;
  4. 改了脚本杀旧进程:长驻窗口类工具,脚本只在启动时加载,不杀旧窗口的修改等于没改。

最后附上本次用到的关键命令,可直接复制:

代码语言:txt
复制
:: 拿 ffmpeg(25 秒方案)
pip install imageio-ffmpeg
python -c "import imageio_ffmpeg,shutil;shutil.copy(imageio_ffmpeg.get_ffmpeg_exe(),'C:/ScreenRec/ffmpeg.exe')"

:: 屏幕加麦克风录制(30fps / h264 / aac)
ffmpeg -f gdigrab -framerate 30 -i desktop -f dshow -i audio="麦克风名称" -c:v h264 -c:a aac output.mp4

:: 四段降噪+响度归一滤镜链
-af highpass=f=180,afftdn=nr=24:nf=-40:tn=1,arnndn=m=sh.rnnn,speechnorm=e=25:r=0.0005:l=1

:: 重建图标缓存
ie4uinit.exe -show

一个小工具踩下来,比读十篇教程记得牢。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 场景
  • 过程
  • 坑一:快捷方式写完就消失
  • 坑二:图标白板
  • 坑三:MSYS 路径搅局
  • 坑四:麦克风太安静 + 底噪
  • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档