Update app.py
Browse files
app.py
CHANGED
@@ -1,38 +1,14 @@
|
|
1 |
import os
|
2 |
-
import time
|
3 |
import numpy as np
|
4 |
import tempfile
|
5 |
from scipy.io import wavfile
|
6 |
-
from pytube import YouTube
|
7 |
import gradio as gr
|
8 |
-
from moviepy.editor import AudioFileClip
|
9 |
from inference import EnsembleDemucsMDXMusicSeparationModel, predict_with_model
|
10 |
import torch
|
11 |
import librosa
|
12 |
import librosa.display
|
13 |
import matplotlib.pyplot as plt
|
14 |
|
15 |
-
# 下载YouTube视频并转换为WAV格式
|
16 |
-
def download_youtube_video_as_wav(youtube_url):
|
17 |
-
output_dir = "downloads"
|
18 |
-
os.makedirs(output_dir, exist_ok=True)
|
19 |
-
output_file = os.path.join(output_dir, "temp.mp4")
|
20 |
-
|
21 |
-
try:
|
22 |
-
yt = YouTube(youtube_url)
|
23 |
-
yt.streams.filter(only_audio=True).first().download(filename=output_file)
|
24 |
-
print("下载成功。")
|
25 |
-
except Exception as e:
|
26 |
-
print(f"下载视频时发生错误: {e}")
|
27 |
-
return None
|
28 |
-
|
29 |
-
# 将mp4音频转换为wav
|
30 |
-
wav_file = os.path.join(output_dir, "mixture.wav")
|
31 |
-
clip = AudioFileClip(output_file)
|
32 |
-
clip.write_audiofile(wav_file)
|
33 |
-
|
34 |
-
return wav_file
|
35 |
-
|
36 |
# 检查文件是否准备好
|
37 |
def check_file_readiness(filepath):
|
38 |
num_same_size_checks = 0
|
@@ -70,18 +46,8 @@ def generate_spectrograms(audio_files):
|
|
70 |
return tuple(output_spectrograms)
|
71 |
|
72 |
# 音乐分离的包装函数
|
73 |
-
def separate_music_file_wrapper(
|
74 |
-
input_files = []
|
75 |
-
# 验证YouTube URL或目录路径
|
76 |
-
if input_string.startswith("https://www.youtube.com") or input_string.startswith("https://youtu.be"):
|
77 |
-
output_file = download_youtube_video_as_wav(input_string)
|
78 |
-
if output_file is not None:
|
79 |
-
input_files.append(output_file)
|
80 |
-
elif os.path.isdir(input_string):
|
81 |
-
input_directory = input_string
|
82 |
-
input_files = [os.path.join(input_directory, f) for f in os.listdir(input_directory) if f.endswith('.wav')]
|
83 |
-
else:
|
84 |
-
raise ValueError("无效输入!请输入有效的YouTube链接或目录路径。")
|
85 |
|
86 |
# 验证重叠值
|
87 |
if not (0 <= large_overlap <= 1) or not (0 <= small_overlap <= 1):
|
@@ -157,7 +123,7 @@ theme = gr.themes.Base(
|
|
157 |
|
158 |
with gr.Blocks(theme=theme) as demo:
|
159 |
gr.Markdown(description)
|
160 |
-
|
161 |
use_cpu = gr.Checkbox(label="仅使用CPU", value=True)
|
162 |
use_single_onnx = gr.Checkbox(label="使用单一ONNX模型", value=False)
|
163 |
large_overlap = gr.Number(label="大块重叠", value=0.6)
|
@@ -181,7 +147,7 @@ with gr.Blocks(theme=theme) as demo:
|
|
181 |
|
182 |
process_button.click(
|
183 |
separate_music_file_wrapper,
|
184 |
-
inputs=[
|
185 |
outputs=[vocals, instrumental, instrumental2, bass, drums, other, vocals_spectrogram, instrumental_spectrogram, instrumental2_spectrogram, bass_spectrogram, drums_spectrogram, other_spectrogram],
|
186 |
)
|
187 |
|
|
|
1 |
import os
|
|
|
2 |
import numpy as np
|
3 |
import tempfile
|
4 |
from scipy.io import wavfile
|
|
|
5 |
import gradio as gr
|
|
|
6 |
from inference import EnsembleDemucsMDXMusicSeparationModel, predict_with_model
|
7 |
import torch
|
8 |
import librosa
|
9 |
import librosa.display
|
10 |
import matplotlib.pyplot as plt
|
11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
# 检查文件是否准备好
|
13 |
def check_file_readiness(filepath):
|
14 |
num_same_size_checks = 0
|
|
|
46 |
return tuple(output_spectrograms)
|
47 |
|
48 |
# 音乐分离的包装函数
|
49 |
+
def separate_music_file_wrapper(uploaded_files, use_cpu, use_single_onnx, large_overlap, small_overlap, chunk_size, use_large_gpu):
|
50 |
+
input_files = [uploaded_files.name] # 获取上传文件的路径
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
|
52 |
# 验证重叠值
|
53 |
if not (0 <= large_overlap <= 1) or not (0 <= small_overlap <= 1):
|
|
|
123 |
|
124 |
with gr.Blocks(theme=theme) as demo:
|
125 |
gr.Markdown(description)
|
126 |
+
uploaded_file = gr.File(label="上传音频文件", type="file")
|
127 |
use_cpu = gr.Checkbox(label="仅使用CPU", value=True)
|
128 |
use_single_onnx = gr.Checkbox(label="使用单一ONNX模型", value=False)
|
129 |
large_overlap = gr.Number(label="大块重叠", value=0.6)
|
|
|
147 |
|
148 |
process_button.click(
|
149 |
separate_music_file_wrapper,
|
150 |
+
inputs=[uploaded_file, use_cpu, use_single_onnx, large_overlap, small_overlap, chunk_size, use_large_gpu],
|
151 |
outputs=[vocals, instrumental, instrumental2, bass, drums, other, vocals_spectrogram, instrumental_spectrogram, instrumental2_spectrogram, bass_spectrogram, drums_spectrogram, other_spectrogram],
|
152 |
)
|
153 |
|