forked from openai/whisper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
MAIN.py
64 lines (52 loc) · 3.07 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
import os
import whisper
# Инициализация модели Whisper
try:
import torch
if torch.cuda.is_available():
device = "cuda"
print("Используется CUDA")
else:
device = "cpu"
print("CUDA недоступна, используется CPU. Процесс может быть медленным.")
except ImportError:
device = "cpu"
print("PyTorch не установлен, используется CPU. Процесс может быть медленным. Рекомендуется установить PyTorch с поддержкой CUDA.")
model = whisper.load_model("turbo", device=device)
def sync_directories(src_dir, dest_dir):
# Создание аналогичной структуры папок в папке назначения
for root, dirs, _ in os.walk(src_dir):
for dir in dirs:
src_path = os.path.join(root, dir)
relative_path = os.path.relpath(src_path, src_dir)
dest_path = os.path.join(dest_dir, relative_path)
os.makedirs(dest_path, exist_ok=True)
def transcribe_audio_files(input_folder, output_base_folder, base_input_folder): # Добавили base_input_folder
for root, _, files in os.walk(input_folder):
for file in files:
if file.endswith(('.wav', '.m4a', '.mp3', '.ogg')):
file_path = os.path.join(root, file)
# Используем base_input_folder для относительного пути
relative_path = os.path.relpath(root, base_input_folder)
output_folder = os.path.join(output_base_folder, relative_path)
os.makedirs(output_folder, exist_ok=True)
text_filename = os.path.splitext(file)[0] + ".txt"
text_path = os.path.join(output_folder, text_filename)
if os.path.exists(text_path):
print(f"Транскрипция для {file} уже существует. Пропуск.")
continue
try:
result = model.transcribe(file_path)
with open(text_path, "w", encoding="utf-8") as f:
f.write(result["text"])
print(f"Транскрибирован {file} и сохранён в {text_path}")
except Exception as e:
print(f"Ошибка при обработке файла {file}: {e}")
if __name__ == "__main__":
base_input_folder = "G:\\Mediafiles\\Audio\\Audiobooks"
output_base_folder = "G:\\Mediafiles\\Bigdata\\Транскрипции"
specific_folder = input("Введите название конкретной папки внутри Audiobooks: ")
input_folder = os.path.join(base_input_folder, specific_folder)
# Синхронизируем структуру папок перед транскрипцией
sync_directories(base_input_folder, output_base_folder)
transcribe_audio_files(input_folder, output_base_folder, base_input_folder) # Передаем base_input_folder