WhisperDeskTop.exe в Windows10
Используется графический процессор
WhisperDeskTop.exe .mkv в .srt, но только по одному
Итак, если я хочу конвертировать все видео, мне остается только продолжать нажимать. Затем я попытался написать сценарий.
В Power Shell с установленным Python 3.8 создайте виртуальную среду Python с помощью python -m venv thename('thename' — это просто имя среды).
Затем активируйте среду, используя .\Scripts\Activate.ps1. Как показано на рисунке:
Я также устанавливаю NVIDIA CUDA, CUDNN, ffmpeg, pytorch и загружаю на свой ноутбук модель OpenAI, например, большую или среднюю.
Все проверено.
В чем проблема?
Код: Выделить всё
import os
import subprocess
import time
from tqdm import tqdm
from concurrent.futures import ThreadPoolExecutor
video_directory = ""
ffmpeg_command = 'ffmpeg -i "{}" -f wav -vn "{}"'
whisper_command = 'whispercli -gpu -nt -m "D:\\Whisper\\model\\ggml-large-v3-turbo.bin" -l en -nt -osrt -f "{}"'
def convert_video_to_audio(video_path, audio_path, video_name):
ffmpeg_output = subprocess.check_output(
ffmpeg_command.format(video_path, audio_path),
shell=True,
stderr=subprocess.DEVNULL,
)
def gen_audio_srt(audio_path, video_name):
whisper_output = subprocess.check_output(
whisper_command.format(audio_path), shell=True, encoding="utf-8"
)
def process_video(video_file):
video_path = os.path.join(video_directory, video_file)
video_name = os.path.splitext(video_file)[0]
audio_path = os.path.join(video_directory, video_name + ".wav")
srt_path = os.path.join(video_directory, video_name + ".srt")
if os.path.exists(srt_path):
print(f"srt is exisits.")
return 0
convert_video_to_audio(video_path, audio_path, video_name)
gen_audio_srt(audio_path, video_name)
os.remove(audio_path)
return 1
def process_videos():
start_time = time.time()
n = 0
video_files = [
f
for f in os.listdir(video_directory)
if f.endswith((".mp4", ".avi", ".mkv", ".flv", ".mov"))
]
with ThreadPoolExecutor() as executor:
results = list(tqdm(executor.map(process_video, video_files), total=len(video_files), desc="processing... "))
n = sum(results)
end_time = time.time()
print("{:d}videos,token times: {:.2f}s".format(n, end_time - start_time))
if __name__ == "__main__":
path = ""
while True:
path = input("dir: ")
if os.path.exists(path):
break
else:
print(f"{path}path maybe wrong...")
video_directory = path
process_videos()
Подробнее здесь: https://stackoverflow.com/questions/790 ... make-a-scr