Metadata-Version: 2.4
Name: groq-whisper-cli
Version: 0.1.0
Summary: Groq Whisper 多 Key 并发语音转写 CLI 工具
Author: Your Name
License-Expression: MIT
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Multimedia :: Sound/Audio :: Speech
Requires-Python: >=3.12
Requires-Dist: httpx>=0.27
Requires-Dist: numpy>=2.0
Requires-Dist: onnxruntime>=1.19
Requires-Dist: silero-vad>=5.1
Description-Content-Type: text/markdown

# groq-whisper-cli

Groq Whisper 多 Key 并发语音转写 CLI 工具。

## 功能

- silero-vad 本地 VAD 智能切片
- 多 API Key 配额感知负载均衡
- 429 自动退避 + Key 切换
- 异步并发协程池
- 输出 SRT 字幕 + TXT 文本

## 安装

```bash
# 直接通过 uvx 运行（无需安装）
uvx run groq-whisper-cli -i audio.mp3

# 或安装到本地
uv tool install groq-whisper-cli
groq-whisper-cli -i audio.mp3
```

## 前置要求

- Python 3.12+
- ffmpeg（用于音频提取）

## API Key 配置

按优先级查找：

1. `--key-file` / `-k` 参数指定文件（每行一个 key）
2. 当前目录下的 `key.txt`
3. 环境变量 `GROQ_API_KEY`（多个 key 用逗号分隔）

```bash
# 方式一：环境变量
export GROQ_API_KEY="gsk_xxx,gsk_yyy"

# 方式二：key 文件
echo "gsk_xxx" > key.txt
echo "gsk_yyy" >> key.txt

# 方式三：命令行参数
groq-whisper-cli -i audio.mp3 -k /path/to/key.txt
```

## 用法

```bash
# 基本用法
groq-whisper-cli -i audio.mp3

# 指定语言和输出目录
groq-whisper-cli -i video.mp4 -l en -o ./output

# 多文件处理
groq-whisper-cli -i *.mp4 -w 8

# 完整参数
groq-whisper-cli -i audio.mp3 \
  -k key.txt \
  -o ./transcript \
  -w 4 \
  --chunk-sec 120 \
  -l zh \
  --retries 8
```

## 参数

| 参数 | 缩写 | 默认值 | 说明 |
|------|------|--------|------|
| `input` | - | 必填 | 输入文件路径，支持通配符 |
| `--key-file` | `-k` | - | API Key 文件路径 |
| `--out` | `-o` | `./transcript` | 输出目录 |
| `--workers` | `-w` | `4` | 并发 worker 数 |
| `--chunk-sec` | - | `120` | VAD 切片最大时长（秒） |
| `--lang` | `-l` | `zh` | ISO-639-1 语言代码 |
| `--retries` | - | `8` | 每个分片最大重试次数 |

## 作为库使用

```python
from groq_whisper import GroqKeyManager, AudioSplitter, GroqTranscriber

key_manager = GroqKeyManager(["gsk_xxx", "gsk_yyy"])
splitter = AudioSplitter(max_chunk_sec=120)
chunks = splitter.split("audio.mp3")

transcriber = GroqTranscriber(key_manager=key_manager, language="zh")
results = asyncio.run(transcriber.transcribe_all(chunks))
```

## License

MIT
