Core modules: - probe.rs: ffprobe execution logic - parser.rs: JSON parsing logic - output.rs: Output formatting - lib.rs: Library interface - main.rs: CLI entry point Features: - Extract video metadata using ffprobe - Parse video/audio/subtitle streams - Save to JSON file - Console summary output Documentation: - Added QUICKSTART.md - Added ENVIRONMENT_SETUP_REPORT.md
315 lines
5.9 KiB
Markdown
315 lines
5.9 KiB
Markdown
# video_probe (Rust) - 完整开发资源包
|
||
|
||
## 📚 文档清单
|
||
|
||
已创建以下开发文档:
|
||
|
||
### 1. **VIDEO_PROBE_RUST_DEVELOPMENT.md** (详细开发计划)
|
||
- ✅ 完整的开发步骤(8个阶段)
|
||
- ✅ 代码示例和模板
|
||
- ✅ 依赖清单
|
||
- ✅ 项目结构
|
||
- ✅ 测试策略
|
||
- ✅ 时间估算(6天)
|
||
|
||
### 2. **VIDEO_PROBE_RUST_QUICKSTART.md** (快速参考)
|
||
- ✅ 快速开始指南
|
||
- ✅ 核心实现要点
|
||
- ✅ 功能对照表
|
||
- ✅ 性能对比
|
||
- ✅ 开发清单
|
||
|
||
### 3. **init_video_probe_rust.sh** (自动初始化脚本)
|
||
- ✅ 自动创建 Cargo 项目
|
||
- ✅ 配置 Cargo.toml
|
||
- ✅ 创建目录结构
|
||
- ✅ 生成基础代码模板
|
||
- ✅ 初始化 Git 仓库
|
||
- ✅ 首次构建
|
||
|
||
### 4. **video_probe.py** (Python 原型)
|
||
- ✅ 完整功能实现
|
||
- ✅ 作为 Rust 版本的原型参考
|
||
- ✅ 功能验证标准
|
||
|
||
---
|
||
|
||
## 🎯 项目目标
|
||
|
||
### 核心目标
|
||
将 Python 版本的视频元数据提取工具重写为 Rust,实现:
|
||
- 🚀 **高性能**: 2-10x 更快的执行速度
|
||
- 💾 **低内存**: 更少的内存占用
|
||
- 📦 **易部署**: 单一二进制文件
|
||
- 🌍 **跨平台**: Linux/macOS/Windows 支持
|
||
|
||
### 功能对齐
|
||
| 功能 | 状态 |
|
||
|------|------|
|
||
| 使用 ffprobe 提取元数据 | ✅ Python 实现 |
|
||
| 提取格式信息 | ✅ Python 实现 |
|
||
| 提取视频流信息 | ✅ Python 实现 |
|
||
| 提取音频流信息 | ✅ Python 实现 |
|
||
| 提取字幕流信息 | ✅ Python 实现 |
|
||
| JSON 输出 | ✅ Python 实现 |
|
||
| 命令行界面 | ✅ Python 实现 |
|
||
| 友好输出 | ✅ Python 实现 |
|
||
|
||
---
|
||
|
||
## 🛠️ 技术栈
|
||
|
||
### Rust 核心依赖
|
||
```toml
|
||
[dependencies]
|
||
serde = { version = "1.0", features = ["derive"] }
|
||
serde_json = "1.0"
|
||
chrono = { version = "0.4", features = ["serde"] }
|
||
anyhow = "1.0"
|
||
thiserror = "1.0"
|
||
clap = { version = "4.0", features = ["derive"] }
|
||
```
|
||
|
||
### 外部依赖
|
||
- **ffprobe**: 来自 FFmpeg(系统级依赖)
|
||
|
||
---
|
||
|
||
## 📋 开发流程
|
||
|
||
### 方式 1: 使用自动脚本(推荐)
|
||
|
||
```bash
|
||
# 1. 运行初始化脚本
|
||
./init_video_probe_rust.sh
|
||
|
||
# 2. 进入项目目录
|
||
cd video_probe
|
||
|
||
# 3. 实现核心功能
|
||
# 参考 VIDEO_PROBE_RUST_DEVELOPMENT.md
|
||
|
||
# 4. 测试
|
||
cargo test
|
||
cargo run -- video.mp4
|
||
|
||
# 5. 构建 release 版本
|
||
cargo build --release
|
||
```
|
||
|
||
### 方式 2: 手动创建
|
||
|
||
```bash
|
||
# 1. 创建项目
|
||
cargo new video_probe
|
||
cd video_probe
|
||
|
||
# 2. 配置 Cargo.toml
|
||
# 参考 VIDEO_PROBE_RUST_DEVELOPMENT.md
|
||
|
||
# 3. 创建目录结构
|
||
mkdir -p src tests docs
|
||
|
||
# 4. 实现功能
|
||
# 按照开发文档逐步实现
|
||
|
||
# 5. 测试和构建
|
||
cargo test
|
||
cargo build
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 实现优先级
|
||
|
||
### P0 (必须)
|
||
1. ✅ 项目初始化
|
||
2. 🔨 数据结构定义
|
||
3. 🔨 ffprobe 执行逻辑
|
||
4. 🔨 JSON 解析逻辑
|
||
5. 🔨 输出格式化
|
||
6. 🔨 命令行界面
|
||
|
||
### P1 (重要)
|
||
1. 🔨 单元测试
|
||
2. 🔨 集成测试
|
||
3. 🔨 错误处理
|
||
4. 🔨 文档编写
|
||
|
||
### P2 (可选)
|
||
1. ⏸️ 批量处理
|
||
2. ⏸️ 并行处理
|
||
3. ⏸️ 进度条
|
||
4. ⏸️ 递归扫描
|
||
|
||
---
|
||
|
||
## 🎓 学习资源
|
||
|
||
### Rust 官方
|
||
- [Rust Book](https://doc.rust-lang.org/book/)
|
||
- [Rust by Example](https://doc.rust-lang.org/rust-by-example/)
|
||
- [Rust API Guidelines](https://rust-lang.github.io/api-guidelines/)
|
||
|
||
### 依赖库文档
|
||
- [serde](https://serde.rs/)
|
||
- [clap](https://docs.rs/clap/)
|
||
- [anyhow](https://docs.rs/anyhow/)
|
||
- [chrono](https://docs.rs/chrono/)
|
||
|
||
### FFprobe
|
||
- [FFprobe Documentation](https://ffmpeg.org/ffprobe.html)
|
||
- [FFprobe JSON Output](https://ffmpeg.org/ffprobe.html#json)
|
||
|
||
---
|
||
|
||
## ✅ 验证清单
|
||
|
||
### 开发前
|
||
- [ ] 已安装 Rust (rustc --version)
|
||
- [ ] 已安装 Cargo (cargo --version)
|
||
- [ ] 已安装 ffprobe (ffprobe -version)
|
||
- [ ] 已阅读开发文档
|
||
- [ ] 已了解 Python 原型
|
||
|
||
### 开发中
|
||
- [ ] 代码编译通过 (cargo build)
|
||
- [ ] 测试通过 (cargo test)
|
||
- [ ] 代码格式化 (cargo fmt)
|
||
- [ ] Lint 检查通过 (cargo clippy)
|
||
- [ ] 功能与 Python 版本一致
|
||
|
||
### 开发后
|
||
- [ ] Release 构建成功
|
||
- [ ] 文档完整
|
||
- [ ] README 清晰
|
||
- [ ] Git 提交规范
|
||
- [ ] 代码审查通过
|
||
|
||
---
|
||
|
||
## 🚀 发布流程
|
||
|
||
### 1. 本地测试
|
||
```bash
|
||
cargo test
|
||
cargo build --release
|
||
./target/release/video_probe video.mp4
|
||
```
|
||
|
||
### 2. 创建 Git 仓库
|
||
```bash
|
||
git init
|
||
git add .
|
||
git commit -m "Initial commit"
|
||
```
|
||
|
||
### 3. 推送到 Gitea
|
||
```bash
|
||
# 在 Gitea 创建仓库
|
||
git remote add origin <gitea-url>
|
||
git push -u origin main
|
||
```
|
||
|
||
### 4. 可选:发布到 crates.io
|
||
```bash
|
||
cargo login
|
||
cargo publish
|
||
```
|
||
|
||
---
|
||
|
||
## 📈 性能基准
|
||
|
||
### 预期性能提升
|
||
|
||
| 操作 | Python | Rust (预期) | 提升 |
|
||
|------|--------|-------------|------|
|
||
| 启动 | 50ms | 1ms | 50x |
|
||
| 解析 1GB 视频 | 2s | 0.5s | 4x |
|
||
| 内存占用 | 30MB | 5MB | 6x |
|
||
| 二进制大小 | N/A | 2MB | - |
|
||
|
||
### 基准测试方法
|
||
```bash
|
||
# Python
|
||
time python3 video_probe.py video.mp4
|
||
|
||
# Rust
|
||
time ./target/release/video_probe video.mp4
|
||
```
|
||
|
||
---
|
||
|
||
## 🐛 常见问题
|
||
|
||
### Q1: ffprobe 未找到
|
||
```bash
|
||
# macOS
|
||
brew install ffmpeg
|
||
|
||
# Linux
|
||
sudo apt-get install ffmpeg
|
||
|
||
# Windows
|
||
# 从 https://ffmpeg.org 下载
|
||
```
|
||
|
||
### Q2: Rust 未安装
|
||
```bash
|
||
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
||
```
|
||
|
||
### Q3: 编译错误
|
||
```bash
|
||
# 更新 Rust
|
||
rustup update
|
||
|
||
# 清理并重新构建
|
||
cargo clean
|
||
cargo build
|
||
```
|
||
|
||
### Q4: 测试失败
|
||
```bash
|
||
# 检查测试视频文件
|
||
ls tests/fixtures/
|
||
|
||
# 运行详细测试
|
||
cargo test -- --nocapture
|
||
```
|
||
|
||
---
|
||
|
||
## 📞 获取帮助
|
||
|
||
1. **查看文档**
|
||
- `VIDEO_PROBE_RUST_DEVELOPMENT.md`
|
||
- `VIDEO_PROBE_RUST_QUICKSTART.md`
|
||
|
||
2. **参考 Python 原型**
|
||
- `video_probe.py`
|
||
|
||
3. **Rust 社区**
|
||
- [Rust Forum](https://users.rust-lang.org/)
|
||
- [Reddit r/rust](https://www.reddit.com/r/rust/)
|
||
|
||
4. **提交 Issue**
|
||
- Gitea 仓库 Issues 页面
|
||
|
||
---
|
||
|
||
## 🎉 下一步行动
|
||
|
||
1. ✅ 阅读开发文档
|
||
2. ✅ 运行初始化脚本
|
||
3. 🔨 实现核心功能
|
||
4. 🔨 编写测试
|
||
5. 🔨 创建文档
|
||
6. 🔨 推送到 Gitea
|
||
7. 🔨 发布到 crates.io(可选)
|
||
|
||
---
|
||
|
||
**准备开始了吗?运行 `./init_video_probe_rust.sh` 开始吧!** 🚀
|