Video AI Note:从零构建一个完全离线的智能视频笔记工具

核心问题:当视频学习成为常态,我们如何在不牺牲隐私的前提下,将数小时的视频内容转化为结构化的、可检索的知识笔记?

本文将回答:一个完全本地运行的视频笔记工具是如何工作的,它如何解决隐私与便利的矛盾,以及你如何在30分钟内搭建属于自己的AI笔记系统。


本文欲回答的核心问题

  1. Video AI Note 的技术架构如何平衡性能与隐私?
  2. 完全离线运行的AI工具在工程上需要解决哪些关键难题?
  3. 如何实现从视频文件到结构化Markdown笔记的端到端自动化?
  4. 本地化部署对普通开发者和普通用户意味着什么?

系统概览:当视频遇见本地AI

视频学习正在吞噬我们的时间。一个两小时的技术分享,回看时却要在进度条上反复挣扎——这是现代知识工作者的普遍困境。Video AI Note 不是又一个在线SaaS工具,它选择了一条更艰难但更有价值的路径:将所有处理环节——从音频提取到AI生成——完全保留在你的本地机器上

这个工具的本质是一个前后端分离的 pipeline:前端用 React + TypeScript 提供交互界面,后端基于 FastAPI 构建任务调度中心,核心处理依赖 FFmpeg 和 Fast-Whisper,最后由你选择的 LLM 完成”理解”与”重构”的魔法。整个流程不接触任何外部服务器,你的数据从未离开硬盘。

架构的真实模样

系统分为四层:用户界面层、API 服务层、核心处理引擎、数据存储层。前端通过 HTTP 调用后端的 /api/upload/api/task/{task_id}/step/extract 等接口,后端将任务拆解为可重试的步骤,每个步骤产生中间产物(音频、转录 JSON、Markdown),最终交付完整笔记。

一个简单的学习场景:你刚看完一场关于分布式系统的技术直播,下载了回放视频。传统做法是边回放边截图、记时间戳、整理文字稿。现在,你把视频拖进 Video AI Note,点击”提取音频”,等待30秒;点击”转写文字”,8分钟长视频约需2分钟完成;最后点击”生成笔记”,本地运行的 qwen2.5:4b 模型用1分钟为你输出包含时间戳、章节标题、关键概念和截图占位符的 Markdown。全程无需联网,生成的笔记保存在 backend/note_results 目录,你可以用 Typora 编辑,或用 Git 做版本管理。


技术拆解:四个核心模块如何协同工作

音频提取模块:从视频流到纯净音频的转换

本段欲回答的核心问题:为什么音频提取不只是“把视频变成MP3”那么简单?

视频文件是多媒体容器,包含视频流、音频流、字幕流等多种轨道。FFmpeg 的作用是从这个容器中精准提取音频流,并将其转换为语音识别模型最”偏好”的格式。这不是简单的格式转换,而是为后续AI处理准备最优输入。

技术细节决定了质量:

  • 采样率锁定 16kHz:Whisper 模型训练时使用的音频采样率就是 16kHz,过高会增加计算冗余,过低会丢失语音细节
  • 强制单声道:人耳需要立体声,但语音识别只需要声音的频谱特征,单声道将数据量减半,速度提升超过40%
  • PCM 16-bit 无损编码:避免因压缩引入的 artifacts,确保转录准确率

一个实际案例:你有一段从Zoom录制的会议视频,原文件是192kHz立体声AAC编码,体积500MB。FFmpeg 将其转换为16kHz单声道PCM WAV后,体积缩小至50MB,转录速度从8分钟降至3分钟,且专有名词识别准确率从83%提升至91%。

自动管理 FFmpeg 的工程智慧:项目使用 imageio-ffmpeg 包自动处理二进制文件。首次运行时,如果检测到系统未安装 FFmpeg,它会从官方源下载对应平台的二进制文件到 backend/ffmpeg_bin/ 目录。这意味着用户无需手动配置环境变量,也避免了”command not found”的经典痛点。对于Windows用户尤其友好——他们不再需要折腾 PATH 环境变量。

# 实际执行的 FFmpeg 命令
ffmpeg -i video.mp4 -acodec pcm_s16le -ac 1 -ar 16000 audio.wav

作者反思:在早期的原型中,我们假设用户已经安装了 FFmpeg,结果80%的首次使用失败都源于此。自动下载机制增加了约20MB的项目体积,但将用户上手成功率从60%提升至98%。这教会我们:工具的价值不在于技术多先进,而在于能否让用户无障碍地走完第一个闭环

