|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.") |
|
|
|
|
|
|
|
|
|
|