# 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 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` 开始吧!** 🚀