Files
Voice-Cloning-App/application/check_ffmpeg.py
2022-02-08 17:18:42 +00:00

93 lines
2.6 KiB
Python

import os
import sys
from sys import platform
from subprocess import check_output
import requests
from zipfile import ZipFile
FFMPEG_COMMAND = "ffmpeg -version"
FFMPEG_PATHS = [os.path.abspath(os.path.join(getattr(sys, "_MEIPASS", ""))), os.path.abspath("ffmpeg\\bin")]
FFMPEG_WINDOWS_URL = "https://www.gyan.dev/ffmpeg/builds/ffmpeg-release-essentials.zip"
FFMPEG_LINUX_INSTALL = "sudo apt-get install -y ffmpeg"
def is_ffmpeg_installed():
"""Checks if FFmpeg is installed
Returns
-------
bool
Whether or not ffmpeg is installed
"""
try:
check_output(FFMPEG_COMMAND.split(" "))
return True
except:
return False
def install_ffmpeg_windows():
"""Downloads and extracts the FFmpeg library"""
try:
r = requests.get(FFMPEG_WINDOWS_URL)
with open("ffmpeg.zip", "wb") as f:
f.write(r.content)
with ZipFile("ffmpeg.zip", "r") as zipf:
zipf.extractall()
ffmpeg_folder = [f for f in os.listdir() if f.startswith("ffmpeg-")][0]
os.rename(ffmpeg_folder, "ffmpeg")
os.remove("ffmpeg.zip")
os.environ["PATH"] += os.pathsep + os.path.abspath("ffmpeg\\bin")
except requests.exceptions.ConnectionError:
raise Exception("Unable to download FFmpeg. Please install manually")
def install_ffmpeg_linux():
"""Runs the linux FFmpeg install command"""
check_output(FFMPEG_LINUX_INSTALL.split(" "))
def try_ffmpeg_paths():
"""
Try ffmpeg paths to find existing install
Returns
-------
str
Path to existing install (or None if not found)
"""
for path in FFMPEG_PATHS:
if os.path.isdir(path):
os.environ["PATH"] += os.pathsep + path
if is_ffmpeg_installed():
return path
return None
def check_ffmpeg():
"""Checks if FFmpeg is installed, and if not will install
Raises
-------
AssertionError
If ffmpeg could not be installed
"""
if not is_ffmpeg_installed():
if platform == "win32":
existing_install = try_ffmpeg_paths()
if existing_install:
print("USING FFMPEG INSTALL", existing_install)
else:
print("INSTALLING FFMPEG")
install_ffmpeg_windows()
print("VERIFYING FFMPEG INSTALL")
assert is_ffmpeg_installed(), "FFMPEG did not install correctly"
else:
print("INSTALLING FFMPEG")
install_ffmpeg_linux()
print("VERIFYING FFMPEG INSTALL")
assert is_ffmpeg_installed(), "FFMPEG did not install correctly"