|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import logging
|
|
import os
|
|
import platform
|
|
import requests
|
|
import shutil
|
|
import subprocess
|
|
import zipfile
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def platform_check():
|
|
global userOS
|
|
if platform.system() == "Linux":
|
|
print("Linux OS detected \n Running Linux appropriate commands")
|
|
userOS = "Linux"
|
|
elif platform.system() == "Windows":
|
|
print("Windows OS detected \n Running Windows appropriate commands")
|
|
userOS = "Windows"
|
|
else:
|
|
print("Other OS detected \n Maybe try running things manually?")
|
|
exit()
|
|
|
|
|
|
|
|
def cuda_check():
|
|
global processing_choice
|
|
try:
|
|
|
|
nvidia_smi_output = subprocess.check_output("nvidia-smi", shell=True).decode()
|
|
|
|
|
|
if "CUDA Version" in nvidia_smi_output:
|
|
cuda_version = next(
|
|
(line.split(":")[-1].strip() for line in nvidia_smi_output.splitlines() if "CUDA Version" in line),
|
|
"Not found")
|
|
print(f"NVIDIA GPU with CUDA Version {cuda_version} is available.")
|
|
processing_choice = "cuda"
|
|
else:
|
|
print("CUDA is not installed or configured correctly.")
|
|
processing_choice = "cpu"
|
|
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Failed to run 'nvidia-smi': {str(e)}")
|
|
processing_choice = "cpu"
|
|
except Exception as e:
|
|
print(f"An error occurred: {str(e)}")
|
|
processing_choice = "cpu"
|
|
|
|
|
|
if "CUDA_VISIBLE_DEVICES" in os.environ:
|
|
print("CUDA_VISIBLE_DEVICES is set:", os.environ["CUDA_VISIBLE_DEVICES"])
|
|
else:
|
|
print("CUDA_VISIBLE_DEVICES not set.")
|
|
|
|
|
|
|
|
def decide_cpugpu():
|
|
global processing_choice
|
|
processing_input = input("Would you like to use your GPU or CPU for transcription? (1/cuda)GPU/(2/cpu)CPU): ")
|
|
if processing_choice == "cuda" and (processing_input.lower() == "cuda" or processing_input == "1"):
|
|
print("You've chosen to use the GPU.")
|
|
logging.debug("GPU is being used for processing")
|
|
processing_choice = "cuda"
|
|
elif processing_input.lower() == "cpu" or processing_input == "2":
|
|
print("You've chosen to use the CPU.")
|
|
logging.debug("CPU is being used for processing")
|
|
processing_choice = "cpu"
|
|
else:
|
|
print("Invalid choice. Please select either GPU or CPU.")
|
|
|
|
|
|
|
|
def check_ffmpeg():
|
|
if shutil.which("ffmpeg") or (os.path.exists("Bin") and os.path.isfile(".\\Bin\\ffmpeg.exe")):
|
|
logging.debug("ffmpeg found installed on the local system, in the local PATH, or in the './Bin' folder")
|
|
pass
|
|
else:
|
|
logging.debug("ffmpeg not installed on the local system/in local PATH")
|
|
print(
|
|
"ffmpeg is not installed.\n\n You can either install it manually, or through your package manager of "
|
|
"choice.\n Windows users, builds are here: https://www.gyan.dev/ffmpeg/builds/")
|
|
if userOS == "Windows":
|
|
download_ffmpeg()
|
|
elif userOS == "Linux":
|
|
print(
|
|
"You should install ffmpeg using your platform's appropriate package manager, 'apt install ffmpeg',"
|
|
"'dnf install ffmpeg' or 'pacman', etc.")
|
|
else:
|
|
logging.debug("running an unsupported OS")
|
|
print("You're running an unspported/Un-tested OS")
|
|
exit_script = input("Let's exit the script, unless you're feeling lucky? (y/n)")
|
|
if exit_script == "y" or "yes" or "1":
|
|
exit()
|
|
|
|
|
|
|
|
def download_ffmpeg():
|
|
user_choice = input("Do you want to download ffmpeg? (y)Yes/(n)No: ")
|
|
if user_choice.lower() in ['yes', 'y', '1']:
|
|
print("Downloading ffmpeg")
|
|
url = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip"
|
|
response = requests.get(url)
|
|
|
|
if response.status_code == 200:
|
|
print("Saving ffmpeg zip file")
|
|
logging.debug("Saving ffmpeg zip file")
|
|
zip_path = "ffmpeg-release-essentials.zip"
|
|
with open(zip_path, 'wb') as file:
|
|
file.write(response.content)
|
|
|
|
logging.debug("Extracting the 'ffmpeg.exe' file from the zip")
|
|
print("Extracting ffmpeg.exe from zip file to '/Bin' folder")
|
|
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
|
|
|
|
ffmpeg_path = None
|
|
for file_info in zip_ref.infolist():
|
|
if file_info.filename.endswith("ffmpeg.exe"):
|
|
ffmpeg_path = file_info.filename
|
|
break
|
|
|
|
if ffmpeg_path is None:
|
|
logging.error("ffmpeg.exe not found in the zip file.")
|
|
print("ffmpeg.exe not found in the zip file.")
|
|
return
|
|
|
|
logging.debug("checking if the './Bin' folder exists, creating if not")
|
|
bin_folder = "Bin"
|
|
if not os.path.exists(bin_folder):
|
|
logging.debug("Creating a folder for './Bin', it didn't previously exist")
|
|
os.makedirs(bin_folder)
|
|
|
|
logging.debug("Extracting 'ffmpeg.exe' to the './Bin' folder")
|
|
zip_ref.extract(ffmpeg_path, path=bin_folder)
|
|
|
|
logging.debug("Moving 'ffmpeg.exe' to the './Bin' folder")
|
|
src_path = os.path.join(bin_folder, ffmpeg_path)
|
|
dst_path = os.path.join(bin_folder, "ffmpeg.exe")
|
|
shutil.move(src_path, dst_path)
|
|
|
|
logging.debug("Removing ffmpeg zip file")
|
|
print("Deleting zip file (we've already extracted ffmpeg.exe, no worries)")
|
|
os.remove(zip_path)
|
|
|
|
logging.debug("ffmpeg.exe has been downloaded and extracted to the './Bin' folder.")
|
|
print("ffmpeg.exe has been successfully downloaded and extracted to the './Bin' folder.")
|
|
else:
|
|
logging.error("Failed to download the zip file.")
|
|
print("Failed to download the zip file.")
|
|
else:
|
|
logging.debug("User chose to not download ffmpeg")
|
|
print("ffmpeg will not be downloaded.")
|
|
|
|
|
|
|
|
|
|
|