Initial commit: rust-scribe transcription tool

This commit is contained in:
2026-03-11 11:08:16 +08:00
commit f9653eef58
11 changed files with 1869 additions and 0 deletions

73
README.md Normal file
View File

@@ -0,0 +1,73 @@
# rust-scribe
`rust-scribe` 是一個高效能的影片/音頻逐字稿轉寫工具,使用 Rust 語言編寫,並結合了 [Whisper.cpp](https://github.com/ggerganov/whisper.cpp) 的強大轉寫能力與 [FFmpeg](https://ffmpeg.org/) 的音頻處理功能,可自動生成帶有時間碼的逐字稿。
## 功能特性
- **高效音頻提取**:利用 FFmpeg 直接從影片或音頻檔案中提取並重採樣為 Whisper 所需的格式 (16kHz, Mono, f32)。
- **精準轉寫**:基於 OpenAI Whisper 模型,提供高精度的語音轉文字功能。
- **時間碼支援**:自動產生精確到毫秒的逐字稿時間戳。
- **語言自動檢測**:若未指定語言,可自動偵測輸入音頻的語言。
- **優化進度顯示**:在轉寫過程中提供即時的處理進度、耗時與預估剩餘時間。
## 前置需求
在編譯與執行前,請確保系統已安裝以下環境:
1. **Rust 環境**:請安裝 [Rustup](https://rustup.rs/)。
2. **FFmpeg**:系統必須安裝 FFmpeg 開發庫。
- macOS: `brew install ffmpeg`
- Ubuntu/Debian: `sudo apt install libavcodec-dev libavformat-dev libavutil-dev libswresample-dev`
3. **Whisper 模型**:請準備 Whisper 的 `.bin` 模型檔案 (例如 `ggml-base.bin`),並放置於 `models/` 目錄中。
## 編譯與安裝
```bash
# 複製專案
git clone <repository-url>
cd rust-scribe
# 編譯 Release 版本 (建議)
cargo build --release
```
## 使用方式
執行程式時,需指定輸入檔案路徑及模型路徑:
```bash
./target/release/rust-scribe <input_file> --model models/<your-model.bin>
```
### 參數說明
- `<input_file>`: 欲轉寫的影片或音頻檔案路徑 (位置參數)。
- `-m, --model <MODEL_PATH>`: Whisper 模型檔案路徑 (必填)。
- `-l, --language <LANG>`: 指定轉寫語言 (例如 `zh`, `en`)。若不指定,系統將自動偵測 (選填)。
- `-v, --verbose`: 開啟詳細轉寫進度輸出 (選填)。
**使用範例**
```bash
# 指定使用 base 模型,自動檢測語言
cargo run --release -- video.mp4 --model models/ggml-base.bin
# 指定使用中文進行轉寫
cargo run --release -- lecture.mkv --model models/ggml-base.bin --language zh
```
## 專案結構
```
rust-scribe/
├── src/
│ └── main.rs # 核心邏輯 (音頻處理、Whisper 轉寫、CLI 介面)
├── models/ # 存放 Whisper 模型檔案
├── Cargo.toml # 專案依賴與配置
└── .cargo/
└── config.toml # Cargo 編譯配置
```
## 開發者規範
請參閱 `AGENTS.md` 了解詳細的代碼風格、編譯與測試指南。