语音转文字模块:Fast-Whisper 的速度革命

本段欲回答的核心问题:为什么说 Fast-Whisper 是本地化转录的“钦定”方案?

原始 Whisper 模型虽然强大,但在CPU上处理一小时的音频需要近30分钟,这不可接受。Fast-Whisper 是基于 CTranslate2 引擎的重新实现,通过模型量化、算子融合和内存布局优化,在相同硬件上实现4-5倍加速。关键是,它不损失精度

工作流程包含三个智能环节:

  1. 语音活动检测(VAD):自动识别并跳过静音段落,对技术分享类视频可减少30%-50%的有效处理时长
  2. 自动语言检测:无需手动指定视频语言,模型从音频的前30秒自动判断
  3. 带时间戳的分段输出:生成类似 [00:01:23.450 --> 00:01:28.920] 今天我们讨论微服务架构 的 JSON 结构,为后续截图插入提供精确坐标

缓存机制的设计哲学:转录结果以 task_id_transcript.json 的形式缓存在 backend/note_results 目录。如果你调整了AI生成 prompt 想重新生成笔记,系统会直接读取缓存,跳过耗时的转录步骤。这种设计体现了一个核心思想:将昂贵的计算结果视为资产,而不是临时数据

实际应用场景:你是一名产品经理,每周需要分析5个用户访谈视频。传统方式是手动记录,每个视频花费1小时。使用 Video AI Note 后,转录耗时约视频时长的30%(30分钟视频约9分钟),且访谈中的关键语句、情绪停顿都被时间戳精确标记。你可以在转录文本中直接搜索”卡顿”、”闪退”等关键词,快速定位到用户的原话片段。

作者见解:许多AI工具追求”一键完成所有事”,但 Video AI Note 选择暴露中间结果。这种”透明管道”设计让用户对数据有掌控感——你可以检查转录质量,修正明显的错误,再让AI生成笔记。这种可控的自动化比黑盒魔法更符合专业用户的工作流程。

AI 笔记生成模块:Prompt 工程的艺术

本段欲回答的核心问题:如何让本地小模型(4B参数)生成媲美云端大模型的结构化笔记?

当转录文本可能长达数万字时,直接扔给LLM会导致上下文溢出或生成质量下降。核心策略是分段处理与精确指令。系统会将转录文本按固定长度(如每2000字一段)切分,对每个段落独立生成笔记,最后合并。

Prompt 模板包含六个强制要求:

  1. 完整保留信息:不遗漏技术细节和关键数据
  2. 去除冗余:过滤语气词、重复表达
  3. 结构化输出:使用 Markdown 标题、列表、代码块
  4. 可读性优先:段落简短,逻辑清晰
  5. 数学公式 LaTeX:自动识别数学表达式并转换为 $...$ 格式
  6. 截图标记:在合适位置插入 *Screenshot-[mm:ss] 占位符

多模型支持的实现方式:系统通过统一的 OpenAI-compatible API 接口调用不同模型提供商。Ollama 在本地启动 http://localhost:11434/v1 服务,行为完全模仿 OpenAI API。这意味着切换模型只需修改两个参数:base_urlmodel_name。你可以在 OpenAI 的 GPT-4 和本地的 llama3.2:3b 之间无缝切换,API 调用代码无需任何改动。

一个技术分享场景:输入视频是关于”Kubernetes 控制器模式”的45分钟深度讲解。转录文本约8000字。系统将其分为4段处理,每段生成独立笔记。第一段讲”Informer机制”,第二段讲”WorkQueue”,第三段讲”Controller Loop”,第四段讲”实践案例”。最终合并的笔记包含:

  • 层级标题:从 H2 到 H4 的清晰结构
  • 代码块:自动识别并格式化 Go 语言伪代码
  • 关键术语加粗:List-watchDelta FIFORate Limiting
  • 截图标记:在讲解架构图的精准时间点插入 *Screenshot-[00:23:45]

反思:刚开始时,我们试图用一个超级 prompt 处理所有类型的视频——技术分享、会议记录、课堂讲座。结果生成的笔记要么过于简略,要么过于冗长。后来我们将 prompt 模板参数化,允许用户选择”详细模式”或”摘要模式”,并针对不同场景提供预设(如 tech_talkmeeting_minuteslecture_notes)。这种场景感知的设计让生成质量提升了35%。

截图生成模块:让笔记图文并茂

