# Video2Note
**Repository Path**: yindong-wen/Video2Note
## Basic Information
- **Project Name**: Video2Note
- **Description**: 视频转笔记工具,支持视频转文本(v2t)、文本转笔记(t2n)、视频转笔记(v2n)三种模式。基于 OpenAI Whisper 的本地视频语音识别,基于大模型的文本转笔记,支持一键视频转笔记。
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-04
- **Last Updated**: 2026-04-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Video2Note (V2N) - 视频转笔记工具
视频转笔记工具,支持视频转文本(v2t)、文本转笔记(t2n)、视频转笔记(v2n)三种模式。
---
## 简介
> **本项目是一个纯 Vibe Coding 项目 —— 没有敲一行代码,完全通过与 AI 对话完成开发。**
Video2Note 是一个统一的命令行工具,支持三种工作模式:
- **v2t 模式**: 视频转文本 (Video to Text)
- **t2n 模式**: 文本转笔记 (Text to Note)
- **v2n 模式**: 视频转笔记 (Video to Note,一键完成)
基于 OpenAI Whisper 进行本地语音识别,调用大模型生成结构化笔记。所有处理都在本地完成,无需联网(首次下载模型和调用大模型除外),确保数据隐私安全。
**核心特点:**
- 三种工作模式灵活切换
- 纯本地语音识别,视频数据不上传云端
- 支持多语言自动识别
- 多种笔记格式(技术笔记/周报/日记)
- 自动清理临时文件,不污染系统
- 详细的日志输出,便于排查问题
---
## 功能特性
### 三种工作模式
| 模式 | 说明 | 命令示例 |
|------|------|----------|
| v2t | 视频转文本 | `python main.py --mode v2t -i video.mp4` |
| t2n | 文本转笔记 | `python main.py --mode t2n -i text.txt -nf weekly` |
| v2n | 视频转笔记 | `python main.py --mode v2n -i video.mp4 -nf note` |
### 核心功能
| 功能 | 说明 |
|------|------|
| 视频转录 | 支持 MP4/MKV/AVI/MOV 等常见视频格式 |
| 音频提取 | 自动提取并重采样为 16kHz/16bit WAV |
| 多语言支持 | 多语言自动检测或手动指定 |
| 大模型笔记 | 调用通义千问生成结构化笔记 |
| 多格式笔记 | note(技术笔记)/weekly(周报)/diary(日记) |
### 输出格式对比
| 格式 | 适用场景 | 特点 |
|------|----------|------|
| TXT | 阅读、编辑、搜索引擎索引 | 纯文本,段落分隔 |
| JSON | 程序化处理、数据分析 | 完整数据,含时间戳和置信度 |
### Whisper 模型选择
| 模型 | 大小 | 速度 | 准确度 | 适用场景 |
|------|------|------|--------|----------|
| tiny | 39 MB | 最快 | 一般 | 快速测试 |
| base | 74 MB | 快 | 良好 | **日常使用(推荐)** |
| small | 244 MB | 中等 | 较好 | 质量优先 |
| medium | 769 MB | 较慢 | 好 | 高质量要求 |
| large | 1550 MB | 最慢 | 最好 | 专业用途 |
---
## 项目结构
```
Video2Note/
├── main.py # 统一入口脚本(推荐)
├── transcribe.py # v2t 入口:视频转文本
├── generate.py # t2n 入口:文本转笔记
├── audio_extractor.py # 音频提取模块
├── transcriber.py # Whisper 转录模块
├── output_writer.py # 输出写入模块
├── prompts_loader.py # 提示词模板加载
├── llm_client.py # 大模型客户端
├── config.py # 配置管理
├── utils/ # 工具函数包
├── prompts/ # 提示词模板目录
│ ├── note.md # 技术笔记模板
│ ├── weekly.md # 周报模板
│ └── diary.md # 日记模板
├── vocab/ # 词汇表目录
├── requirements.txt # Python 依赖
├── README.md # 项目文档
├── models/ # Whisper 模型存放目录
├── output/ # 输出根目录
│ ├── text/ # v2t 输出目录
│ ├── notes/ # t2n 输出目录
│ └── temp/ # v2n 中间文件目录
├── temp/ # 临时音频文件目录
└── tools/ # FFmpeg 存放目录
```
---
## 部署与安装
### 1. 克隆仓库
```bash
git clone
cd Video2Note
```
### 2. 安装 FFmpeg
FFmpeg 是必需的系统依赖,用于从视频提取音频。
**Windows:**
```powershell
# 使用 Chocolatey
choco install ffmpeg
# 或手动安装
# 1. 从 https://ffmpeg.org/download.html 下载
# 2. 解压到你期望的目录
# 3. 将 bin 目录添加到系统 PATH
```
**macOS:**
```bash
brew install ffmpeg
```
**Ubuntu/Debian:**
```bash
sudo apt update
sudo apt install ffmpeg
```
**验证安装:**
```bash
ffmpeg -version
```
### 3. 项目内 FFmpeg 配置(推荐)
为了实现项目的独立运行,可以将 FFmpeg 放在项目目录内:
1. 下载 FFmpeg 可执行文件(Windows: `ffmpeg.exe`,Linux/Mac: `ffmpeg`)
2. 将可执行文件放入项目根目录的 `tools/` 文件夹
3. 程序会自动检测并使用该 FFmpeg
```
Video2Note/
├── tools/
│ └── ffmpeg.exe # 放置 FFmpeg 可执行文件
└── ...
```
### 4. 创建虚拟环境
```bash
# Windows
python -m venv venv
venv\Scripts\activate
# macOS/Linux
python3 -m venv venv
source venv/bin/activate
```
### 5. 安装 Python 依赖
```bash
pip install -r requirements.txt
```
首次运行时会自动下载 Whisper 模型到项目根目录的 `models/` 文件夹。
---
## 使用说明
### 快速开始
**统一入口 (推荐)**
```bash
# 视频转文本
python main.py --mode v2t -i video.mp4
# 文本转笔记
python main.py --mode t2n -i transcript.txt -nf note
# 视频直接转笔记(一键完成)
python main.py --mode v2n -i video.mp4 -nf weekly
```
### 命令行参数
| 参数 | 简写 | 必填 | 默认值 | 说明 |
|------|------|------|--------|------|
| `--mode` | `-m` | 是 | - | 工作模式:v2t/t2n/v2n |
| `--input` | `-i` | 是 | - | 输入文件路径 |
| `--output` | `-o` | 否 | output | 输出根目录 |
| `--verbose` | `-v` | 否 | False | 显示详细日志 |
**v2t 模式参数:**
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--whisper-model` | base | Whisper模型(tiny/base/small/medium/large)|
| `--language` | auto | 语言代码(zh/en/ja)|
| `--text-format` | txt | 输出格式(txt/json)|
**t2n 模式参数:**
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--note-format` | note | 笔记格式(note/weekly/diary)|
| `--llm-model` | qwen3-max | 大模型选择 |
| `--temperature` | 自动 | 生成温度(0.0-2.0)|
| `--preview` | False | 预览模式,不保存文件 |
**v2n 模式参数:**
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--keep-text` | False | 保留中间文本文件 |
### 使用示例
**示例 1: 视频转文本**
```bash
python main.py --mode v2t -i meeting.mp4 -o ./output/ -l zh
```
**示例 2: 文本转周报**
```bash
python main.py --mode t2n -i meeting.txt -o ./output/ -nf weekly
```
**示例 3: 视频直接转技术笔记**
```bash
python main.py --mode v2n -i lecture.mp4 -nf note --keep-text
```
### 输出文件
```
output/
├── text/ # v2t 输出
│ └── video.txt
├── notes/ # t2n/v2n 输出
│ └── video_note.md
└── temp/ # v2n 中间文件(自动清理)
```
---
## 开源协议
本项目基于 [MIT](LICENSE) License 开源。
Copyright (C) 2026 - present by Yd Wen
---
## 作者
- **Yd Wen**
- [GitHub](https://github.com/Yd-Wen)
- [Gitee](https://gitee.com/yindong-wen)
- [个人主页](https://yindongwen.top)
---
## Vibe Coding 开发历程
> **什么是 Vibe Coding?**
>
> Vibe Coding 是一种全新的开发方式 —— 开发者通过自然语言与 AI 对话,描述需求和想法,由 AI 生成代码并完成实现。开发者专注于产品思维、架构设计和需求表达,而具体的编码工作交给 AI 完成。
本项目从零开始,完全采用 Vibe Coding 方式开发。以下是三个核心特性的诞生过程:
### v2t 特性:视频转文本
**需求描述**:将视频中的语音提取并转录成文本
**开发过程**:
1. **技术选型阶段**:与 AI 讨论技术方案,确定使用 OpenAI Whisper 进行本地语音识别
2. **架构设计阶段**:设计视频→音频→文本的处理流程
3. **实现阶段**:通过多轮对话,逐步完善音频提取、Whisper 调用、输出格式化等功能
4. **迭代优化**:添加多语言支持、多种输出格式(TXT/JSON)、模型选择等特性
**关键决策**:
- 使用 FFmpeg 进行音频提取,确保兼容性
- 音频统一转换为 16kHz/16bit/单声道,优化 Whisper 识别效果
- 纯本地处理,保护数据隐私
### t2n 特性:文本转笔记
**需求描述**:将转录的文本通过大模型加工成结构化笔记
**开发过程**:
1. **设计 Prompt 模板**:与 AI 协作设计技术笔记、周报、日记三种笔记格式的提示词模板
2. **LLM 客户端开发**:封装通义千问 API 调用,支持流式输出和错误处理
3. **模板引擎实现**:实现 Markdown 模板的动态加载和变量替换
4. **参数调优**:通过多轮测试确定最优的 temperature 等生成参数
**关键决策**:
- 采用 Markdown 文件作为提示词模板,便于维护和扩展
- 支持三种笔记格式:技术笔记(note)、周报(weekly)、日记(diary)
- 添加预览模式,方便调试 Prompt 效果
### v2n 特性:视频转笔记(一键完成)
**需求描述**:将 v2t 和 t2n 串联,实现视频直接生成笔记
**开发过程**:
1. **架构整合**:设计统一的入口脚本 `main.py`,支持三种工作模式
2. **流程串联**:实现 v2t → t2n 的自动化流水线
3. **参数透传**:设计优雅的参数传递机制,保持各脚本的独立性
4. **资源管理**:添加自动清理机制,避免中间文件污染
**关键决策**:
- 复用已有的 `transcribe.py` 和 `generate.py`,不重复造轮子
- 统一的命令行参数风格,降低用户学习成本
- v2n 模式自动清理中间文件,保持输出目录整洁
- 提供 `--keep-text` 选项,允许保留中间文本文件
### Vibe Coding 的体验与感悟
**优势**:
- **开发效率极高**:3 天内完成从想法到可用产品的全过程
- **专注设计而非实现**:将精力集中在产品逻辑和用户体验上
- **代码质量稳定**:AI 生成的代码风格一致,结构清晰
- **快速迭代**:通过对话即可修改功能,无需手动改代码
**挑战**:
- **需求表达要清晰**:需要准确描述想要的功能,模糊的需求会导致偏差
- **上下文管理**:长对话中需要不断回顾和确认之前的决策
- **技术债务**:需要主动要求 AI 进行重构和优化,避免代码臃肿
**给想尝试 Vibe Coding 的开发者**:
1. 从明确的小需求开始,逐步扩展
2. 保持对话的连贯性,让 AI 理解项目的整体架构
3. 不要害怕重构,定期要求 AI 优化代码结构
4. 保存好提示词模板,它们是可以复用的资产
---
## 更新日志
### v1.1.0 (2026-04-05)
**V2T + T2N 合并完成**
- 新增统一入口 `main.py`,支持三种工作模式:
- `v2t` 模式:视频转文本
- `t2n` 模式:文本转笔记
- `v2n` 模式:视频直接转笔记(一键完成)
- 复用 `transcribe.py` 和 `generate.py`
- 参数透传设计,保持各脚本独立性
- 自动清理 v2n 模式中间文件
### v1.0.0 (2026-04-04)
**基础功能完成**
- 实现核心转录流程:视频 → 音频 → 文本
- 支持 2 种输出格式:TXT、JSON
- 集成 FFmpeg 音频提取(16kHz/16bit/单声道)
- 集成 OpenAI Whisper 语音识别
- 支持 5 种模型规模选择
---
## 致谢
- [OpenAI Whisper](https://github.com/openai/whisper) - 强大的开源语音识别模型
- [FFmpeg](https://ffmpeg.org/) - 业界标准的音视频处理工具
- [ffmpeg-python](https://github.com/kkroening/ffmpeg-python) - FFmpeg 的 Python 封装
---
Made with ❤️ by Video2Note Project