-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmain.py
117 lines (90 loc) · 4.21 KB
/
main.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
import os
import sys
import shutil
import subprocess
from pathlib import Path
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QProgressBar, QPushButton, QFileDialog, QComboBox, QLineEdit, QFormLayout, QMessageBox
from PyQt5.QtCore import QThread, pyqtSignal
from PyQt5.QtGui import QFont, QIcon
class Worker(QThread):
progress = pyqtSignal(str, int)
def __init__(self, folder, model, language):
super().__init__()
self.folder = folder
self.model = model
self.language = language
def run(self):
audio_extensions = {'.mp3', '.wav'}
temp_dir = Path('temp')
temp_dir.mkdir(exist_ok=True)
audio_files = [f for f in Path(self.folder).rglob('*') if f.suffix in audio_extensions and not (f.with_suffix('.lrc')).exists()]
total_files = len(audio_files)
for idx, audio_file in enumerate(audio_files):
progress_text = f'处理中: {audio_file.name} ({idx + 1}/{total_files})'
self.progress.emit(progress_text, int((idx + 1) / total_files * 100))
srt_file = temp_dir / (audio_file.stem + '.srt')
subprocess.run(f'whisper "{audio_file}" --model {self.model} --language {self.language}', shell=True, cwd=temp_dir)
if srt_file.exists():
subprocess.run(f'python srt_to_lrc.py "{srt_file}"', shell=True)
lrc_file = temp_dir / (audio_file.stem + '.lrc')
if lrc_file.exists():
shutil.move(lrc_file, audio_file.with_suffix('.lrc'))
shutil.rmtree(temp_dir)
class App(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("LRC生成器")
self.setWindowIcon(QIcon("icon.png"))
layout = QVBoxLayout()
form_layout = QFormLayout()
self.folder_path = QLineEdit()
form_layout.addRow("文件夹路径", self.folder_path)
self.model_select = QComboBox()
self.model_select.addItems(["tiny", "base", "small", "medium", "large"])
form_layout.addRow("模型大小", self.model_select)
self.language_input = QLineEdit()
form_layout.addRow("语言", self.language_input)
layout.addLayout(form_layout)
self.progress_label = QLabel("准备开始...")
self.progress_label.setFont(QFont("Arial", 12))
layout.addWidget(self.progress_label)
self.progress_bar = QProgressBar()
layout.addWidget(self.progress_bar)
self.start_button = QPushButton("开始")
self.start_button.setFont(QFont("Arial", 12))
self.start_button.clicked.connect(self.start_processing)
layout.addWidget(self.start_button)
self.select_folder_button = QPushButton("选择文件夹")
self.select_folder_button.setFont(QFont("Arial", 12))
self.select_folder_button.clicked.connect(self.select_folder)
layout.addWidget(self.select_folder_button)
self.setLayout(layout)
def select_folder(self):
folder = QFileDialog.getExistingDirectory()
if folder:
self.folder_path.setText(folder)
def start_processing(self):
folder = self.folder_path.text()
model = self.model_select.currentText()
language = self.language_input.text()
if not folder or not language:
QMessageBox.warning(self, "警告", "请确保已输入文件夹路径和语言。")
return
self.start_button.setEnabled(False)
self.select_folder_button.setEnabled(False)
self.worker = Worker(folder, model, language)
self.worker.progress.connect(self.update_progress)
self.worker.finished.connect(self.worker_finished)
self.worker.start()
def update_progress(self, text, value):
self.progress_label.setText(text)
self.progress_bar.setValue(value)
def worker_finished(self):
self.progress_label.setText("完成!")
self.start_button.setEnabled(True)
self.select_folder_button.setEnabled(True)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())