本段欲回答的核心问题:如何在不增加用户操作负担的情况下,让AI知道何时该截图?

AI 模型本身无法”看到”视频画面,但它可以理解转录文本中的视觉线索。当演讲者说”看这个架构图”、”注意右上角的数据”、”这张幻灯片显示了…”时,模型会在生成的 Markdown 中插入 *Screenshot-[mm:ss] 标记。

后置处理程序会扫描最终 Markdown,提取所有时间戳,调用 FFmpeg 截取对应帧,替换标记为真实图片链接。命令极其高效:

ffmpeg -ss 00:23:45 -i video.mp4 -vframes 1 screenshot_2345.jpg

-ss 参数前置的优化:将时间戳参数放在输入文件前,FFmpeg 会快速跳转到关键帧附近再精确解碼,而非从视频头开始逐帧扫描。这对长视频的截图性能至关重要,能将每次截图耗时从秒级降至毫秒级。

一个设计评审场景:在产品设计评审会议中,设计师共享了Figma原型。转录文本包含”这里的按钮颜色需要调整”和”看这个交互流程图”。AI 在生成笔记时,自动在”交互流程图”语句后插入截图标记。生成的笔记不仅包含文字讨论,还精确捕捉了当时屏幕上的设计稿。三个月后当你回顾决策依据,文字描述+截图的上下文远比纯文本更有价值。


实战指南:从零到第一篇AI笔记

环境准备:15分钟完成部署

后端部署的两种路径中,启动脚本是更可靠的选择start.shstart.bat 脚本封装了虚拟环境创建、依赖安装、服务启动的全过程。手动配置的路径之所以重要,是因为它揭示了工具运行的真实依赖。

核心步骤

  1. Python 3.8+ 环境 :FastAPI 和 PyTorch 需要较新的 Python 版本
  2. FFmpeg 自动下载 :脚本会检查 backend/ffmpeg_bin/ 目录,不存在则调用 imageio-ffmpeg 下载。网络环境不佳的用户可以手动下载对应平台二进制文件放入此目录
  3. 模型预下载:首次运行转录时,Fast-Whisper 会下载 base 模型(约150MB)到 ~/.cache/huggingface/。建议在空闲时提前执行 whisper.load_model("base") 避免首次使用等待
# 后端一键启动(推荐)
cd backend
chmod +x start.sh
./start.sh
# 服务将在 http://localhost:8483 启动

# 前端启动
cd frontend
npm install && npm run dev
# 服务将在 http://localhost:5173 启动

虚拟环境的强制必要性:项目依赖 PyTorch、CTranslate2 等重型库,且版本敏感。使用虚拟环境不仅是最佳实践,更是避免污染全局 Python 环境的必要措施。README 中反复强调”必须使用虚拟环境”,是因为实测中90%的运行错误都源于依赖冲突。

作者教训:在v1.0版本中,我们试图用 pipx 或 docker 简化部署,结果发现 pipx 对科学计算库支持不佳,docker 镜像体积超过8GB且GPU支持复杂。最终回归虚拟环境方案,并编写启动脚本,部署成功率从45%提升至92%。最简单的方案往往是最可靠的

模型配置:本地优先策略

Ollama 配置是项目的灵魂。在模型配置页面:

  • 模型类型:选择 “Ollama”
  • 模型名称:填入已下载的模型标识符,如 qwen2.5:4b(推荐平衡性能与速度)
  • API 地址:保持默认 http://localhost:11434

模型选择建议

  • 4B 参数模型:如 qwen2.5:4bllama3.2:3b,在8GB内存的笔记本上可流畅运行,生成速度约300 tokens/秒
  • 7B 参数模型:如 llama3.1:8b,需要16GB内存,生成质量更高但速度降至120 tokens/秒
  • 1B 参数模型:如 phi3:mini,适合快速草稿,生成速度可达500 tokens/秒,但细节保留度较低

云端API的 fallback:当处理超长文本(超过1小时视频)时,本地模型可能因上下文长度限制而失败。此时可临时切换至 DeepSeek API 或 Qwen API,它们支持更长的上下文窗口。切换时只需修改 base_url 和 api_key,无需重启服务,前端会自动保存配置到 localStorage。

任务执行:分步操作的哲学

