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

推荐订阅源

The GitHub Blog
The GitHub Blog
博客园 - 三生石上(FineUI控件)
V
V2EX
博客园 - 司徒正美
小众软件
小众软件
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
Last Week in AI
Last Week in AI
雷峰网
雷峰网
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
SegmentFault 最新的问题
美团技术团队
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
宝玉的分享
宝玉的分享
爱范儿
爱范儿
博客园 - 聂微东
量子位
J
Java Code Geeks
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Vercel News
Vercel News

V2EX

我用 AI 写代码,但终端管理反而成了累赘——于是我做了 codux [调研] 各位在公司都用什么 ide 和 agent 写代码? 老运维 share 一个运维平台 看到有公司考核 token 指标,很好奇大家上个月的 AI 账单是多少 GLM-Coding 调用持续报错: z.ai 的 Lite 套餐几乎无法使用,官方 Pro/Max 是否稳定? 现在还有什么渠道可以稳定安全地使用 Claude 吗? 上海漕河泾内推,本组有 2 个 hc,一个后端,一个前端,预算都是 20k 左右,不打卡,氛围好 如果 V2EX 上有一组不永久保存聊天记录(比如只保存 7 天或者 24 小时)的聊天室,那么会开启哪些有用或者有趣的可能? gemini cli 貌似挂了,一直返回 403 第一次在自媒体上赚到钱 收集了最近在使用的低价 GPT, Gemini,邮箱等 AI 会员的小店合集 讨论个大实话:现在企业还在说 AI 编程提效 20%, 30%的,真的太落后,没用懂 AI。因为包括很多前沿公司,已经狂奔到提效 200%-500%的情况 [招聘][远程][币安] 前端/后端/QA/iOS/Android 至少 3 年以上经验 目前有大量 HC 欢迎投递 Chatgpt Pro 用量用不完的可以开这些设置 面试的时候好像遇到钓鱼了,给各位避个坑 cursor 年续费 22 号到期, 自动续费是否还是老的计次套餐呢 被两件破事毁掉的一下午,琐碎的内耗消磨人的精力 使用 Planet 存储 Codex 的会话或者重要信息 如果业务部门领导不要你开发功能,而是要求你教会它用 claude code 开发功能,你会怎么做? 分享一个 MacOS 接绿联 CM818 USB 转 DP 转接器使用感受 我的 HR 朋友 10 年老 Java ,非全大专,大家帮忙看看简历 开源了一个 AI 口语练习工具,音素级发音评分,完全免费可自部署 V2EX 上有哪些你觉得很有趣、印象深刻的妹纸? 字节为啥不出个国内版 Vercel? 有在大马的朋友吗? 问个运营商问题 你们在有领导的公司大群发过的最大胆的消息是什么 公司裁员,目前没有工作。想试试摆摊,做一个移动鲜啤打酒车 我的硬盘 Memblaze Pblaze 5 Linux 下不识别,给 Linux 内核提交了补丁, AI 说有望被合并 只有我一个人觉得 codex 不好用?
公司内网不让装录屏软件,于是我用 ffmpeg 自己封装了一个 CL...
gdjdkid2014 · 2026-05-17 · via V2EX

公司内网不让装录屏软件,于是我用 ffmpeg 自己封装了一个 CLI 工具

起因很简单:公司内网管控比较严,录屏软件装不上,OBS 装不了,Win+G 又没有权限开,但 ffmpeg 不知道为什么没有被拦——它就静静地躺在某个服务器目录里,能用。

于是就想着,ffmpeg 本身支持录屏,能不能把那一长串命令参数封装一下,做成一个随时能跑的小工具,录完就走,不依赖任何需要安装权限的软件。

就这样写了这个东西,叫 ScreenRecorder-cli

项目地址:
https://github.com/gdjdkid/ScreenRecorder-cli


痛点在哪

ffmpeg 本身当然能录屏,但命令太难记了,每次临时录东西都要现查参数:

ffmpeg -f gdigrab -framerate 30 -i desktop \
  -f dshow -i audio="virtual-audio-capturer" \
  -f dshow -i audio="麦克风 (Conexant ISST Audio)" \
  -filter_complex "[1:a][2:a]amerge=inputs=2[a]" \
  -map 0:v -map "[a]" \
  -c:v libx264 -crf 23 -preset veryfast \
  -c:a aac -b:a 128k \
  recording_2025-05-17_10-30-00.mp4

音频设备名拼错一个字符就报错,时间戳要手动写,输出路径每次都要重新指定。在工作中临时录个演示或者操作步骤,效率反而比直接截图还低。

所以我想做的事情就一件:把这些参数固化下来,音频设备名保存一次,之后一条命令搞定。


目前实现了什么

  • 跨平台:Windows 用 gdigrab + dshow,macOS 用 avfoundation,Linux 用 x11grab + pulseaudio
  • 音频设备名保存到本地配置文件,下次启动直接复用
  • 默认输出目录可配置,也可以每次用 -o 临时覆盖
  • 安装时自动检测 ffmpeg 是否在 PATH 里,没有的话给出安装提示
  • Ctrl+C 优雅退出(向 ffmpeg stdin 写 q,不产生损坏文件)
  • 输出文件名自动带时间戳:recording_YYYY-MM-DD_HH-MM-SS.mp4
  • 无需安装权限,只要 ffmpeg 在 PATH 里,npm install -g 之后就能用

基本用法

# 安装
npm install -g screenrecorder-cli

# 第一次用,先查一下有哪些音频设备
screenrec devices

# 把设备名保存到配置,之后不用再输
screenrec set-device --mic "麦克风 (Conexant ISST Audio)" --system "virtual-audio-capturer"

# 开始录制,Ctrl+C 停止,文件自动保存
screenrec start

# 临时指定输出路径和帧率
screenrec start -o D:\Videos -r 60

# 不录音频
screenrec start --no-audio

# 查看当前配置
screenrec show-config

有几个地方没想清楚,想听听意见

1. Windows 系统音频需要额外装一个驱动
录系统声音需要装 screen-capture-recorder(开源的 DirectShow 驱动),不装只能录麦克风。在内网受限环境下这个驱动不一定能装,目前没找到绕过的方式,只是在文档里说明了。

2. Linux 部分是按文档写的,没有实机测过
我自己用 Windows ,Linux 下 x11grab + pulseaudio 的逻辑是照着 ffmpeg 文档写的,不同发行版差异可能不小。有 Linux 用户的话能帮忙验证一下吗。

3. 只能录全屏
目前没有窗口选择或区域选择。ffmpeg 的 gdigrab 支持 -i title=窗口标题,但窗口标题需要手动输入,不太实用。有没有更好的思路?

4. 输出格式写死了 mp4
编码用 libx264 ,没有其他格式的选项。有没有人有别的格式需求?


技术栈

  • Node.js ,CJS ,无额外框架
  • commander 做参数解析
  • 底层是 child_process.spawn 调 ffmpeg ,没用任何 ffmpeg npm wrapper

最开始只是为了解决自己工作里的问题,后来整理了一下结构,加了跨平台支持,就顺手放出来了。如果有人在类似受限的内网环境下办公,或者单纯想要一个轻量的命令行录屏方案,可以试一下。

macOS 和 Linux 用户帮忙验证一下跨平台逻辑有没有问题就更好了,Issues 和 PR 都欢迎。