C++17 命令行工具:输入视频或音频,自动抽取音轨、转写成字幕,再用本地大模型生成内容总结。
- 本地 GPU 加速:whisper.cpp 静态编译,CUDA 加速(无 NVIDIA GPU 也能跑 CPU)
- 带时间戳输出:生成 SRT 字幕和逐行带时间的 TXT
- Ollama 总结:调用本地 Ollama 生成
summary.md,含主题、要点、时间线、结论 - 纯 C++ 无 Python:单个 exe,依赖只有 ffmpeg 和 Ollama
video.srt
1
00:00:00,000 --> 00:00:10,940
在我们之前测试显卡剪片生产力的时候video.txt(每行 [HH:MM:SS] 文本)
[00:00:00] 在我们之前测试显卡剪片生产力的时候
video.summary.md(四段结构:①主题 ②要点 ③关键节点时间线 ④受众与结论)
## ① 一句话主题
...
## ② 要点
...
## ③ 关键节点时间线
- [00:00:00] ...
## ④ 适用受众与一句话结论
...- Windows + Visual Studio 2022(C++ 工作负载)
- CMake 3.20+,Ninja(用
build-ninja.cmd时) - CUDA Toolkit(可选,NVIDIA GPU 加速;CPU 也能跑)
- ffmpeg(完整版)
- Ollama(可选,不需要总结就加
--no-summary)
⚠ ffmpeg 裁剪版坑
项目目录里那个约 7MB 的
ffmpeg.exe是--disable-everything裁剪构建,没有 AAC 解码器、不能输出 WAV,无法用于抽音轨。必须使用完整版 ffmpeg,或用
--ffmpeg <完整版路径>显式指定(本机可用F:\bin\ffmpeg-4.1\ffmpeg.exe)。程序从 PATH 查找 ffmpeg(会跳过当前目录)。找不到且输入不是
.wav时直接退出,退出码 2。
build-ninja.cmd内部走 vcvars64 + Ninja + CUDA 11.8 nvcc,-DCMAKE_CUDA_ARCHITECTURES=89,产物在 build\bin\video_summary.exe。
cmake -S . -B build
cmake --build build --config Release --parallel 16链接 WinHTTP(系统库)和 third_party/whisper.cpp(add_subdirectory,静态链接,GGML_CUDA=ON)。third_party/ 是 vendored 代码,不要改动。
third_party\whisper.cpp\models\download-ggml-model.cmd large-v3-turbo约 1.5GB,下载后放到 models\ggml-large-v3-turbo.bin。国内网络可以把下载脚本里的 huggingface.co 换成 hf-mirror.com 前缀。
快速测试可用 tiny 模型(小得多,精度也低)。
video_summary [options] <输入文件>
| 参数 | 说明 |
|---|---|
-m <path> |
模型路径,默认 models\ggml-large-v3-turbo.bin,缺失时回退 tiny |
-o <prefix> |
输出前缀,默认与输入文件同目录同名 |
-l <lang> |
语言,默认 auto(自动检测) |
--ffmpeg <path> |
指定 ffmpeg 可执行文件 |
--ollama-url <url> |
Ollama 地址,默认 http://127.0.0.1:11434 |
--ollama-model <name> |
Ollama 模型,默认 qwen3:8b |
--no-summary |
跳过总结,只出字幕 |
--no-gpu |
强制用 CPU 转写(默认开启 GPU/CUDA 加速) |
-h |
中文帮助 |
build\bin\video_summary.exe -m models\ggml-large-v3-turbo.bin -l zh input.mp4
build\bin\video_summary.exe --ffmpeg F:\Code\LOLClip\bin\ffmpeg-4.1\ffmpeg.exe --no-summary input.mkvdemo.cmd自动取目录下第一个 mp4,用 large-v3-turbo + CUDA 转写,再用 qwen3:8b 总结。已实测:4 分 37 秒 1080p 视频退出码 0,中文转写 31 段,语言自动检测 zh (p=0.998)。
退出码
| 码 | 含义 |
|---|---|
| 0 | 成功(Ollama 总结失败也算成功,只打警告) |
| 1 | 参数错误或内部错误 |
| 2 | 缺依赖,比如找不到 ffmpeg |
| 3 | 转写失败 |
Ollama 没装怎么办?
加 --no-summary,只做转写。总结阶段失败不会影响退出码,仍是 0。
没有 NVIDIA GPU? 正常构建即可,走 CPU 推理,速度慢一些。CUDA 是可选项。
想换模型?
转写用 -m 指定其它 ggml 模型(记得放进 models\),总结用 --ollama-model 指定 Ollama 里的其它模型。
video_summary/
├── CMakeLists.txt # 构建配置(WinHTTP + whisper.cpp)
├── build-ninja.cmd # 一键构建(Ninja + CUDA)
├── demo.cmd # 一键演示
├── src/
│ ├── main.cpp # 入口、CLI 解析
│ ├── util.h # 通用工具
│ ├── audio.cpp/.h # ffmpeg 抽音轨
│ └── ollama.cpp/.h # Ollama HTTP 调用
├── third_party/whisper.cpp/ # vendored,勿改
├── models/ # ggml 模型
└── samples_wav/ # 测试音频