forked from Huanshere/VideoLingo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
install.py
161 lines (140 loc) · 6.04 KB
/
install.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
import os
import platform
import subprocess
import sys
import zipfile
import shutil
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
def install_package(*packages):
subprocess.check_call([sys.executable, "-m", "pip", "install", *packages])
def install_requirements():
"""Install requirements from requirements.txt file."""
if os.path.exists("requirements.txt"):
print("正在将requirements.txt转换为GBK编码...")
try:
with open("requirements.txt", "r", encoding="utf-8") as file:
content = file.read()
with open("requirements.txt", "w", encoding="gbk") as file:
file.write(content)
print("转换完成。")
except UnicodeDecodeError:
print("requirements.txt已经是GBK编码,无需转换。")
except Exception as e:
print(f"转换编码时出错:{str(e)}")
print("正在从requirements.txt安装依赖...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"])
else:
print("未找到requirements.txt。跳过安装。")
def dowanload_uvr_model():
"""Download the specified uvr model."""
if not os.path.exists("_model_cache/uvr5_weights/HP2_all_vocals.pth"):
os.makedirs("_model_cache/uvr5_weights", exist_ok=True)
import requests
print("正在下载UVR模型...")
url = "https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/e992cb1bc5d777fcddce20735a899219b1d46aba/uvr5_weights/HP2_all_vocals.pth"
response = requests.get(url)
with open("_model_cache/uvr5_weights/HP2_all_vocals.pth", "wb") as file:
file.write(response.content)
print("UVR模型下载成功。")
else:
print("HP2_all_vocals.pth已存在。跳过下载。")
def download_and_extract_ffmpeg():
"""Download FFmpeg based on the platform, extract it, and clean up."""
system = platform.system()
if system == "Windows":
ffmpeg_exe = "ffmpeg.exe"
url = "https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip"
elif system == "Darwin":
ffmpeg_exe = "ffmpeg"
url = "https://evermeet.cx/ffmpeg/ffmpeg-4.4.zip"
elif system == "Linux":
ffmpeg_exe = "ffmpeg"
url = "https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz"
else:
return
if os.path.exists(ffmpeg_exe):
print(f"{ffmpeg_exe}已存在。跳过下载。")
return
print("正在下载FFmpeg...")
import requests
response = requests.get(url)
if response.status_code == 200:
filename = "ffmpeg.zip"
with open(filename, 'wb') as f:
f.write(response.content)
print(f"FFmpeg已下载到{filename}")
print("正在解压FFmpeg...")
if system == "Linux":
import tarfile
with tarfile.open(filename) as tar_ref:
for member in tar_ref.getmembers():
if member.name.endswith("ffmpeg"):
member.name = os.path.basename(member.name)
tar_ref.extract(member)
break
else:
with zipfile.ZipFile(filename, 'r') as zip_ref:
for file in zip_ref.namelist():
if file.endswith(ffmpeg_exe):
zip_ref.extract(file)
shutil.move(os.path.join(*file.split('/')[:-1], ffmpeg_exe), ffmpeg_exe)
break
print("正在清理...")
os.remove(filename)
if system != "Linux":
for item in os.listdir():
if os.path.isdir(item) and "ffmpeg" in item.lower():
shutil.rmtree(item)
print("FFmpeg解压完成。")
else:
print("下载FFmpeg失败")
def init_config():
"""Initialize the config.py file with the specified API key and base URL."""
if not os.path.exists("config.py"):
# 从 config.example.py 复制 config.py
shutil.copy("config.example.py", "config.py")
print("config.py文件已创建。请在config.py文件中填写API密钥和基础URL。")
else:
print("config.py文件已存在。")
def install_whisper_model(choice):
if choice == '1':
print("正在安装 whisper_timestamped...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "whisper-timestamped"])
elif choice == '2':
print("正在安装 whisperX...")
current_dir = os.getcwd()
whisperx_dir = os.path.join(current_dir, "third_party", "whisperX")
os.chdir(whisperx_dir)
subprocess.check_call([sys.executable, "-m", "pip", "install", "-e", "."])
os.chdir(current_dir)
def main():
print("开始安装...")
# 初始化 config.py 文件
init_config()
# 安装 requests
install_package("requests")
# 用户选择 Whisper 模型
print("\n请选择要安装的 Whisper 模型:")
print("若不清楚各模型区别请见 https://github.com/Huanshere/VideoLingo/blob/main/docs/install_locally_zh.md")
print("1. whisper_timestamped")
print("2. whisperX (推荐)")
print("3. whisperX_api")
choice = input("请输入选项编号 (1, 2 或 3): ")
# 安装 PyTorch
if choice in ['1', '2']:
print("正在安装支持 CUDA 的 PyTorch...")
subprocess.check_call(["conda", "install", "pytorch==2.0.0", "torchaudio==2.0.0", "pytorch-cuda=11.8", "-c", "pytorch", "-c", "nvidia", "-y"])
elif choice == '3':
print("正在安装 cpu 版本的 PyTorch...")
subprocess.check_call([sys.executable, "-m", "pip", "install", "torch", "torchaudio"])
# 安装其他依赖
install_requirements()
# 安装选择的 Whisper 模型
install_whisper_model(choice)
# 下载并解压 FFmpeg
download_and_extract_ffmpeg()
print("所有安装步骤都完成啦!")
print("请使用以下命令启动 Streamlit:")
print("streamlit run st.py")
if __name__ == "__main__":
main()