导语:一个 0.8B 参数的小模型,在 Mac Studio M2 Ultra 上做到了给视频实时配字幕:每秒处理一帧,3 分 49 秒的片子一共输出 269 帧描述,全程离线不联网。Demo 和模型权重都已开源,下载清单见文末。
一场把小模型逼到极限的本地演示
10 月 27 日,安全研究员 @0x0SojalSec 在 X 上转了 @stevibe 的一段演示,顺手附上了 Hugging Face 上的模型链接:一个 0.8B 的小模型,硬是在 Mac 上把视频”边播边讲”了一遍。
这事儿吧,得从两边儿看。先看炫的那面——界面右侧的字幕是流式吐出来的,每一帧都配一段自然语言描述:

截图里的时间戳很有意思。FRAME 142 描述”一只手水平托着浅绿色矩形物体”,FRAME 143 补一句”人物以垂直方向握着一台浅绿色的 iPad,Apple 标识清晰可见”。这不是”检测到一只手、置信度 0.98″,而是”它看见了什么、像在描述”。
往前翻几十秒,描述还能接着往下写:

三个数字值得记住:269 帧对应 3 分 49 秒的片长,约每秒一帧且低于 1 秒延迟;字幕随播放实时刷新,随时暂停随时能读;而”1GB”指的是模型权重——演示默认加载的是 mlx-community/Qwen3.5-0.8B-MLX-8bit,权重 955MB 加分词器 19MB,合计约 980MB。机器本身是 64GB 显存的 Mac Studio M2 Ultra,别被”1GB”误导成整台机器只吃 1GB 内存。
三层架构:浏览器抓帧,本地推理
官方仓库 stevibe/local-llm-video-captioning(MIT 协议,163 星、23 fork)把链路写得很清楚:
- 前端是 React + Tailwind,浏览器负责逐帧抓取视频画面;
- 中间挂一个 Express 小代理(默认 8787 端口),把帧转成流式请求;
- 后端是本地
mlx_vlm.server(默认 8081 端口),在 Apple Silicon 上用 MLX 做视觉推理。

几个细节挺讲究:每帧输出上限 MLX_MAX_TOKENS=180,免得模型为一帧写一篇小论文;启动脚本会先发一个预热请求,让第一帧不至于因为模型还在加载而掉队;首次启动才会从 Hugging Face 拉权重。
还有一个容易忽略的点——它走的是 mlx-vlm 的视觉栈而不是纯文本的 mlx-lm,因为送进模型的是视频帧图像,而不是视频文件。
模型本身:0.8B 到底什么水平
Qwen3.5-0.8B 是官方多模态小模型,Apache-2.0 协议,Hugging Face 上已累计 367 万次下载。规格上:0.8B 参数、24 层、隐藏维度 1024,混合架构把 Gated DeltaNet 线性注意力和稀疏 MoE 的 FFN 交替堆叠 6 组,原生上下文 262,144 token,默认非思考模式但支持开启 thinking。
图片和视频都能吃:走 vLLM 或 SGLang 的 OpenAI 兼容接口,直接传 video_url 就行,默认按 fps=2 抽帧。
但别把它当知识库使唤。非思考模式下 MMLU-Pro 只有 29.7、C-Eval 46.4,比同门 2B 版本低一截。它的强项是”看着这帧说清楚”,不是”回答世界是什么”。
下载清单
模型和 Demo 全部可下,链接都验证过:
| 用途 | 地址 | 体积 |
|---|---|---|
| 官方权重(bf16,transformers/vLLM 用) | https://huggingface.co/Qwen/Qwen3.5-0.8B | 1.63 GB |
| Mac 演示同款(MLX 8bit) | https://huggingface.co/mlx-community/Qwen3.5-0.8B-MLX-8bit | 约 980 MB |
| 更省的 MLX 4bit | https://huggingface.co/mlx-community/Qwen3.5-0.8B-4bit | 约 622 MB |
| GGUF(llama.cpp / LM Studio) | https://huggingface.co/lmstudio-community/Qwen3.5-0.8B-GGUF | Q4_K_M 503MB + mmproj 195MB |
| 全量化 GGUF | https://huggingface.co/bartowski/Qwen_Qwen3.5-0.8B-GGUF | 二十余种量化 |
| Demo 源码(MIT) | https://github.com/stevibe/local-llm-video-captioning | — |
命令行版本:
hf download Qwen/Qwen3.5-0.8B --local-dir ./Qwen3.5-0.8B
hf download mlx-community/Qwen3.5-0.8B-MLX-8bit --local-dir ./Qwen3.5-0.8B-MLX-8bit
拉下代码后启动整套 Demo(仅 Apple Silicon):
git clone https://github.com/stevibe/local-llm-video-captioning.git
cd local-llm-video-captioning
npm install && uv sync --python 3.11 && cp .env.example .env
./scripts/start-mlx-server.sh
npm run dev:all
只想看效果的话,MLX 自带命令行就够:
pip install -U mlx-vlm
python -m mlx_vlm.generate --model mlx-community/Qwen3.5-0.8B-4bit
--max-tokens 100 --temperature 0.0 --prompt "Describe this image." --image <path>
紫队视角:炫技之外的几点提醒
红队这边要泼点冷水。 第一,它并非”理解视频”,而是逐帧描述——没有时序记忆,前一帧和后一帧的描述可能自相矛盾,也不会说出”刚才那只手把杯子放下了”这种跨帧结论。第二,0.8B 的幻觉率不低,偏偏输出又长又像真的,直接灌进合规证据链风险不小。第三,小模型对对抗性输入相当脆弱,屏幕上一个特制的贴纸就可能让描述整体跑偏。第四,”全本地”还有另一面:模型跑在谁的机器上、日志存在哪、谁能改,这些也得有人管。
蓝队这边也有实在好处。 1GB 内存 + 全离线,意味着视频不出门,做初筛的成本几乎为零。逐帧描述天然带时间戳,正好当粗筛层——先把可疑片段挑出来,再交给人复核,比让人盯几百小时录像现实得多。而且本地部署意味着供应链在自己手里,版本、来源、权重都能自己盯。
总结
0.8B 能不能干活,看的不是参数表,是被放到什么场景里。这个 Demo 的价值不在”多了一个字幕工具”,而在于它把”视频理解”的部署门槛从”大显存服务器”拉到了”1GB 内存的 Mac”,而且是纯离线的。红队这波操作我给满分——把模型逼到极限才是真本事;蓝队要做的,是别把”能跑”当成”能信”。
版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。














暂无评论内容