在多模态大模型(VLM)爆发的今天,高质量的视频微调数据是训练的关键。然而,传统的“每秒截一帧”策略既浪费存储空间,又会引入大量无效冗余信息。
如何从任意视频中自动提取“最少帧 + 完整字幕”,且不需要 A100 这样的昂贵显卡?
今天为大家介绍我开发的开源项目 —— AMFS++ (Adaptive Multimodal Frame Selection)。这是一个专为 VLM 微调数据构建设计的工具,它能智能地“看懂”视频,只保留最有价值的画面和字幕。
👉 GitHub 项目地址: 【eve23333333/video2】
✨ 核心特性:为什么要用 AMFS++?
AMFS++ 不仅仅是一个简单的截图工具,它是一个完整的视频语义压缩流水线。
- 资源极度友好:专为消费级显卡优化,RTX 4060 (8GB VRAM) 即可流畅运行。
- 全平台支持:Linux / macOS / Windows (New!) 完美适配。
- 智能自适应选帧:
- 👀 视觉变化:基于光流(Optical Flow)捕捉运动。
- 🧠 语义多样性:基于 CLIP 确保画面内容不重复。
- 📝 文本变化:结合 OCR(可选)捕捉关键文字信息。
- 高质量数据输出:直接生成用于训练的 JSONL 格式(多图 + 文本 + 元数据),并自动去除重复帧(pHash + CLIP)。
- 强大的音频处理:集成 Faster-Whisper,支持中/英 ASR,自动生成带时间戳的字幕。
🛠️ 技术原理解析
AMFS++ 的工作流程模仿了人类“浏览”视频的方式:
- 镜头切分 (PySceneDetect):先把视频按镜头切开,防止跨镜头造成的画面突兀。
- 听觉理解 (Faster-Whisper):提取全片字幕,理解视频在讲什么。
- 多维评估 (Adaptive Selection):
- 画面动了吗?(光流)
- 意思变了吗?(CLIP Feature)
- PPT翻页了吗?(OCR - WIP)
- 去重与输出:利用 pHash 和 CLIP 相似度剔除重复画面,最后将选中的关键帧与对应时间窗的字幕打包成 JSONL。
📊 实战测评:真实场景下的表现
为了验证 AMFS++ 的泛化能力,我选取了多种类型的视频进行测试。以下是 8GB 显存环境下的真实测试报告:
1. 🎮 游戏与 MMD (高动态)
- 表现:优秀。
- 细节:在游戏画面主体高速运动时,算法精准截取了 8 个关键动作帧;MMD 舞蹈视频中,人物大幅度的动作变化也被成功捕捉。
- 挑战:背景光影的大幅闪烁有时会被误判为内容变化,导致少量冗余截帧。
2. 📚 历史讲解 (高密度信息)
- 表现:SOTA 级表现。
- 细节:这是一个 7 分钟的视频,夹杂了大量历史影像资料和密集字幕。AMFS++ 截取了 365 张图片,完美保留了所有关键的历史画面和文本信息点,压缩比适中且保留了语义完整性。
3. 🎓 教程类 (静态为主)
- 表现:极其精简。
- 细节:整个视频仅截取 2 帧。因为画面多为静态演示,主要信息都在字幕中。
- 待优化:发现 PaddleOCR 在某些特定场景下未能触发选帧(已列入 TODO 修复计划),目前主要依赖字幕覆盖。
4. 🏸 体育与电视剧 (多主体)
- 表现:中规中矩。
- 细节:对于羽毛球比赛和多人电视剧,目前的算法在捕捉特定人物神态或区分主体上稍显吃力。
- 未来计划:计划引入 InsightFace,增强对人脸和主体的识别能力。
5. 🔞 长视频压力测试 (21分钟)
- 表现:极高压缩率。
- 细节:21分钟视频仅截取 33 帧。
- 发现的问题:其中有 10 帧是黑屏转场。这提示我们需要在后处理阶段加强对纯色/黑屏帧的去重过滤。
💻 快速上手指南
1. 环境准备
推荐使用 Python 3.10+,建议创建虚拟环境。 code Bashdownloadcontent_copyexpand_less
# 创建并激活虚拟环境
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 安装依赖
pip install -r requirements.txt
2. 模型准备
为了保证运行速度和效果,请预先从 HuggingFace 下载以下模型并放置在项目根目录:
- faster-large-v3-turbo (ASR)
- models/clip/ViT-B-32 (视觉特征)
3. 一行命令运行
处理本地视频: code Bashdownloadcontent_copyexpand_less
python -m amfs.pipeline --input "若叶睦cos.mp4" --out "out/test_final" --base-fps 2
处理 B 站视频 (直接 URL): code Bashdownloadcontent_copyexpand_less
python -m amfs.pipeline --input "https://www.bilibili.com/video/BVxxxx" --out out/demo_bili
输出产物
运行结束后,你将获得:
- frames/*.jpg: 精选的高质量关键帧。
- samples.jsonl: 直接可用于 VLM 微调的数据格式。
- asr.json: 完整的字幕文件。
🔮 Roadmap 与 未来计划
基于目前的测试结果,AMFS++ 还在持续进化中:
- OCR 增强:修复并优化 PaddleOCR 的触发逻辑,确保 PPT/教程类视频不遗漏关键文字。
- 人脸/主体增强:引入 InsightFace,让工具更懂“人”。
- 黑屏/转场过滤:优化去重逻辑,自动剔除无效的转场黑屏。
- 音频节奏感知:未来计划加入音频节奏提取,让鬼畜/音乐类视频的切分更精准。
如果你正在寻找一种高效、低成本的方式来构建多模态数据集,欢迎尝试 AMFS++!
🌟 觉得好用请给个 Star 支持一下!
eve23333333/video2
💡 博客写作建议 (给作者):
- 配图:在博客中插入几张“输入视频 vs 输出关键帧拼图”的对比图,效果会非常直观。特别是“历史讲解”那种密集信息被拆解的样张。
- 代码块高亮:确保发布平台支持代码高亮。
- 模型下载链接:如果可能,提供一下你使用的 HuggingFace 具体模型的超链接,方便小白用户直接下载。
- Windows 亮点:可以在标题或显眼处再次强调 Windows 支持,因为很多类似工具对 Windows 支持不佳,这是一个很大的差异化优势。

Comments NOTHING