一个轻量级 Windows 桌面应用,用于把本地媒体或支持的视频链接整理为可检索的核心提炼笔记。
- 原生选择或拖放本地视频/音频,保留 Windows 完整路径
- 粘贴抖音、Bilibili 或 YouTube 视频链接
- 对 Bilibili/YouTube 优先取得可用的时间字幕;没有字幕或读取失败时,才准备媒体并交给当前选定的转写档
- 可选的本地
whisper.cppCPU 转写,以及云端语音转写 + AI 核心提炼 - 独立可切换的转写和总结配置档
- 腾讯云 Flash ASR → MiMo ASR 自动回退(额度不足时)
- 输出:核心结论、关键依据、启示/行动
- 自动保存 Markdown 文件,并可自选默认保存文件夹
- 结果页支持「另存为」,只复制已有 Markdown,不会再次调用转写或总结服务
- 左侧历史工作台:搜索、重新打开和删除已保存笔记
- 同一笔记内问答:仅使用当前历史笔记的 Markdown 与转写内容作为上下文
- 核心依据可显示受支持平台的时间链接;截图为可选的证据资产,失败不会使已完成笔记失败
- API Key 安全存储在 Windows 凭据管理器
从 Releases 下载最新安装包,运行安装即可。无需安装 Node.js、Rust 或 FFmpeg。
- 打开应用,从左侧工作台进入「设置」
- 在「语音转文字」中选择 CPU、GPU 或在线模式;在「AI 接入」中配置用于总结的大模型
- 配置核心总结服务(如 DeepSeek 或 MiMo)
- 为每个配置档保存对应的 API Key 或腾讯云凭据
- 拖入视频/音频文件,或粘贴抖音、Bilibili 或 YouTube 视频链接
- 选择本次任务的笔记风格,并按需启用关键截图
- 点击「开始提炼」
- 查看结果;Markdown 默认保存到「视频\video-distiller」,也可在「设置 → 数据管理 → 导出设置」中更改
- 如需额外副本,在结果页点击「另存为」选择目标文件
应用使用全窗口工作台,而不是弹窗式设置:
- 主导航包含「新建提炼」「笔记库」「设置」。新建页提供链接/本地文件输入及四阶段处理状态;笔记库保留搜索、安全删除、Markdown 详情和同篇笔记问答。
- 重复顶栏已经移除;当前转写与总结服务放在「新建提炼」右侧的处理方案内,和任务流程保持在同一视觉上下文。
- 「设置」始终在同一工作台内打开,分为「外观」「语音转文字」「AI 接入」「数据管理」「关于」五部分。
- 「语音转文字」分为 CPU、GPU、在线三种模式。CPU 页管理可选 SenseVoice 组件和 int8/float32 模型;GPU 页整合 whisper.cpp 模型与 CUDA 运行时,在线页复用真实配置档和 Windows 凭据隔离。缺少组件时会明确显示未安装,只有运行时、tokens 和所选模型均校验通过才显示已就绪。
- 「AI 接入」的大模型页直接读取内置的 models.dev 标准协议快照,提供 116 家服务商和 3,926 个模型记录,覆盖 OpenAI Compatible、OpenAI Responses、Anthropic Messages 与 Google Gemini 四类协议。服务商和模型选择先保留为本地草稿;只有点击「保存并启用」时,后端才会原子写入配置、凭据并切换当前总结服务。不适合文本总结的目录模型会保持可见但禁用,并显示原因;也可以输入服务商支持的自定义模型 ID。向量与重排用于笔记索引和语义检索,联网搜索可由同篇问答显式启用,TTS 与作图由结果页调用,本地智能体由笔记库在用户确认后执行。
- 「外观」可切换跟随系统 / 浅色 / 深色主题,并控制紧凑密度、减少动画和侧边栏收起 / 展开。外观选项点击后立即应用并按顺序自动保存,不再需要单独的保存按钮;写入失败会回退到最后一次已保存状态。展开侧边栏时按钮显示文字;折叠后只显示居中图标和左下角服务就绪绿点,所有按钮仍保留可访问名称。
- 有限选项统一使用自定义圆角下拉;服务配置使用可搜索的分组下拉。两者均支持键盘导航、选中标记和点击外部关闭。
- 主要控件支持键盘导航,并提供清晰的可见焦点;布局在 1280×720 与窄屏下会自动重排,内容纵向滚动而不产生横向裁切。
主题、紧凑密度和减少动画以 preferences.json 中的 appearance 为语义持久化来源;localStorage 只保留当前有效主题的兼容状态,避免启动首帧闪烁。侧边栏折叠状态只属于界面偏好,不会改变任务、配置档、模型或历史数据。切换到笔记库再返回时,正在运行的任务仍保留,取消操作仍只针对当前任务 ID。
应用随附 Windows x64 CPU whisper.cpp 组件,不需要 Python、Docker、系统级 CUDA Toolkit、GPU 或 API Key。Whisper 模型不会随安装包预装:在「设置 → 语音转文字 → GPU 模式」中由用户主动下载并选择后,才可启用本地 Whisper 转写档。CPU 模式使用可选 SenseVoice:用户可一键下载经过固定大小与摘要校验的 sherpa-onnx 运行时、tokens 和 int8 或 float32 模型;模型优先从 Hugging Face 获取,失败后尝试 ModelScope,下载支持续传、取消、选择和删除。任何组件不完整时都不会被当作可用转写服务。
NVIDIA 用户可在「设置 → 语音转文字 → GPU 模式」中明确点击下载可选组件。应用固定使用官方 whisper.cpp v1.8.3 的 whisper-cublas-12.4.0-bin-x64.zip,下载完成后校验 SHA-256 c12a563333d3c3707be70754dc0e87c1cb58aa6333a87055bbcf9b524488dfb0,再安装到应用数据目录的 runtime\whisper.cpp\cuda\v1.8.3;不会写入系统目录,也不要求安装 CUDA Toolkit 或 Python。打开设置或检测显卡不会自动下载组件。
计算方式可选「自动(CUDA 优先)」或「仅 CPU」。自动模式仅使用已完整校验的 CUDA 组件;CUDA 无法启动、运行失败或组件不可用时,会清理该次不完整输出并只重试 CPU 一次,不会切换到在线 ASR。任务运行时不能删除组件;其余时间可在同一设置卡片内确认删除。诊断日志只记录脱敏后的计算回退类别、阶段和百分比,不记录显卡工具原始输出、媒体路径或转写正文。
可选模型为 tiny(约 75 MB)、base(约 142 MB)、small(约 466 MB)、medium(约 1.5 GB)和 large-v3-turbo(约 1.62 GB)。下载固定先尝试 Hugging Face;该请求失败时才会尝试一次 ModelScope。下载使用可恢复的临时文件,只有完整性校验通过后模型才会显示为已就绪。
模型保存在应用数据目录的 models\\whisper.cpp 下,与任务临时媒体、历史资产和用户的 Markdown 保存目录隔离。本地转写时音频和转写文本不会上传;只有模型下载需要网络。本地档不读取或保存在线服务凭据,模型/运行失败会给出本地恢复提示,绝不会自动切换到腾讯、MiMo 或其他在线 ASR。
whisper.cpp -otxt 会把 .txt 追加到 -of 指定的输出前缀。应用按这个真实契约读取 <前缀>.txt,不会再把 .input.whisper.txt 错当成 .input.txt。转写进程报告可解析进度时,界面会将其映射到整体任务百分比;无法取得细粒度进度时仍显示当前阶段基线与已用时间,不伪造平滑增长。
只能将已就绪模型设为当前模型。可直接删除非当前的已就绪模型;删除当前模型需要先切换到另一个已就绪模型,或在确认后清除本地档当前模型,之后需重新选择已就绪模型才能开始本地任务。
点击拖放区域会打开 Windows 原生文件选择器;也可以把文件拖到应用窗口。应用传递完整绝对路径,例如 F:\1.mp4,不会只保留文件名。
支持的视频格式:.mp4、.mov、.mkv、.webm。
支持的音频格式:.mp3、.m4a、.wav、.aac、.flac、.ogg、.opus。
视频会提取音轨;音频会直接规范化为 16 kHz 单声道后送往转写服务。
支持抖音、Bilibili 和 YouTube 链接。Bilibili/YouTube 会先尝试取得非空的带时间字幕:成功时直接用字幕生成转写,不下载媒体,也不调用本地或在线 ASR;字幕缺失、为空或获取/解析失败时,才会走下面的媒体与当前选定转写档路径。抖音和本地文件始终走媒体/ASR 路径。
对于 Bilibili/YouTube,笔记中的带时间依据会提供原平台时间链接;其他来源只显示时间文本。
抖音、Bilibili、YouTube 链接均先匿名抓取最佳可用音频;若该平台在「设置 → 数据管理 → 平台连接」中手动保存了 Cookie,则匿名失败后才用该 Cookie 重试。Cookie 是可选项,不会从浏览器、扩展或登录会话自动读取。
手动 Cookie 保存在 Windows 凭据管理器的独立下载命名空间,设置页只显示「已配置」状态,永不回显内容。每次下载仅创建任务专用的临时 Netscape Cookie 文件供 yt-dlp 使用;原始 Cookie 不会写入 Profiles JSON、Markdown、历史记录、日志或命令行参数。下载失败只显示脱敏后的错误类别,不显示 Cookie、签名媒体地址或原始下载响应。
- 当前新任务使用
core_distillation模板;模板名会写入 Markdown 元数据和历史记录。界面当前没有向用户暴露其他活动模板。 - 每个新任务可选择九种笔记风格:精简(默认)、详细、教程、学术、小红书、生活向、任务导向、商业风格和会议纪要。风格只调整内容组织、语气和详略,不会放宽“仅依据转写/字幕、不得补写来源中不存在的事实”的约束;所选稳定 ID 会写入 Markdown YAML 元数据及 SQLite 历史记录,旧历史数据库会自动补为
minimal。 - 「关键截图」复选框默认关闭;可在开始提炼前为当前任务启用。启用后,应用使用本地 FFmpeg 仅为带时间戳且有可用媒体文件的关键依据截取单帧,可能增加处理时间、磁盘使用和本地 CPU 工作量。字幕直出而未下载媒体的任务不会生成截图;FFmpeg、单张截图或资产保存不可用时,仍保留已完成笔记并显示脱敏提示。
- 成功笔记的 Markdown、转写文本和可用的缩略图/截图会复制到应用数据目录的历史资产库,用于搜索、重新打开和同笔记问答。重新打开笔记时,前端只提交历史 ID,后端只读取该 ID 对应且位于应用自有历史资产根目录内的
.md副本;笔记按标题、列表、引用、代码和安全链接等 Markdown 语义渲染,不执行原始 HTML 或危险协议。加载失败会显示原因和「重新读取」,不会无限停留在“正在读取”。任务临时下载媒体和规范化音频在任务结束后清理,不作为历史内容保留。 - 在历史栏对一条笔记执行两次确认删除,会删除该历史记录及其应用自有的笔记、转写和图片资产,并级联删除该笔记的问答记录;不会删除用户原始媒体或任意外部路径。
- 问答严格限于所选历史 ID:不搜索其他笔记、不接受任意文件路径,也不提供跨笔记 RAG。问答栏参与笔记库的响应式网格布局,不会覆盖正文;窄屏下移到笔记下方。问答仍会使用当前总结配置档,因此可能按该服务的计费规则产生费用。
应用使用独立的转写配置档和总结配置档来实现服务切换。每类配置档可配置多个,激活的配置档在主界面快速切换。
API Key 和腾讯云凭据不存储在普通配置文件中,而是安全保存在 Windows 凭据管理器中,每个配置档使用独立的凭据条目。
| 配置档类型 | 预设基础地址 | 模型 | 凭据类型 |
|---|---|---|---|
| 腾讯云极速版 | https://asr.cloud.tencent.com |
16k_zh |
AppID + SecretID + SecretKey |
| MiMo ASR | https://api.xiaomimimo.com |
mimo-v2.5-asr |
Bearer API Key |
| 自定义 OpenAI 兼容转写 | 用户填写 | 用户填写 | Bearer API Key |
本地 Whisper(whisper.cpp) |
无 | 当前已就绪本地模型 | 无 |
| 配置档类型 | 预设基础地址 | 模型 | 凭据类型 |
|---|---|---|---|
| DeepSeek | https://api.deepseek.com |
deepseek-chat |
Bearer API Key |
| MiMo | https://api.xiaomimimo.com |
mimo-v2.5 |
Bearer API Key |
| 自定义 OpenAI 兼容总结 | 用户填写 | 用户填写 | Bearer API Key |
对于支持 /v1/models 接口的 OpenAI 兼容服务,编辑配置档时可点击「发现模型」按钮获取可用的模型列表。获取失败不会阻止保存,允许手动输入模型名称。
OpenAI 兼容转写与总结服务的基础地址支持以下三种形式,应用会统一拼接实际端点,不会重复产生 /v1/v1:
- API 根地址,例如
https://api.xiaomimimo.com - 已包含
/v1的地址,例如https://api.xiaomimimo.com/v1 - 完整端点,例如
https://api.xiaomimimo.com/v1/chat/completions
自定义代理的协议、主机、端口和路径前缀会保留。非本机地址必须使用 HTTPS;http://localhost 可用于本地兼容服务。
- 默认目录为 Windows「视频」目录下的
video-distiller文件夹。 - 在「设置 → 数据管理 → 导出设置」中可选择其他文件夹,或点击「恢复默认」。
- 保存位置持久化在独立的
preferences.json中;其中不包含 API Key、任务内容或其他凭据。 - 修改默认位置只影响之后启动的任务,不会移动历史 Markdown。
- 每个任务的下载文件和规范化音频位于
%TEMP%\\video-distiller\\<taskId>,任务结束后尽力清理,不会混入 Markdown 文件夹。 - 结果页「另存为」按字节复制已经生成的
.md;取消选择不会改变显示路径,复制失败会保留原文件和原路径。
在转写设置中,可以为当前激活的腾讯云配置档选择一个非腾讯云的备用转写档(推荐 MiMo ASR)。
当腾讯云明确返回额度不足或余额不足错误时:
- 应用自动使用备用配置档重试一次(不重新下载/提取音频)
- 弹出非阻塞提示,告知用户已自动切换
- 成功后,备用配置档成为新的默认转写档
- 继续使用原定的总结配置档完成提炼
网络错误、认证错误、请求限流、取消操作和无法识别的错误不会触发自动切换。
- 所有 API Key、SecretKey 等敏感数据仅存储在 Windows 凭据管理器中
- 服务名:
video-distiller-profiles-v1 - 账号名格式:
<配置档类型>:<配置档ID>(如transcription:tencent-flash) - 普通配置文件(Profiles JSON)不包含任何凭据内容
- 凭据替换/删除操作后,配置文件的更新采用原子写入,失败时完整回滚
从旧版单 API Key 升级后,首次启动会显示迁移提示,引导用户分别配置转写和总结服务并保存凭据。
旧凭据(video-distiller/api-key)在以下条件全部满足后才会删除:
- 用户明确确认迁移完成
- 两个激活的配置档均已配置有效凭据
1. 前端生成 taskId → 注册 progress/complete/error/fallback 监听器
2. 前端将输入源 + 转写配置档 ID + 总结配置档 ID 传给后端
3. Rust 加载配置文件,从 Windows 凭据管理器加载对应凭据
4. Bilibili/YouTube 先尝试时间字幕;不可用时在任务专用临时目录中抓取/读取媒体 → 规范化音频 → 当前选定转写档转写
5. 注册表解析转写适配器 → 完成转写(可选:额度不足时自动回退)
6. 注册表解析总结适配器 → 完成核心提炼;可选截图失败不阻止结果
7. 保存 Markdown 到任务启动时快照的默认目录,并尽力复制历史资产 → 通过 complete 事件返回结果
8. 可选:结果页「另存为」复制已有 Markdown,不重新调用提供商
- 所有提供商的错误归一化为统一
ProviderError类型 - 处理页显示 0–100% 的整体进度、当前阶段和已用时间;任务开始时间由应用级状态持有,因此处理期间切换页面再返回不会从零重新计时。本地 Whisper 的真实进度映射在整体转写区间内,任务完成固定为 100%。
- 错误页保留「重试」并提供「打开日志」。诊断日志位于应用数据目录的
logs\\video-distiller.log,达到 2 MiB 后轮换为video-distiller.1.log。 - FFmpeg、yt-dlp、字幕工具和 whisper.cpp 等子进程在 Windows 下以隐藏窗口方式启动;应用主窗口与错误恢复对话仍正常显示。
- 日志和错误消息中不包含:API Key、SecretKey、浏览器 Cookie、Authorization 头、签名媒体 URL、请求体、音频 Base64、完整响应体
- 安全诊断使用逐行 JSON,只包含任务 ID、阶段、百分比、退出码、标准化错误代码等白名单字段;不记录原始 stderr、输入 URL、本地媒体路径或转写正文。
- 导出支持 Markdown、HTML 和纯文本三种格式;默认偏好可控制是否包含截图、字幕、来源元数据和诊断日志。导出只读取当前笔记内容,不会重新调用转写、总结或其他 AI 服务。
- 缓存清理只接受固定枚举:临时媒体、截图、转写中间文件和 AI 索引。Rust 后端从应用自有根目录解析这些类别,不接受任意路径,不跟随符号链接,也不会清除历史数据库、笔记、模型或运行时。
- 日志列表只返回固定日志目录中的受验证 ID;单次尾部读取被限制为最多 64 KiB。设置页不会显示原始凭据、Cookie、Authorization 头、媒体签名地址或完整提供商响应。
- 平台 Cookie 只在设置页显示“是否已配置”;内容保存在 Windows 凭据管理器中,前端没有读取原始 Cookie 的命令。
- Node.js 24
- Rust 稳定版
- FFmpeg
- yt-dlp
仓库不包含超过 GitHub 单文件限制的预编译 FFmpeg。开发或打包前,请自行准备与目标平台匹配的 FFmpeg,并在 Windows x64 环境放置为 src-tauri/binaries/ffmpeg-x86_64-pc-windows-msvc.exe。发行版中的 FFmpeg 仍由应用安装包统一携带,最终用户无需单独安装。
# 安装依赖
cd VedioNotes
npm install
# 运行开发服务器
npm run tauri dev
# 调试阶段:只构建 Release EXE,不生成 MSI/NSIS
npm run tauri -- build --no-bundle构建成功后可直接检查 src-tauri\target\release\VedioNotes.exe。调试阶段不需要运行安装包;只有明确准备发布时才使用带 bundle 的生产构建。
设置界面默认使用从 CipherTalk 选择性移植的新实现(CipherSettingsShell)。VITE_SETTINGS_IMPLEMENTATION 是 Vite 构建期环境变量,不是运行时变量——现有 EXE 内不能在运行时切换实现。
- 默认(不设置或设置为非
legacy):使用CipherSettingsShell。 VITE_SETTINGS_IMPLEMENTATION=legacy:回退到旧SettingsWorkspace,仅用于排查问题。
# 默认构建(使用 CipherSettingsShell)
npm run tauri -- build --no-bundle
# 回退构建(使用旧 SettingsWorkspace)
$env:VITE_SETTINGS_IMPLEMENTATION='legacy'
npm run tauri -- build --no-bundle本版本不包含 Python、Docker、系统级 CUDA Toolkit 安装、浏览器扩展、跨笔记 RAG、快手支持或原始媒体归档。GPU 推理仅限用户主动安装且校验通过的 NVIDIA CUDA whisper.cpp 可选组件;历史只保留笔记相关资产,不是视频素材库。
工作台设计参考了 MIT 许可的 BiliNote;详情见 THIRD_PARTY_NOTICES.md。BiliNote 仅作为只读参考,未复制其代码。
设置界面从 CipherTalk(CC BY-NC-SA 4.0)选择性移植,固定源码提交 b5b580c5af7672a729a0c7fc10b8b1511fe6d478。移植内容限定为五页设置 UI 和视觉 CSS,排除了 Electron updater、窗口操作、托盘、微信、数据库解密和 React Router。源码清单见 src/features/settings/sourceManifest.ts。
VedioNotes/
├── src/ # React + TypeScript 界面层
│ ├── App.tsx # 应用状态、任务生命周期和八路由装配
│ ├── lib/types.ts # 前后端共享的 TypeScript 契约
│ ├── lib/bridge.ts # 类型化 Tauri invoke/event 桥接
│ ├── lib/capabilityContract.ts # 控件→Bridge→Rust 能力矩阵
│ ├── components/ # 首页、创建、进度、结果、笔记库、问答、任务、设置
│ │ ├── SettingsWorkspace.tsx # 外观/转写/AI/数据/关于(legacy 回退)
│ │ ├── SenseVoiceManager.tsx # CPU 运行时与模型生命周期
│ │ ├── SearchableCombobox.tsx # models.dev 服务商/模型搜索与自定义输入
│ │ └── settings/ # AI 七子页、数据、外观和关于(legacy 页)
│ ├── features/settings/ # CipherTalk 移植的设置界面(默认入口)
│ │ ├── SettingsEntry.tsx # 默认 cipher / legacy 回退入口
│ │ ├── CipherSettingsShell.tsx # 五页导航 Shell
│ │ ├── tabs/ # 外观、语音转文字、AI 接入、数据管理、关于
│ │ └── sourceManifest.ts # 源码提交固定和许可证
│ ├── platform/settings/ # 设置平台适配器(类型化转发到 bridge)
│ └── styles/cipher-settings.css # CipherTalk 视觉 CSS(限定 .cipher-settings-root)
│ └── styles/app.css # 主题、响应式工作台和自定义下拉
├── src-tauri/ # Rust/Tauri 后端
│ ├── src/
│ │ ├── commands.rs # Tauri 命令、任务和能力编排
│ │ ├── domain.rs # 领域模型和脱敏错误
│ │ ├── profiles.rs # 转写/总结配置档类型
│ │ ├── profile_store.rs # 版本化配置档存储
│ │ ├── preferences.rs # 外观、导出、转写和目录偏好
│ │ ├── credential_store.rs # Windows 凭据管理器
│ │ ├── download_cookies.rs # 平台 Cookie presence-only 边界
│ │ ├── history_store.rs # SQLite 笔记、资产和同篇问答
│ │ ├── task_store.rs # SQLite 任务历史和安全重试快照
│ │ ├── sensevoice_models.rs # 模型/运行时下载、校验、选择和删除
│ │ ├── cuda_runtime.rs # 可选 CUDA whisper.cpp 运行时
│ │ ├── local_models.rs # Whisper 模型注册和下载
│ │ ├── capability_store.rs # AI 扩展配置与本地智能体安全校验
│ │ ├── ai_capabilities.rs # 向量/重排/联网/TTS/图像/本地智能体
│ │ ├── data_management.rs # 三格式导出、固定缓存、64 KiB 日志和 About
│ │ ├── diagnostics.rs # 脱敏 JSONL 日志与轮换
│ │ ├── process_utils.rs # Windows 隐藏子进程窗口
│ │ ├── providers/ # 在线 ASR/总结、whisper.cpp、SenseVoice
│ │ └── services/ # 平台抓取、媒体、转写、提炼和结果保存
│ ├── binaries/ # 固定版本 Windows sidecars 与来源说明
│ └── examples/ # 本地验证示例,不随仓库发布
- 处理速度取决于视频长度和云端服务响应时间
- 无法保证所有抖音链接均可成功下载
- API Key 安全存储在 Windows 凭据管理器
- 该应用仅支持音频转写,不支持逐帧视觉分析
- 连接测试可能产生极少量费用(取决于提供商计费策略)