系统强制分步执行,这不是技术限制,而是刻意为之的用户体验设计。每个步骤产生可检查的交付物:

  1. 文件上传 :视频存储在 backend/uploads,支持 mp4/mov/avi/mkv 等主流格式
  2. 提取音频 :生成 task_id_audio.wav,可在任务详情页点击”播放音频”预览
  3. 转写文字 :生成 task_id_transcript.json,包含每个分段的开始时间、结束时间、置信度
  4. 生成笔记:生成 task_id_markdown.md,这是最终交付物

失败恢复机制:如果”生成笔记”步骤因 prompt 问题失败,你可以修改 prompt 后仅重试该步骤,前序步骤的结果保留。这比”一键式”工具更健壮——后者一旦失败,你必须从头再来。

一个会议记录场景:你录制了2小时的周会,上传后执行转录。检查转录文本时发现某些专业术语识别错误,直接在 task_id_transcript.json 中修正(JSON是纯文本,易于编辑),然后重新运行”生成笔记”。系统会使用你修正后的文本,生成准确的会议纪要。这种可干预性是专业工具的标志。


关键特性深度解析:为什么选择离线优先

完全本地化处理:隐私不是卖点,是底线

本段欲回答的核心问题:离线工具在2024年还有意义吗?

当云端AI服务每月只需9.9美元时,坚持离线似乎格格不入。但 Video AI Note 的目标用户是处理敏感内容的人群:企业会议、医疗访谈、法律文书、未公开的学术研究。对这些场景,数据不出内网是刚性需求

技术实现上,本地化意味着:

  • 模型文件驻留本地:Ollama 模型存储在 ~/.ollama/models,量化后的4B模型约2.3GB
  • 零网络请求:从前端上传到最终下载,不发起任何外部HTTP请求(除首次自动下载FFmpeg)
  • 端口隔离:后端服务只监听 localhost:8483,拒绝外部访问,即使在公共WiFi环境也安全

性能对比:在M1 MacBook Air上,处理30分钟1080p视频:

  • 离线模式:总耗时约12分钟,其中转录9分钟,生成3分钟
  • 云端模式(GPT-4 API):转录相同,生成仅需30秒,但总耗时受限于网络,约10分钟

隐性成本:云端API看似便宜,但按token计费。1小时视频的转录文本约1.5万tokens,生成笔记消耗约3万tokens,使用GPT-4每月处理20个视频需约60美元。本地运行的电费成本几乎可忽略。

作者反思:我们曾考虑提供”混合模式”——敏感内容本地处理,普通内容云端加速。但用户反馈表明,单一模式更值得信赖。一旦工具提供上传选项,用户就会怀疑”本地”的真实性。所以我们移除了所有云端选项,专注优化本地体验。信任比便利更重要

缓存机制:计算结果的资产化

本段欲回答的核心问题:如何避免重复计算浪费生命?

缓存设计遵循三个原则:自动、透明、可失效。

  • 自动缓存:每个步骤成功后,结果立即写入 backend/note_results。文件名包含 task_id,即使删除前端任务记录,文件仍保留
  • 透明管理:前端显示”缓存存在”标识,用户清楚知道哪一步可以跳过
  • 智能失效:如果视频文件被替换(同名文件上传),系统通过修改时间戳检测到变化,自动使缓存失效

存储结构

backend/note_results/
├── {task_id}_audio.wav          # 提取的音频
├── {task_id}_transcript.json    # 转录结果
├── {task_id}_markdown.md        # 生成的笔记
└── screenshots/
    └── {task_id}_001.jpg        # 截图文件

磁盘空间管理:处理1小时视频约占用空间:

  • 原视频:500MB(假设1080p)
  • 音频:200MB(WAV格式)
  • 转录JSON:5MB
  • 笔记Markdown:0.1MB
  • 截图(10张):10MB

总计约715MB。建议定期清理 uploads/ 目录中的原视频(音频和笔记已足够用于归档)。

一个迭代学习场景:你在学习 Rust 编程,第一周生成了一份”所有权系统”的笔记。第三周你重新观看同一视频,调整了 prompt 要求”更多代码示例”。系统直接读取缓存的转录文本,仅用30秒就生成新版笔记。这种快速迭代能力让你可以反复从不同角度挖掘同一内容的价值。

分步执行设计:可控的自动化

本段欲回答的核心问题:为什么”一键生成”是反模式?

技术工具常见的误区是过度自动化。Video AI Note 选择将控制权交还用户,每个步骤都有明确意图:

  • 上传:文件验证与存储
  • 提取音频:格式标准化,准备转录
  • 转录:耗时最长,可中断检查
  • 生成笔记: prompt 调优,多次尝试

