Skip to content

Commit

Permalink
Add README_CN
Browse files Browse the repository at this point in the history
  • Loading branch information
ionic-bond committed Mar 7, 2024
1 parent c9c8c83 commit c6e8d64
Show file tree
Hide file tree
Showing 3 changed files with 182 additions and 1 deletion.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
[![PyPI version](https://badge.fury.io/py/stream-translator-gpt.svg)](https://badge.fury.io/py/stream-translator-gpt)

# stream-translator-gpt

English | [简体中文](./README_CN.md)

```mermaid
flowchart LR
subgraph ga["`**Input**`"]
Expand Down
178 changes: 178 additions & 0 deletions README_CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
[![PyPI version](https://badge.fury.io/py/stream-translator-gpt.svg)](https://badge.fury.io/py/stream-translator-gpt)

# stream-translator-gpt

[English](./README.md) | 简体中文

```mermaid
flowchart LR
subgraph ga["`**输入**`"]
direction LR
aa("`**FFmpeg**`")
ab("`**计算机音频设备**`")
ac("`**yt-dlp**`")
ad("`**本地视频/音频文件**`")
ae("`**直播流**`")
ac --> aa
ad --> aa
ae --> ac
end
subgraph gb["`**音频切割**`"]
direction LR
ba("`**人声检测**`")
end
subgraph gc["`**语音转文字**`"]
direction LR
ca("`**Whisper**`")
cb("`**Faster-Whisper**`")
cc("`**Whisper API**`")
end
subgraph gd["`**翻译**`"]
direction LR
da("`**GPT API**`")
db("`**Gemini API**`")
end
subgraph ge["`**输出**`"]
direction LR
ea("`**打印到stdout**`")
eb("`**Cqhttp**`")
end
aa --> gb
ab --> gb
gb ==> gc
gc ==> gd
gd ==> ge
```

一个用于直播流音频实时转文字/翻译的命令行工具。使用[yt-dlp](https://github.com/yt-dlp/yt-dlp)从直播URL获取音频数据,并使用[Whisper](https://github.com/openai/whisper) / [Faster-Whisper](https://github.com/SYSTRAN/faster-whisper)进行语音转文字。

此分支基于[人声检测](https://github.com/snakers4/silero-vad)优化了音频切片逻辑,引入了[GPT API](https://platform.openai.com/api-keys) / [Gemini API](https://aistudio.google.com/app/apikey),以支持除英语之外的语言翻译,并支持从计算机的音频设备输入。

在Colab上试用:[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/ionic-bond/stream-translator-gpt/blob/main/stream_translator.ipynb)

## 准备工作

**Linux或Windows:**

1. Python >= 3.8 (推荐 >= 3.10)
2. [**在您的系统上安装CUDA。**](https://developer.nvidia.com/cuda-downloads) 您可以使用 ```nvcc --version``` 来检查已安装的CUDA版本。
3. 如果你想使用 **Faseter-Whisper**, 需要[**将cuDNN安装到你的CUDA目录中**](https://developer.nvidia.com/cuda-downloads)
4. [**将PyTorch(带有CUDA)安装到您的Python中。**](https://pytorch.org/get-started/locally/)
5. 如果你想用 **Gemini API** 进行翻译,需要[**创建一个Google API密钥**](https://aistudio.google.com/app/apikey)。(推荐,每分钟免费60次请求)
6. 如果你想用 **Whisper API** 进行转录或 **GPT API** 进行翻译,需要[**创建一个OpenAI API密钥**](https://platform.openai.com/api-keys)

**如果您是Windows用户,则还需:**

1. [**在PATH中添加并安装ffmpeg。**](https://www.thewindowsclub.com/how-to-install-ffmpeg-on-windows-10#:~:text=Click%20New%20and%20type%20the,Click%20OK%20to%20apply%20changes.)
2. 下载并添加[**yt-dlp**](https://github.com/yt-dlp/yt-dlp)至PATH路径。

## 安装

**从 PyPI 安装稳定版本(推荐):**

```
pip install stream-translator-gpt
stream-translator-gpt
```

或者

**从 Github 拉取开发版本代码:**

```
git clone https://github.com/ionic-bond/stream-translator-gpt.git
pip install -r ./stream-translator-gpt/requirements.txt
python3 ./stream-translator-gpt/translator.py
```

## 使用方法

- 直播流语音转文字(默认使用 **Whisper**):

```stream-translator-gpt {URL} --model large --language {input_language}```

- 通过 **Faster Whisper** 进行语音转文字:

```stream-translator-gpt {URL} --model large --language {input_language} --use_faster_whisper```

- 通过 **Whisper API** 进行语音转文字:

```stream-translator-gpt {URL} --language {input_language} --use_whisper_api --openai_api_key {your_openai_key}```

- 通过 **Gemini** 将内容翻译成其他语言:

```stream-translator-gpt {URL} --model large --language ja --gpt_translation_prompt "翻译以下日语为中文,只输出译文,不要输出原文" --google_api_key {your_google_key}```

- 通过 **GPT** 将内容翻译成其他语言:

```stream-translator-gpt {URL} --model large --language ja --gpt_translation_prompt "翻译以下日语为中文,只输出译文,不要输出原文" --openai_api_key {your_openai_key}```

- 同时使用 **Whisper API****Gemini**

```stream-translator-gpt {URL} --model large --language ja --use_whisper_api --openai_api_key {your_openai_key} --gpt_translation_prompt "Translate from Japanese to Chinese" --google_api_key {your_google_key}```

- 使用本地视频/音频文件作为输入源:

```stream-translator-gpt /path/to/file --model large --language {input_language}```

- 使用计算机麦克风作为输入源:

```stream-translator-gpt device --model large --language {input_language}```

将使用系统默认的音频设备作为输入。

如果你想使用其他音频输入设备,`stream-translator-gpt device --print_all_devices` 获取设备索引,然后运行 CLI 命令 `--device_index {index}`

如果你想使用另一个程序的音频输出作为输入,你需要[**启用立体声混音**](https://www.howtogeek.com/39532/how-to-enable-stereo-mix-in-windows-7-to-record-audio/)

- 将结果发送到 Cqhttp:

```stream-translator-gpt {URL} --model large --language {input_language} --cqhttp_url {your_cqhttp_url} --cqhttp_token {your_cqhttp_token}```

## 所有选项

| 选项 | 默认值 | 描述 |
| :--------------------------------- | :------------ | :----------------------------------------------------------------------------------------------------------------------- |
| **输入选项** |
| `URL` | | 直播流的URL。如果填写了本地文件路径,它将被用作输入。如果填写"device",输入将从您的PC音频设备获取。 |
| `--format` | wa* | 直播流格式代码,此参数将直接传递给yt-dlp。 |
| `--cookies` | | 用于打开仅会员可看的直播流,此参数将直接传递给yt-dlp。 |
| `--direct_url` | | 设置此标志以直接将URL传递给ffmpeg。否则,yt-dlp用于获取流URL。 |
| `--device_index` | | 音频输入设备的index。如果未设置,则使用系统默认音频输入设备。 |
| **音频切割选项** |
| `--frame_duration` | 0.1 | 处理实时流数据的单位(以秒为单位)。 |
| `--continuous_no_speech_threshold` | 0.8 | 如果连续一段时间内没有语音,则进行切片(以秒为单位)。 |
| `--min_audio_length` | 3.0 | 切片音频的最小长度(以秒为单位)。 |
| `--max_audio_length` | 30.0 | 切片音频的最大长度(以秒为单位)。 |
| `--prefix_retention_length` | 0.8 | 在切割过程中保留前缀音频的长度。 |
| `--vad_threshold` | 0.5 | 人声检测阈值。如果一个帧的语音概率高于此值,那么这个帧就是人声。 |
| **语音转文字选项** |
| `--model` | small | Whisper模型大小。请在[此处](https://github.com/openai/whisper#available-models-and-languages)查看可用模型。 |
| `--language` | auto | 直播流中的语言。请在[此处](https://github.com/openai/whisper#available-models-and-languages)查看可用语言。 |
| `--beam_size` | 5 | 波束搜索中的波束数量。设置为0以使用贪婪算法(更快但准确度较低)。 |
| `--best_of` | 5 | 在非零温度下采样时的候选者数量。 |
| `--use_faster_whisper` | | 设置此标志以使用Faster-Whisper实现,而不是原始的OpenAI实现 |
| `--use_whisper_api` | | 设置此标志以使用OpenAI Whisper API,而不是原始本地Whipser. |
| `--whisper_filters` | emoji_filter | 应用于whisper结果的过滤器,由","分隔。 |
| **翻译选项** |
| `--openai_api_key` | | 如果使用GPT翻译/Whisper API,需要OpenAI API密钥。 |
| `--google_api_key` | | 如果使用Gemini翻译,需要Google API密钥。 |
| `--gpt_model` | gpt-3.5-turbo | GPT模型名称,gpt-3.5-turbo或gpt-4。(如果使用Gemini,则无需更改此设置) |
| `--gpt_translation_prompt` | | 如果设置了该选项,将通过GPT / Gemini API(根据填写的API密钥决定)将结果文本翻译成目标语言。例如:"从日语翻译成中文" |
| `--gpt_translation_history_size` | 0 | 调用GPT / Gemini API时发送的先前消息数量。如果历史记录大小为0,则会并行运行翻译。如果历史记录大小> 0,则会串行运行翻译。 |
| `--gpt_translation_timeout` | 15 | 如果GPT / Gemini的翻译超过这个秒数,那么该次的翻译将被丢弃。 |
| `--gpt_base_url` | | 自定义GPT的API地址。 |
| `--retry_if_translation_fails` | | 当翻译超时/失败时重试。用于离线生成字幕。 |
| **输出选项** |
| `--output_timestamps` | | 输出文本时同时输出时间戳。 |
| `--hide_transcribe_result` | | 隐藏语音转文字的结果。 |
| `--cqhttp_url` | | 如果设置,将会把结果文本发送到cqhttp服务器。 |
| `--cqhttp_token` | | cqhttp的令牌,如果在服务器端没有设置,不需要填写。 |

## 联系我

Telegram: [@ionic_bond](https://t.me/ionic_bond)

## 捐赠

[PayPal捐赠](https://www.paypal.com/donate/?hosted_button_id=D5DRBK9BL6DUA)[PayPal](https://paypal.me/ionicbond3)
2 changes: 1 addition & 1 deletion stream_translator.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
"source": [
"!stream-translator-gpt https://www.youtube.com/watch?v=r1dytEjbUqo --model large --language ja \\\n",
" --use_faster_whisper \\\n",
" --gpt_translation_prompt \"Translate from Japanese to Chinese\" --google_api_key \"AIzaSyCPYq1F3WOlSGbWFcERf5qCv1hlo2SKOG8\""
" --gpt_translation_prompt \"Translate from Japanese to Chinese, only output the translation, do not output the original text\" --google_api_key \"AIzaSyCPYq1F3WOlSGbWFcERf5qCv1hlo2SKOG8\" --gpt_translation_history_size 2"
]
}
],
Expand Down

0 comments on commit c6e8d64

Please sign in to comment.