一个命令行工具,可以转换(YouTube)视频中的声音,并具有额外的翻译功能。1
提示: 对最先进的语音解决方案感兴趣的人也请<strong>看看Linguflex</strong>。它让你通过说话来控制你的环境,是目前可用的最强大和复杂的开源助手之一。
https://github.com/KoljaB/TurnVoice/assets/7604638/e0d9071c-0670-44bd-a6d5-4800e9f6190c
声音转换
使用免费的Coqui TTS转换声音,无运营成本 <sup>(支持声音克隆,包含58种声音</sup>
多样化声音
支持流行的TTS引擎,如Elevenlabs、OpenAI TTS或Azure,提供更多声音选择。2
翻译
以零成本翻译视频,例如从英语翻译成中文。<sup>由免费的deep-translator提供支持</sup>
改变说话风格 <sup>(AI驱动)</sup>
通过提示使每个口语句子以自定义说话风格传递,营造独特风格。3
完全渲染控制
通过自定义句子文本、时间和声音选择实现精确的渲染控制。
<sup>💡 提示:Renderscript编辑器让这一步变得简单</sup>
本地视频处理
处理任何本地视频文件。
保留背景音频
保持原始背景音频不变。
在发布说明中了解更多。
推荐使用Nvidia显卡,VRAM大于8 GB,在Python 3.11.4 / Windows 10上测试通过。
安装NVIDIA cuDNN。
<details> <summary>安装NVIDIA cuDNN:</summary>安装Rubberband命令行工具 4
在Ubuntu或Debian上:
sudo apt update && sudo apt install ffmpeg
在Arch Linux上:
sudo pacman -S ffmpeg
在MacOS上使用Homebrew (https://brew.sh/):
brew install ffmpeg
在Windows上使用Chocolatey (https://chocolatey.org/):
choco install ffmpeg
在Windows上使用Scoop (https://scoop.sh/):
scoop install ffmpeg
在环境变量HF_ACCESS_TOKEN中设置Huggingface访问令牌 6
[!提示] 使用
setx HF_ACCESS_TOKEN "your_token_here"
设置你的HF令牌
pip install turnvoice
[!提示] 为了使用GPU加快渲染速度,安装后准备你的CUDA环境:
对于CUDA 11.8
pip install torch==2.1.2+cu118 torchaudio==2.1.2+cu118 --index-url https://download.pytorch.org/whl/cu118
对于CUDA 12.1
pip install torch==2.1.2+cu118 torchaudio==2.1.2+cu211 --index-url https://download.pytorch.org/whl/cu211
turnvoice [-i] <YouTube URL|ID|本地文件> [-l] <翻译语言> -e <引擎> -v <声音> -o <输出文件>
为每个你想使用的说话人声音向'voice'参数提交一个字符串。如果你指定了引擎,声音将按列出的顺序分配给这些引擎。如果声音多于引擎,多出的声音将使用第一个引擎。如果没有指定引擎,将默认使用Coqui引擎。如果没有定义声音,将为每个引擎选择一个默认声音。
Arthur Morgan讲解一个烹饪教程:
turnvoice -i AmC9SmCBUj4 -v arthur.wav -o cooking_with_arthur.mp4
[!注意] 需要克隆声音文件(如arthur.wav或.json)在同一目录下(你可以在tests目录中找到一个)。
使用以下命令准备带有转录、说话人分离(以及可选的翻译或提示)的脚本:
turnvoice https://www.youtube.com/watch?v=cOg4J1PxU0c --prepare
翻译和提示应该在这个准备步骤中应用。引擎或声音将在之后的渲染步骤中使用。
使用以下命令渲染精细的脚本以生成最终视频:
turnvoice https://www.youtube.com/watch?v=cOg4J1PxU0c --render <脚本路径>
调整显示的CLI命令中的路径(编辑器无法从浏览器读取该信息)。
使用-e和-v命令为每个说话人轨道分配引擎和声音。
-i
, --in
: 输入视频。接受YouTube视频URL或ID,或本地视频文件路径。-l
, --language
: 翻译语言。Coqui合成支持:en, es, fr, de, it, pt, pl, tr, ru, nl, cs, ar, zh, ja, hu, ko。省略以保留原始视频语言。-il
, --input_language
: 转录的语言代码,如果自动检测失败则设置。-v
, --voice
: 用于合成的声音。接受多个值以替换多个说话人。-o
, --output_video
: 最终输出视频的文件名(默认:'final_cut.mp4')。-a
, --analysis
: 打印转录和说话人分析,不进行合成或渲染视频。-from
: 开始处理视频的时间。-to
: 停止处理视频的时间。-e
, --engine
: 用于合成的引擎。可以是coqui, elevenlabs, azure, openai或system。接受多个值,与提交的声音相关联。-s
, --speaker
: 要转换的说话人编号。-snum
, --num_speakers
: 帮助说话人分离。如果你事先知道视频中确切的说话人数量,请指定。-smin
, --min_speakers
: 帮助说话人分离。如果你事先知道视频中最少的说话人数量,请指定。-smax
, --max_speakers
: 帮助说话人分离。如果你事先知道视频中最多的说话人数量,请指定。-dd
, --download_directory
: 保存下载文件的目录(默认:'downloads')。-sd
, --synthesis_directory
: 保存合成音频文件的目录(默认:'synthesis')。-ex
, --extract
: 启用从视频文件中提取音频。否则从互联网下载音频(默认)。-c
, --clean_audio
: 从最终视频中移除原始音频,得到纯合成结果。-tf
, --timefile
: 定义用于处理的时间戳文件(功能类似于多个--from/--to命令)。-p
, --prompt
: 定义一个提示来改变句子的风格,如"杰克船长的说话风格" 3-prep
, --prepare
: 编写包含说话人分析、句子转换和翻译的完整脚本,但不执行合成或渲染。可以继续。-r
, --render
: 接受完整脚本并只执行合成和渲染,不进行说话人分析、句子转换或翻译。-faster
, --use_faster
: 使用faster_whisper进行转录。如果stable_whisper转录出现OOM错误或结果不理想时使用。(可选)-model
, --model
: 要使用的转录模型。默认为large-v2。 可以是'tiny', 'tiny.en', 'base', 'base.en', 'small', 'small.en', 'medium', 'medium.en', 'large-v1', 'large-v2', 'large-v3', 或 'large'。(可选)
-i
和-l
可以作为位置参数和可选参数使用。
使用-l参数将视频翻译成另一种语言。
例如,要翻译成中文,你可以使用:
turnvoice https://www.youtube.com/watch?v=ZTH771HIhpg -l zh-CN -v daisy
<sup>输出视频</sup>
<sup>💡 提示: 在tests文件夹中你可以找到一个基于中文音素训练的"chinese.json"语音。</sup>
简写 | 语言 |
---|---|
ar | 阿拉伯语 |
cs | 捷克语 |
de | 德语 |
en | 英语 |
es | 西班牙语 |
fr | 法语 |
it | 意大利语 |
hu | 匈牙利语 |
ja | 日语 |
ko | 韩语 |
nl | 荷兰语 |
pl | 波兰语 |
pt | 葡萄牙语 |
ru | 俄语 |
tr | 土耳其语 |
zh-cn | 中文 |
简写 | 语言 |
---|---|
af | 南非荷兰语 |
sq | 阿尔巴尼亚语 |
am | 阿姆哈拉语 |
ar | 阿拉伯语 |
hy | 亚美尼亚语 |
as | 阿萨姆语 |
ay | 艾马拉语 |
az | 阿塞拜疆语 |
bm | 班巴拉语 |
eu | 巴斯克语 |
be | 白俄罗斯语 |
bn | 孟加拉语 |
bho | 博杰普尔语 |
bs | 波斯尼亚语 |
bg | 保加利亚语 |
ca | 加泰罗尼亚语 |
ceb | 宿务语 |
ny | 齐切瓦语 |
zh-CN | 中文(简体) |
zh-TW | 中文(繁体) |
co | 科西嘉语 |
hr | 克罗地亚语 |
cs | 捷克语 |
da | 丹麦语 |
dv | 迪维希语 |
doi | 多格拉语 |
nl | 荷兰语 |
en | 英语 |
eo | 世界语 |
et | 爱沙尼亚语 |
ee | 埃维语 |
tl | 菲律宾语 |
fi | 芬兰语 |
fr | 法语 |
fy | 弗里西语 |
gl | 加利西亚语 |
ka | 格鲁吉亚语 |
de | 德语 |
el | 希腊语 |
gn | 瓜拉尼语 |
gu | 古吉拉特语 |
ht | 海地克里奥尔语 |
ha | 豪萨语 |
haw | 夏威夷语 |
iw | 希伯来语 |
hi | 印地语 |
hmn | 苗语 |
hu | 匈牙利语 |
is | 冰岛语 |
ig | 伊博语 |
ilo | 伊洛卡诺语 |
id | 印度尼西亚语 |
ga | 爱尔兰语 |
it | 意大利语 |
ja | 日语 |
jw | 爪哇语 |
kn | 卡纳达语 |
kk | 哈萨克语 |
km | 高棉语 |
rw | 卢旺达语 |
gom | 孔卡尼语 |
ko | 韩语 |
kri | 克里奥尔语 |
ku |