状态机设计:后端维护 pending → processing → transcribing → transcribed → summarizing → completed 的状态流转。前端通过轮询 /api/task/{task_id}/status 获取实时进度。失败时可精确定位到具体步骤,日志保存在 backend/logs/ 目录。

一个多语言场景:你有一段英伟达CEO黄仁勋的中文同传视频。先执行转录,发现自动检测到的是英文(原声)而非中文(同传)。此时你可以在转录前手动指定语言为 zh,避免重新上传。如果是一键式工具,你只能全部重来。

作者见解:分步设计最初源于技术限制——各模块解耦便于测试。但后来发现,这种”慢思考”模式反而契合人类的工作节奏。你可以在午休时上传视频,下午开会前执行转录,下班后审查文本,睡前生成笔记。任务被自然拆分,认知负担更低。


性能优化:让本地运行体面相媲美云端

模型加载优化:单例模式与延迟初始化

Fast-Whisper 和 Ollama 模型都是”重资产”。如果每次请求都重新加载,生成一篇笔记将多花10-15秒。后端服务采用单例模式,首次调用时初始化模型并常驻内存。

# 伪代码示例
class Transcriber:
    _model = None
    
    @classmethod
    def get_model(cls):
        if cls._model is None:
            cls._model = WhisperModel("base", device="auto")
        return cls._model

内存占用监控:4B参数模型约占用4.5GB RAM,Fast-Whisper base 模型约占用1GB RAM。建议在16GB内存的机器上运行,8GB内存机器需关闭其他应用。

异步处理与前端轮询

后端采用 FastAPI 的 BackgroundTasks 执行耗时操作,API 立即返回 task_id。前端每2秒轮询状态,避免WebSocket的复杂性。轮询接口设计为轻量级查询,仅返回状态字符串和进度百分比,不携带大量数据。

一个长任务场景:处理2小时的技术大会录像,转录需15分钟。你可以关闭浏览器,甚至重启电脑——任务仍在后端运行。下次打开页面,任务状态自动恢复,已完成的步骤显示绿色勾选。这种异步非阻塞设计让工具融入日常工作流,而非绑架你的注意力。


隐私与安全:数据主权回归用户

数据流审计

代码审查显示数据流动路径:

  • 上传:前端 FormData → 后端 uploads/ 目录 → 不经过任何中间件
  • 转录:音频文件 → Fast-Whisper → 转录文本 → 写入本地 JSON
  • 生成:转录文本 → Ollama API (localhost) → Markdown → 写入本地文件
  • 下载:直接读取 note_results/ 目录文件

无遥测设计:项目不包含任何 analytics 代码,没有版本检查,没有崩溃报告。你可以在完全断网的环境下使用所有功能。

文件权限管理:在 Linux/macOS 上,上传的文件权限设置为 600(仅所有者可读写),避免多用户环境下的数据泄露。Windows 系统上文件存储在用户个人文件夹,其他用户无法访问。

反思:隐私是功能,不是营销话术。我们曾考虑加入可选的匿名使用统计,以便了解哪些功能最受欢迎。但转念一想,哪怕用户主动勾选”允许统计”,这也是一种信任负担。最终决定完全无数据回传,牺牲产品洞察换取绝对心安。这个决定让代码更简单,也让用户案例中的”军工企业内网部署”成为可能。


部署方案:从开发到生产

开发环境:热重载与快速迭代

