Qwen3.5-0.8B本地实时视频字幕:Mac上每秒一帧,269帧全程离线

导语:一个 0.8B 参数的小模型,在 Mac Studio M2 Ultra 上做到了给视频实时配字幕:每秒处理一帧,3 分 49 秒的片子一共输出 269 帧描述,全程离线不联网。Demo 和模型权重都已开源,下载清单见文末。


一场把小模型逼到极限的本地演示

10 月 27 日,安全研究员 @0x0SojalSec 在 X 上转了 @stevibe 的一段演示,顺手附上了 Hugging Face 上的模型链接:一个 0.8B 的小模型,硬是在 Mac 上把视频”边播边讲”了一遍。

这事儿吧,得从两边儿看。先看炫的那面——界面右侧的字幕是流式吐出来的,每一帧都配一段自然语言描述:

Qwen3.5-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 做视觉推理。
Demo官方预览:模型桥接状态与流式描述面板

几个细节挺讲究:每帧输出上限 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.8B1.63 GB
Mac 演示同款(MLX 8bit)https://huggingface.co/mlx-community/Qwen3.5-0.8B-MLX-8bit约 980 MB
更省的 MLX 4bithttps://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-GGUFQ4_K_M 503MB + mmproj 195MB
全量化 GGUFhttps://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”,而且是纯离线的。红队这波操作我给满分——把模型逼到极限才是真本事;蓝队要做的,是别把”能跑”当成”能信”。

版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容