video-dubbing


Namevideo-dubbing JSON
Version 1.0.0 PyPI version JSON
download
home_pageNone
SummaryAn AI powered tool to execute end-to-end video dubbing.
upload_time2025-03-10 19:39:08
maintainerNone
docs_urlNone
authoryuanshanhua
requires_python==3.11
licenseNone
keywords ai dubbing llm openai video whisper
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Video Dubbing - 视频译配自动化工具

![Python版本](https://img.shields.io/badge/python-3.11-blue)
![许可协议](https://img.shields.io/badge/license-MIT-green)

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

Video Dubbing 是一款 AI 驱动的命令行视频译配工具, 可进行语音识别 (ASR)、文本翻译、语音生成 (TTS), 实现端到端视频译配, 并支持批量处理视频文件, 一键生成多语言配音视频.

成品展示:

- [CMU15-445 数据库系统导论](https://www.bilibili.com/video/BV1Xh91YoEkt)
- [CMU15-721 高级数据库系统](https://www.bilibili.com/video/BV12291Y2E7u)
- [CS149 并行计算](https://www.bilibili.com/video/BV1d2R8YsEu8)

## ✨ 功能特性

- **功能全面**: ASR → 翻译 → TTS 全链路自动化
  - 高精度语音识别 powered by [OpenAI-Whipser](https://github.com/openai/whisper)
  - 支持使用兼容 OpenAI 的任意 LLM API 进行翻译
  - 基于 Edge-TTS 的高质量语音合成
- **配置高度灵活**: 各功能可独立开关, 以用于**字幕批量翻译**、**语音合成**等场景
- **丰富的后处理选项**: 内置音轨/字幕添加功能, 支持字幕格式自定义
- **批量处理**: 支持 glob 匹配, 一键批处理
- **多硬件支持**: 支持在 CPU/CUDA/NPU 平台上运行

## 🚀 快速开始

### 配置运行环境

**要求**: Python 3.11, ffmpeg, ffprobe

推荐使用优秀的 Python 环境管理工具 [astral-sh/uv](https://github.com/astral-sh/uv)

**安装 ffmpeg & ffprobe**:

- Windows: 下载 [此链接](https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip) 并解压, 将 `bin/ffmpeg.exe` 和 `bin/ffprobe.exe` 复制到某个位于 `PATH` 中的目录
- MacOS: `brew install ffmpeg`
- Linux: ...

### 安装 Video Dubbing

按需选择以下安装方式:

**最小安装**:

适用于无须 ASR, 仅需翻译和 TTS 的场景, 可避免安装 `pytorch, pandas` 等大型依赖项, 占用空间仅 ~20MB

```bash
pip install video-dubbing
# or
uv tool install -p 3.11 video-dubbing[npu] # with uv
```

**基础安装**:

```bash
pip install video-dubbing[asr]
# or
uv tool install -p 3.11 video-dubbing[asr] # with uv
```

**华为 NPU**:

```bash
pip install video-dubbing[npu]
# or
uv tool install -p 3.11 video-dubbing[npu] # with uv
```

理论上只要 [torch_npu](https://gitee.com/ascend/pytorch) 支持的平台都可以运行, 在 Ascend 910B3 上测试通过, 若你成功在其他平台上运行, 欢迎提交 PR 更新此处.

### 基础用法

由于配置项较多, 推荐使用配置文件设定大多数配置项. 首先生成默认配置文件:

**生成配置文件**:

```bash
dub -gc # 将在当前目录下生成 config.json, 包含默认配置
```

而后在执行时, 通过 `-c` 参数指定配置文件, 并添加其他参数覆盖配置文件中的设置:

**加载配置文件**:

```bash
dub -c config.json # 后加其他命令行参数
```

### 示例

**示例 1**: 批量转译 videos 目录下所有 mp4 文件为中文:

```bash
dub -c config.json --input-videos videos/*.mp4 --use-html
```

**示例 2**: 批量翻译 subs 目录下的字幕为中文:

```bash
dub -c config.json --input-subtitles subs/*.srt --asr False --tts False
```

## ⚠️ 注意事项

- 不建议一开始就直接批处理大量文件, 建议先尝试单个文件, 确保配置正确
- 可设置 `--debug` 及 `--log_dir` 打开调试模式并保存日志, 以便排查问题
- 上报 Issue 时请提供详细的配置信息及日志, 以便更快定位问题

文件限制:

- 视频文件支持格式取决于 ffmpeg, 常见格式如 mp4, mkv, webm 等均支持
- 字幕文件仅支持 srt 格式, 其他格式可使用 ffmpeg 转换为 srt
- 确保字幕文件编码为 UTF-8, 否则可能导致乱码问题
- 若仅指定视频, 必须开启 ASR; 若仅指定字幕, 无法开启 ASR; 若同时指定, 则二者数量和顺序必须一一对应

NPU 相关:

- 使用 NPU 时, `--device` 保持为 `cuda` 即可, 无需修改

LLM 相关:

- `--use_html` 选项当原文字幕分句良好时推荐开启(即每行都基本以句号结尾), 否则推荐关闭. 使用 whisper 转译英文视频生成的字幕一般都符合此要求.

## ⚙️ 全部配置参数

```bash
options:
  -h, --help            show this help message and exit
  -c CONFIG, --config CONFIG
                        加载 JSON 或 YAML 格式的配置文件 (default: None)
  -gc, --gen-config     生成默认配置文件 (default: False)
  -v, --version         show program's version number and exit

General:
  --input_videos INPUT_VIDEOS [INPUT_VIDEOS ...], --input-videos INPUT_VIDEOS [INPUT_VIDEOS ...]
                        待处理的视频文件 (default: [])
  --input_subtitles INPUT_SUBTITLES [INPUT_SUBTITLES ...], --input-subtitles INPUT_SUBTITLES [INPUT_SUBTITLES ...]
                        待处理的字幕文件 (srt 格式) (default: [])
  --asr [ASR]           语音识别开关 (default: True)
  --translate [TRANSLATE]
                        翻译开关 (default: True)
  --tts [TTS]           语音合成开关 (default: True)
  --debug [DEBUG]       调试模式 (default: False)
  --log_dir LOG_DIR, --log-dir LOG_DIR
                        日志目录, 若为空则不保存 (default: None)

ASR:
  --model MODEL         whisper 模型型号 (default: turbo)
  --model_dir MODEL_DIR, --model-dir MODEL_DIR
                        whisper 模型存储目录 (default: None)
  --device DEVICE       用于运行 ASR 相关模型的硬件设备 (default: cuda)
  --align [ALIGN]       进行词汇对齐 (default: False)
  --diarize [DIARIZE]   进行说话者分离 (default: False)
  --hf_token HF_TOKEN, --hf-token HF_TOKEN
                        Hugging Face token. 用于下载需同意用户协议的某些模型 (default: )

Translate:
  --target_lang TARGET_LANG, --target-lang TARGET_LANG
                        目标语言 (default: 简体中文)
  --base_url BASE_URL, --base-url BASE_URL
                        LLM API 地址 (default: https://api.openai.com/v1)
  --api_key API_KEY, --api-key API_KEY
                        LLM API key (default: )
  --llm_model LLM_MODEL, --llm-model LLM_MODEL
                        LLM 模型 (default: )
  --use_html [USE_HTML], --use-html [USE_HTML]
                        使用 HTML 标记请求多行翻译. 当字幕分句良好时推荐开启, 否则推荐关闭 (default: False)
  --remove_ellipsis [REMOVE_ELLIPSIS], --remove-ellipsis [REMOVE_ELLIPSIS]
                        移除字幕行尾的省略号 (default: False)
  --llm_req_rate LLM_REQ_RATE, --llm-req-rate LLM_REQ_RATE
                        LLM 请求速率 (r/s) (default: 5)
  --batch_size BATCH_SIZE, --batch-size BATCH_SIZE
                        单次请求 LLM 翻译的最大行数. 过大会提高失败率 (default: 10)

TTS:
  --voice VOICE         TTS 声音. 参考 https://gist.github.com/BettyJJ/17cbaa1de96235a7f5773b8690a20462 (default: zh-CN-YunyangNeural)
  --tts_req_rate TTS_REQ_RATE, --tts-req-rate TTS_REQ_RATE
                        TTS 请求速率 (r/10s) (default: 3)
  --audio_format AUDIO_FORMAT, --audio-format AUDIO_FORMAT
                        音频输出格式 (default: aac)
  --add_track [ADD_TRACK], --add-track [ADD_TRACK]
                        添加 TTS 音频到视频 (default: True)
  --track_title TRACK_TITLE, --track-title TRACK_TITLE
                        TTS 音轨标题. 默认使用 voice 名称 (default: None)

Subtitle:
  --soft [SOFT]         添加字幕方式 (True: 软 / False: 硬) (目前仅支持软字幕) (default: True)
  --add_asr_sub [ADD_ASR_SUB], --add-asr-sub [ADD_ASR_SUB]
                        将语音识别字幕添加到视频 (default: True)
  --asr_sub_title ASR_SUB_TITLE, --asr-sub-title ASR_SUB_TITLE
                        语音识别字幕标题 (default: None)
  --asr_sub_style ASR_SUB_STYLE, --asr-sub-style ASR_SUB_STYLE
                        语音识别字幕样式. 参考 https://github.com/yuanshanhua/video-dubbing/blob/main/docs/subtitle_style_zh.md (default: None)
  --add_trans_sub [ADD_TRANS_SUB], --add-trans-sub [ADD_TRANS_SUB]
                        将译文字幕添加到视频 (default: True)
  --trans_sub_title TRANS_SUB_TITLE, --trans-sub-title TRANS_SUB_TITLE
                        译文字幕标题 (default: None)
  --trans_sub_style TRANS_SUB_STYLE, --trans-sub-style TRANS_SUB_STYLE
                        译文字幕样式 (default: None)
  --add_bilingual_sub [ADD_BILINGUAL_SUB], --add-bilingual-sub [ADD_BILINGUAL_SUB]
                        将双语字幕添加到视频 (default: True)
  --bilingual_sub_title BILINGUAL_SUB_TITLE, --bilingual-sub-title BILINGUAL_SUB_TITLE
                        双语字幕标题 (default: None)
  --bilingual_sub_style BILINGUAL_SUB_STYLE, --bilingual-sub-style BILINGUAL_SUB_STYLE
                        双语字幕样式 (default: None)
```

## 🙏 致谢

本项目基于以下优秀开源项目:

- [OpenAI-Whisper](https://github.com/openai/whisper)
- [FFmpeg](https://ffmpeg.org/)
- [whisperX](https://github.com/m-bain/whisperX)
- [edge-tts](https://github.com/rany2/edge-tts)
- [aiolimiter](https://github.com/mjpieters/aiolimiter)

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "video-dubbing",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "==3.11",
    "maintainer_email": null,
    "keywords": "ai, dubbing, llm, openai, video, whisper",
    "author": "yuanshanhua",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/f1/a0/d48cce492e5b591af9c32321b76dba0043acb38cc09936d61019d0ce53bb/video_dubbing-1.0.0.tar.gz",
    "platform": null,
    "description": "# Video Dubbing - \u89c6\u9891\u8bd1\u914d\u81ea\u52a8\u5316\u5de5\u5177\n\n![Python\u7248\u672c](https://img.shields.io/badge/python-3.11-blue)\n![\u8bb8\u53ef\u534f\u8bae](https://img.shields.io/badge/license-MIT-green)\n\n\u7b80\u4f53\u4e2d\u6587 | [English](./README_EN.md)\n\nVideo Dubbing \u662f\u4e00\u6b3e AI \u9a71\u52a8\u7684\u547d\u4ee4\u884c\u89c6\u9891\u8bd1\u914d\u5de5\u5177, \u53ef\u8fdb\u884c\u8bed\u97f3\u8bc6\u522b (ASR)\u3001\u6587\u672c\u7ffb\u8bd1\u3001\u8bed\u97f3\u751f\u6210 (TTS), \u5b9e\u73b0\u7aef\u5230\u7aef\u89c6\u9891\u8bd1\u914d, \u5e76\u652f\u6301\u6279\u91cf\u5904\u7406\u89c6\u9891\u6587\u4ef6, \u4e00\u952e\u751f\u6210\u591a\u8bed\u8a00\u914d\u97f3\u89c6\u9891.\n\n\u6210\u54c1\u5c55\u793a:\n\n- [CMU15-445 \u6570\u636e\u5e93\u7cfb\u7edf\u5bfc\u8bba](https://www.bilibili.com/video/BV1Xh91YoEkt)\n- [CMU15-721 \u9ad8\u7ea7\u6570\u636e\u5e93\u7cfb\u7edf](https://www.bilibili.com/video/BV12291Y2E7u)\n- [CS149 \u5e76\u884c\u8ba1\u7b97](https://www.bilibili.com/video/BV1d2R8YsEu8)\n\n## \u2728 \u529f\u80fd\u7279\u6027\n\n- **\u529f\u80fd\u5168\u9762**: ASR \u2192 \u7ffb\u8bd1 \u2192 TTS \u5168\u94fe\u8def\u81ea\u52a8\u5316\n  - \u9ad8\u7cbe\u5ea6\u8bed\u97f3\u8bc6\u522b powered by [OpenAI-Whipser](https://github.com/openai/whisper)\n  - \u652f\u6301\u4f7f\u7528\u517c\u5bb9 OpenAI \u7684\u4efb\u610f LLM API \u8fdb\u884c\u7ffb\u8bd1\n  - \u57fa\u4e8e Edge-TTS \u7684\u9ad8\u8d28\u91cf\u8bed\u97f3\u5408\u6210\n- **\u914d\u7f6e\u9ad8\u5ea6\u7075\u6d3b**: \u5404\u529f\u80fd\u53ef\u72ec\u7acb\u5f00\u5173, \u4ee5\u7528\u4e8e**\u5b57\u5e55\u6279\u91cf\u7ffb\u8bd1**\u3001**\u8bed\u97f3\u5408\u6210**\u7b49\u573a\u666f\n- **\u4e30\u5bcc\u7684\u540e\u5904\u7406\u9009\u9879**: \u5185\u7f6e\u97f3\u8f68/\u5b57\u5e55\u6dfb\u52a0\u529f\u80fd, \u652f\u6301\u5b57\u5e55\u683c\u5f0f\u81ea\u5b9a\u4e49\n- **\u6279\u91cf\u5904\u7406**: \u652f\u6301 glob \u5339\u914d, \u4e00\u952e\u6279\u5904\u7406\n- **\u591a\u786c\u4ef6\u652f\u6301**: \u652f\u6301\u5728 CPU/CUDA/NPU \u5e73\u53f0\u4e0a\u8fd0\u884c\n\n## \ud83d\ude80 \u5feb\u901f\u5f00\u59cb\n\n### \u914d\u7f6e\u8fd0\u884c\u73af\u5883\n\n**\u8981\u6c42**: Python 3.11, ffmpeg, ffprobe\n\n\u63a8\u8350\u4f7f\u7528\u4f18\u79c0\u7684 Python \u73af\u5883\u7ba1\u7406\u5de5\u5177 [astral-sh/uv](https://github.com/astral-sh/uv)\n\n**\u5b89\u88c5 ffmpeg & ffprobe**:\n\n- Windows: \u4e0b\u8f7d [\u6b64\u94fe\u63a5](https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip) \u5e76\u89e3\u538b, \u5c06 `bin/ffmpeg.exe` \u548c `bin/ffprobe.exe` \u590d\u5236\u5230\u67d0\u4e2a\u4f4d\u4e8e `PATH` \u4e2d\u7684\u76ee\u5f55\n- MacOS: `brew install ffmpeg`\n- Linux: ...\n\n### \u5b89\u88c5 Video Dubbing\n\n\u6309\u9700\u9009\u62e9\u4ee5\u4e0b\u5b89\u88c5\u65b9\u5f0f:\n\n**\u6700\u5c0f\u5b89\u88c5**:\n\n\u9002\u7528\u4e8e\u65e0\u987b ASR, \u4ec5\u9700\u7ffb\u8bd1\u548c TTS \u7684\u573a\u666f, \u53ef\u907f\u514d\u5b89\u88c5 `pytorch, pandas` \u7b49\u5927\u578b\u4f9d\u8d56\u9879, \u5360\u7528\u7a7a\u95f4\u4ec5 ~20MB\n\n```bash\npip install video-dubbing\n# or\nuv tool install -p 3.11 video-dubbing[npu] # with uv\n```\n\n**\u57fa\u7840\u5b89\u88c5**:\n\n```bash\npip install video-dubbing[asr]\n# or\nuv tool install -p 3.11 video-dubbing[asr] # with uv\n```\n\n**\u534e\u4e3a NPU**:\n\n```bash\npip install video-dubbing[npu]\n# or\nuv tool install -p 3.11 video-dubbing[npu] # with uv\n```\n\n\u7406\u8bba\u4e0a\u53ea\u8981 [torch_npu](https://gitee.com/ascend/pytorch) \u652f\u6301\u7684\u5e73\u53f0\u90fd\u53ef\u4ee5\u8fd0\u884c, \u5728 Ascend 910B3 \u4e0a\u6d4b\u8bd5\u901a\u8fc7, \u82e5\u4f60\u6210\u529f\u5728\u5176\u4ed6\u5e73\u53f0\u4e0a\u8fd0\u884c, \u6b22\u8fce\u63d0\u4ea4 PR \u66f4\u65b0\u6b64\u5904.\n\n### \u57fa\u7840\u7528\u6cd5\n\n\u7531\u4e8e\u914d\u7f6e\u9879\u8f83\u591a, \u63a8\u8350\u4f7f\u7528\u914d\u7f6e\u6587\u4ef6\u8bbe\u5b9a\u5927\u591a\u6570\u914d\u7f6e\u9879. \u9996\u5148\u751f\u6210\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6:\n\n**\u751f\u6210\u914d\u7f6e\u6587\u4ef6**:\n\n```bash\ndub -gc # \u5c06\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u751f\u6210 config.json, \u5305\u542b\u9ed8\u8ba4\u914d\u7f6e\n```\n\n\u800c\u540e\u5728\u6267\u884c\u65f6, \u901a\u8fc7 `-c` \u53c2\u6570\u6307\u5b9a\u914d\u7f6e\u6587\u4ef6, \u5e76\u6dfb\u52a0\u5176\u4ed6\u53c2\u6570\u8986\u76d6\u914d\u7f6e\u6587\u4ef6\u4e2d\u7684\u8bbe\u7f6e:\n\n**\u52a0\u8f7d\u914d\u7f6e\u6587\u4ef6**:\n\n```bash\ndub -c config.json # \u540e\u52a0\u5176\u4ed6\u547d\u4ee4\u884c\u53c2\u6570\n```\n\n### \u793a\u4f8b\n\n**\u793a\u4f8b 1**: \u6279\u91cf\u8f6c\u8bd1 videos \u76ee\u5f55\u4e0b\u6240\u6709 mp4 \u6587\u4ef6\u4e3a\u4e2d\u6587:\n\n```bash\ndub -c config.json --input-videos videos/*.mp4 --use-html\n```\n\n**\u793a\u4f8b 2**: \u6279\u91cf\u7ffb\u8bd1 subs \u76ee\u5f55\u4e0b\u7684\u5b57\u5e55\u4e3a\u4e2d\u6587:\n\n```bash\ndub -c config.json --input-subtitles subs/*.srt --asr False --tts False\n```\n\n## \u26a0\ufe0f \u6ce8\u610f\u4e8b\u9879\n\n- \u4e0d\u5efa\u8bae\u4e00\u5f00\u59cb\u5c31\u76f4\u63a5\u6279\u5904\u7406\u5927\u91cf\u6587\u4ef6, \u5efa\u8bae\u5148\u5c1d\u8bd5\u5355\u4e2a\u6587\u4ef6, \u786e\u4fdd\u914d\u7f6e\u6b63\u786e\n- \u53ef\u8bbe\u7f6e `--debug` \u53ca `--log_dir` \u6253\u5f00\u8c03\u8bd5\u6a21\u5f0f\u5e76\u4fdd\u5b58\u65e5\u5fd7, \u4ee5\u4fbf\u6392\u67e5\u95ee\u9898\n- \u4e0a\u62a5 Issue \u65f6\u8bf7\u63d0\u4f9b\u8be6\u7ec6\u7684\u914d\u7f6e\u4fe1\u606f\u53ca\u65e5\u5fd7, \u4ee5\u4fbf\u66f4\u5feb\u5b9a\u4f4d\u95ee\u9898\n\n\u6587\u4ef6\u9650\u5236:\n\n- \u89c6\u9891\u6587\u4ef6\u652f\u6301\u683c\u5f0f\u53d6\u51b3\u4e8e ffmpeg, \u5e38\u89c1\u683c\u5f0f\u5982 mp4, mkv, webm \u7b49\u5747\u652f\u6301\n- \u5b57\u5e55\u6587\u4ef6\u4ec5\u652f\u6301 srt \u683c\u5f0f, \u5176\u4ed6\u683c\u5f0f\u53ef\u4f7f\u7528 ffmpeg \u8f6c\u6362\u4e3a srt\n- \u786e\u4fdd\u5b57\u5e55\u6587\u4ef6\u7f16\u7801\u4e3a UTF-8, \u5426\u5219\u53ef\u80fd\u5bfc\u81f4\u4e71\u7801\u95ee\u9898\n- \u82e5\u4ec5\u6307\u5b9a\u89c6\u9891, \u5fc5\u987b\u5f00\u542f ASR; \u82e5\u4ec5\u6307\u5b9a\u5b57\u5e55, \u65e0\u6cd5\u5f00\u542f ASR; \u82e5\u540c\u65f6\u6307\u5b9a, \u5219\u4e8c\u8005\u6570\u91cf\u548c\u987a\u5e8f\u5fc5\u987b\u4e00\u4e00\u5bf9\u5e94\n\nNPU \u76f8\u5173:\n\n- \u4f7f\u7528 NPU \u65f6, `--device` \u4fdd\u6301\u4e3a `cuda` \u5373\u53ef, \u65e0\u9700\u4fee\u6539\n\nLLM \u76f8\u5173:\n\n- `--use_html` \u9009\u9879\u5f53\u539f\u6587\u5b57\u5e55\u5206\u53e5\u826f\u597d\u65f6\u63a8\u8350\u5f00\u542f(\u5373\u6bcf\u884c\u90fd\u57fa\u672c\u4ee5\u53e5\u53f7\u7ed3\u5c3e), \u5426\u5219\u63a8\u8350\u5173\u95ed. \u4f7f\u7528 whisper \u8f6c\u8bd1\u82f1\u6587\u89c6\u9891\u751f\u6210\u7684\u5b57\u5e55\u4e00\u822c\u90fd\u7b26\u5408\u6b64\u8981\u6c42.\n\n## \u2699\ufe0f \u5168\u90e8\u914d\u7f6e\u53c2\u6570\n\n```bash\noptions:\n  -h, --help            show this help message and exit\n  -c CONFIG, --config CONFIG\n                        \u52a0\u8f7d JSON \u6216 YAML \u683c\u5f0f\u7684\u914d\u7f6e\u6587\u4ef6 (default: None)\n  -gc, --gen-config     \u751f\u6210\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6 (default: False)\n  -v, --version         show program's version number and exit\n\nGeneral:\n  --input_videos INPUT_VIDEOS [INPUT_VIDEOS ...], --input-videos INPUT_VIDEOS [INPUT_VIDEOS ...]\n                        \u5f85\u5904\u7406\u7684\u89c6\u9891\u6587\u4ef6 (default: [])\n  --input_subtitles INPUT_SUBTITLES [INPUT_SUBTITLES ...], --input-subtitles INPUT_SUBTITLES [INPUT_SUBTITLES ...]\n                        \u5f85\u5904\u7406\u7684\u5b57\u5e55\u6587\u4ef6 (srt \u683c\u5f0f) (default: [])\n  --asr [ASR]           \u8bed\u97f3\u8bc6\u522b\u5f00\u5173 (default: True)\n  --translate [TRANSLATE]\n                        \u7ffb\u8bd1\u5f00\u5173 (default: True)\n  --tts [TTS]           \u8bed\u97f3\u5408\u6210\u5f00\u5173 (default: True)\n  --debug [DEBUG]       \u8c03\u8bd5\u6a21\u5f0f (default: False)\n  --log_dir LOG_DIR, --log-dir LOG_DIR\n                        \u65e5\u5fd7\u76ee\u5f55, \u82e5\u4e3a\u7a7a\u5219\u4e0d\u4fdd\u5b58 (default: None)\n\nASR:\n  --model MODEL         whisper \u6a21\u578b\u578b\u53f7 (default: turbo)\n  --model_dir MODEL_DIR, --model-dir MODEL_DIR\n                        whisper \u6a21\u578b\u5b58\u50a8\u76ee\u5f55 (default: None)\n  --device DEVICE       \u7528\u4e8e\u8fd0\u884c ASR \u76f8\u5173\u6a21\u578b\u7684\u786c\u4ef6\u8bbe\u5907 (default: cuda)\n  --align [ALIGN]       \u8fdb\u884c\u8bcd\u6c47\u5bf9\u9f50 (default: False)\n  --diarize [DIARIZE]   \u8fdb\u884c\u8bf4\u8bdd\u8005\u5206\u79bb (default: False)\n  --hf_token HF_TOKEN, --hf-token HF_TOKEN\n                        Hugging Face token. \u7528\u4e8e\u4e0b\u8f7d\u9700\u540c\u610f\u7528\u6237\u534f\u8bae\u7684\u67d0\u4e9b\u6a21\u578b (default: )\n\nTranslate:\n  --target_lang TARGET_LANG, --target-lang TARGET_LANG\n                        \u76ee\u6807\u8bed\u8a00 (default: \u7b80\u4f53\u4e2d\u6587)\n  --base_url BASE_URL, --base-url BASE_URL\n                        LLM API \u5730\u5740 (default: https://api.openai.com/v1)\n  --api_key API_KEY, --api-key API_KEY\n                        LLM API key (default: )\n  --llm_model LLM_MODEL, --llm-model LLM_MODEL\n                        LLM \u6a21\u578b (default: )\n  --use_html [USE_HTML], --use-html [USE_HTML]\n                        \u4f7f\u7528 HTML \u6807\u8bb0\u8bf7\u6c42\u591a\u884c\u7ffb\u8bd1. \u5f53\u5b57\u5e55\u5206\u53e5\u826f\u597d\u65f6\u63a8\u8350\u5f00\u542f, \u5426\u5219\u63a8\u8350\u5173\u95ed (default: False)\n  --remove_ellipsis [REMOVE_ELLIPSIS], --remove-ellipsis [REMOVE_ELLIPSIS]\n                        \u79fb\u9664\u5b57\u5e55\u884c\u5c3e\u7684\u7701\u7565\u53f7 (default: False)\n  --llm_req_rate LLM_REQ_RATE, --llm-req-rate LLM_REQ_RATE\n                        LLM \u8bf7\u6c42\u901f\u7387 (r/s) (default: 5)\n  --batch_size BATCH_SIZE, --batch-size BATCH_SIZE\n                        \u5355\u6b21\u8bf7\u6c42 LLM \u7ffb\u8bd1\u7684\u6700\u5927\u884c\u6570. \u8fc7\u5927\u4f1a\u63d0\u9ad8\u5931\u8d25\u7387 (default: 10)\n\nTTS:\n  --voice VOICE         TTS \u58f0\u97f3. \u53c2\u8003 https://gist.github.com/BettyJJ/17cbaa1de96235a7f5773b8690a20462 (default: zh-CN-YunyangNeural)\n  --tts_req_rate TTS_REQ_RATE, --tts-req-rate TTS_REQ_RATE\n                        TTS \u8bf7\u6c42\u901f\u7387 (r/10s) (default: 3)\n  --audio_format AUDIO_FORMAT, --audio-format AUDIO_FORMAT\n                        \u97f3\u9891\u8f93\u51fa\u683c\u5f0f (default: aac)\n  --add_track [ADD_TRACK], --add-track [ADD_TRACK]\n                        \u6dfb\u52a0 TTS \u97f3\u9891\u5230\u89c6\u9891 (default: True)\n  --track_title TRACK_TITLE, --track-title TRACK_TITLE\n                        TTS \u97f3\u8f68\u6807\u9898. \u9ed8\u8ba4\u4f7f\u7528 voice \u540d\u79f0 (default: None)\n\nSubtitle:\n  --soft [SOFT]         \u6dfb\u52a0\u5b57\u5e55\u65b9\u5f0f (True: \u8f6f / False: \u786c) (\u76ee\u524d\u4ec5\u652f\u6301\u8f6f\u5b57\u5e55) (default: True)\n  --add_asr_sub [ADD_ASR_SUB], --add-asr-sub [ADD_ASR_SUB]\n                        \u5c06\u8bed\u97f3\u8bc6\u522b\u5b57\u5e55\u6dfb\u52a0\u5230\u89c6\u9891 (default: True)\n  --asr_sub_title ASR_SUB_TITLE, --asr-sub-title ASR_SUB_TITLE\n                        \u8bed\u97f3\u8bc6\u522b\u5b57\u5e55\u6807\u9898 (default: None)\n  --asr_sub_style ASR_SUB_STYLE, --asr-sub-style ASR_SUB_STYLE\n                        \u8bed\u97f3\u8bc6\u522b\u5b57\u5e55\u6837\u5f0f. \u53c2\u8003 https://github.com/yuanshanhua/video-dubbing/blob/main/docs/subtitle_style_zh.md (default: None)\n  --add_trans_sub [ADD_TRANS_SUB], --add-trans-sub [ADD_TRANS_SUB]\n                        \u5c06\u8bd1\u6587\u5b57\u5e55\u6dfb\u52a0\u5230\u89c6\u9891 (default: True)\n  --trans_sub_title TRANS_SUB_TITLE, --trans-sub-title TRANS_SUB_TITLE\n                        \u8bd1\u6587\u5b57\u5e55\u6807\u9898 (default: None)\n  --trans_sub_style TRANS_SUB_STYLE, --trans-sub-style TRANS_SUB_STYLE\n                        \u8bd1\u6587\u5b57\u5e55\u6837\u5f0f (default: None)\n  --add_bilingual_sub [ADD_BILINGUAL_SUB], --add-bilingual-sub [ADD_BILINGUAL_SUB]\n                        \u5c06\u53cc\u8bed\u5b57\u5e55\u6dfb\u52a0\u5230\u89c6\u9891 (default: True)\n  --bilingual_sub_title BILINGUAL_SUB_TITLE, --bilingual-sub-title BILINGUAL_SUB_TITLE\n                        \u53cc\u8bed\u5b57\u5e55\u6807\u9898 (default: None)\n  --bilingual_sub_style BILINGUAL_SUB_STYLE, --bilingual-sub-style BILINGUAL_SUB_STYLE\n                        \u53cc\u8bed\u5b57\u5e55\u6837\u5f0f (default: None)\n```\n\n## \ud83d\ude4f \u81f4\u8c22\n\n\u672c\u9879\u76ee\u57fa\u4e8e\u4ee5\u4e0b\u4f18\u79c0\u5f00\u6e90\u9879\u76ee:\n\n- [OpenAI-Whisper](https://github.com/openai/whisper)\n- [FFmpeg](https://ffmpeg.org/)\n- [whisperX](https://github.com/m-bain/whisperX)\n- [edge-tts](https://github.com/rany2/edge-tts)\n- [aiolimiter](https://github.com/mjpieters/aiolimiter)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "An AI powered tool to execute end-to-end video dubbing.",
    "version": "1.0.0",
    "project_urls": {
        "github": "https://github.com/yuanshanhua/video-dubbing"
    },
    "split_keywords": [
        "ai",
        " dubbing",
        " llm",
        " openai",
        " video",
        " whisper"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c4bfa10bb0e8ebe23c1180aad66fa65b50e95b639b984d73df8af267983ee7eb",
                "md5": "e9875c982f588202d1d4575b09fad87c",
                "sha256": "f38629a725f469ea950c1fe57f522e99450e61063e5e617971725beb1b26a70e"
            },
            "downloads": -1,
            "filename": "video_dubbing-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e9875c982f588202d1d4575b09fad87c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "==3.11",
            "size": 50336,
            "upload_time": "2025-03-10T19:39:05",
            "upload_time_iso_8601": "2025-03-10T19:39:05.621291Z",
            "url": "https://files.pythonhosted.org/packages/c4/bf/a10bb0e8ebe23c1180aad66fa65b50e95b639b984d73df8af267983ee7eb/video_dubbing-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f1a0d48cce492e5b591af9c32321b76dba0043acb38cc09936d61019d0ce53bb",
                "md5": "4dfa1b20cceb49d6d203968eaefc59e6",
                "sha256": "83011e41fc67ba16b83c644e47e5cee8a3a46a716e82dedf3437f04ba83f9b2f"
            },
            "downloads": -1,
            "filename": "video_dubbing-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "4dfa1b20cceb49d6d203968eaefc59e6",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "==3.11",
            "size": 177459,
            "upload_time": "2025-03-10T19:39:08",
            "upload_time_iso_8601": "2025-03-10T19:39:08.183866Z",
            "url": "https://files.pythonhosted.org/packages/f1/a0/d48cce492e5b591af9c32321b76dba0043acb38cc09936d61019d0ce53bb/video_dubbing-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-03-10 19:39:08",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yuanshanhua",
    "github_project": "video-dubbing",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "video-dubbing"
}
        
Elapsed time: 0.41675s