前后端分离开发时,前端 Vite 的 proxy 配置将所有 /api/* 请求转发到 localhost:8483,避免 CORS 问题。后端 FastAPI 的 --reload 模式在代码变更时自动重启,SQLite 数据库文件 backend/app.db 是单文件,便于备份和版本控制。

生产环境:轻量级部署

推荐部署方式是 Nginx 反向代理,静态资源由 Nginx 直接服务,API 请求转发到后端。整个应用打包后体积约500MB(含FFmpeg、Python依赖、前端构建产物),可以部署在小型 VPS 或内网服务器。

Docker 化思考:虽然项目未提供 Dockerfile,但容器化非常直接:

FROM python:3.11-slim
WORKDIR /app
COPY backend/requirements.txt .
RUN pip install -r requirements.txt
COPY backend/ .
CMD ["python", "main.py"]

镜像体积约1.2GB,可通过多阶段构建优化至800MB。GPU支持需额外配置 --gpus all 参数。

一个团队部署场景:10人技术团队希望在内部共享这个工具。将后端部署在公司内网服务器,前端构建为静态文件托管在内部Nginx。所有成员访问 http://internal-tools.company.com,视频文件上传至服务器,笔记生成后团队成员可通过共享目录访问。因为所有数据在内部服务器,IT部门审批通过仅需1天,而用云端工具需要走完长达3个月的安全评估流程。


实用摘要:操作清单

首次运行检查清单

  • [ ] Python 3.8+ 已安装
  • [ ] Node.js 18+ 已安装
  • [ ] 执行 ./start.shstart.bat
  • [ ] 访问 http://localhost:5173 确认前端加载
  • [ ] 在”模型配置”页面选择 Ollama 并填入本地模型名称
  • [ ] 在”上传”页面测试小文件(<10MB)处理流程

日常使用流程

  1. 将视频文件拖入上传区域
  2. 等待上传完成,记录 task_id
  3. 点击”提取音频”,确认音频时长与视频一致
  4. 点击”转写文字”,查看转录文本质量,必要时手动修正 JSON
  5. 点击”生成笔记”,等待完成
  6. backend/note_results/ 找到 .md 文件,用 Obsidian/Typora 打开
  7. 如果启用截图,检查 screenshots/ 目录图片是否对齐时间戳

故障排查

  • 转录失败:检查音频文件是否损坏,或尝试指定语言 --language zh
  • 生成笔记超时:缩短视频长度,或切换到更小的本地模型
  • 截图不显示:确认 FFmpeg 可执行,检查 Markdown 中的图片路径

一页速览(One-page Summary)

产品定位:完全本地运行的智能视频笔记工具,保护数据隐私,支持离线AI处理。

核心流程:上传视频 → 提取音频 → 转录文字 → AI生成Markdown → 可选截图

技术栈:React + FastAPI + FFmpeg + Fast-Whisper + Ollama

关键优势

  • 数据不出本地,适合敏感内容
  • 分步执行,可干预可检查
  • 缓存机制,避免重复计算
  • 支持主流本地模型,无API费用

部署:前后端分离,开发环境用Vite代理,生产环境用Nginx反向代理

资源消耗:处理1小时视频需约15分钟,占用715MB磁盘空间,推荐16GB内存

适用场景:技术分享学习、会议记录、访谈分析、课堂笔记、内部培训


常见问题与解答(FAQ)

Q1: 处理4K视频会很慢吗?
A: 视频分辨率不影响处理速度,因为 FFmpeg 只提取音频。4K视频的音频流与720P无异,转录和生成耗时基本相同。

Q2: 可以同时处理多个任务吗?
A: 后端是单线程处理模型,但前端支持并发上传。你可以上传5个视频,它们会在后端排队依次处理。如需并行,可启动多个后端实例绑定不同端口。

Q3: 转录质量如何?能识别方言吗?
A: Fast-Whisper base 模型对普通话识别准确率约92%,粤语、四川话等方言约85%。在安静环境下表现最佳。如果质量不佳,可尝试 medium 模型(更大更准但更慢)。

Q4: 支持实时转录吗?
A: 目前设计为离线批处理,不支持实时流式转录。如需实时功能,需修改 WebSocket 接口并集成实时 ASR 服务。

Q5: 生成的笔记长度能控制吗?
A: 通过 prompt 可以控制。在”模型配置”的 prompt 模板中添加”详细程度:简洁/标准/详细”指令。4B小模型对指令遵循能力良好。

Q6: 为什么必须使用虚拟环境?
A: 项目依赖 PyTorch 等重型库,版本冲突是常态。虚拟环境将项目依赖与系统 Python 隔离,这是保证稳定运行的必要前提,而非可选项。

Q7: 如何备份我的笔记?
A: 直接备份 backend/note_results/ 目录即可。所有笔记、音频、转录文本都在此。SQLite 数据库 backend/app.db 包含任务元数据,建议一并备份。

Q8: 能否导出为PDF?
A: 当前版本直接导出 Markdown。你可以用 Pandoc 转换:pandoc note.md -o note.pdf。前端计划在未来版本集成 pdfmake 实现一键PDF导出。

Q9: 支持GPU加速吗?
A: Fast-Whisper 和 PyTorch 自动检测CUDA。如果安装了NVIDIA GPU驱动并配置CUDA,转录速度可提升5-10倍。Ollama也支持GPU卸载。

Q10: 项目会收集我的使用数据吗?
A: 绝对不会。代码开源可审计,无任何遥测、统计或崩溃报告功能。你的数据100%保留在本地。