's'
This commit is contained in:
121
d2ypp2/ffmpeg_install.py
Normal file
121
d2ypp2/ffmpeg_install.py
Normal file
@@ -0,0 +1,121 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Author: Hmily
|
||||
GitHub: https://github.com/ihmily
|
||||
Copyright (c) 2024 by Hmily, All Rights Reserved.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
import platform
|
||||
from src.logger import logger
|
||||
|
||||
current_platform = platform.system()
|
||||
execute_dir = os.path.split(os.path.realpath(sys.argv[0]))[0]
|
||||
current_env_path = os.environ.get("PATH") or ""
|
||||
ffmpeg_path = os.path.join(execute_dir, "ffmpeg")
|
||||
|
||||
|
||||
def install_ffmpeg_linux():
|
||||
is_RHS = True
|
||||
|
||||
try:
|
||||
logger.warning("ffmpeg is not installed.")
|
||||
logger.debug("Trying to install the stable version of ffmpeg")
|
||||
result = subprocess.run(['yum', '-y', 'update'], capture_output=True)
|
||||
if result.returncode != 0:
|
||||
logger.error("Failed to update package lists using yum.")
|
||||
return False
|
||||
|
||||
result = subprocess.run(['yum', 'install', '-y', 'ffmpeg'], capture_output=True)
|
||||
if result.returncode == 0:
|
||||
logger.debug("ffmpeg installation was successful using yum. Restart for changes to take effect.")
|
||||
return True
|
||||
logger.error(result.stderr.decode('utf-8').strip())
|
||||
except FileNotFoundError:
|
||||
logger.debug("yum command not found, trying to install using apt...")
|
||||
is_RHS = False
|
||||
except Exception as e:
|
||||
logger.error(f"An error occurred while trying to install ffmpeg using yum: {e}")
|
||||
|
||||
if not is_RHS:
|
||||
try:
|
||||
logger.debug("Trying to install the stable version of ffmpeg for Linux using apt...")
|
||||
result = subprocess.run(['apt', 'update'], capture_output=True)
|
||||
if result.returncode != 0:
|
||||
logger.error("Failed to update package lists using apt")
|
||||
return False
|
||||
|
||||
result = subprocess.run(['apt', 'install', '-y', 'ffmpeg'], capture_output=True)
|
||||
if result.returncode == 0:
|
||||
logger.debug("ffmpeg installation was successful using apt. Restart for changes to take effect.")
|
||||
return True
|
||||
else:
|
||||
logger.error(result.stderr.decode('utf-8').strip())
|
||||
except FileNotFoundError:
|
||||
logger.error("apt command not found, unable to install ffmpeg. Please manually install ffmpeg by yourself")
|
||||
except Exception as e:
|
||||
logger.error(f"An error occurred while trying to install ffmpeg using apt: {e}")
|
||||
logger.error("Manual installation of ffmpeg is required. Please manually install ffmpeg by yourself.")
|
||||
return False
|
||||
|
||||
|
||||
def install_ffmpeg() -> bool:
|
||||
if current_platform == "Linux":
|
||||
return install_ffmpeg_linux()
|
||||
logger.debug("ffmpeg 自动安装仅支持 Linux,请使用系统包管理器安装 ffmpeg。")
|
||||
return False
|
||||
|
||||
|
||||
def ensure_ffmpeg_installed(func):
|
||||
def wrapper(*args, **kwargs):
|
||||
try:
|
||||
result = subprocess.run(['ffmpeg', '-version'], capture_output=True)
|
||||
version = result.stdout.strip()
|
||||
if result.returncode == 0 and version:
|
||||
return func(*args, **kwargs)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return False
|
||||
|
||||
def wrapped_func(*args, **kwargs):
|
||||
if sys.version_info >= (3, 7):
|
||||
res = wrapper(*args, **kwargs)
|
||||
else:
|
||||
res = wrapper(*args, **kwargs)
|
||||
if not res:
|
||||
install_ffmpeg()
|
||||
res = wrapper(*args, **kwargs)
|
||||
|
||||
if not res:
|
||||
raise RuntimeError("ffmpeg is not installed.")
|
||||
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return wrapped_func
|
||||
|
||||
|
||||
def check_ffmpeg_installed() -> bool:
|
||||
try:
|
||||
result = subprocess.run(['ffmpeg', '-version'], capture_output=True)
|
||||
version = result.stdout.strip()
|
||||
if result.returncode == 0 and version:
|
||||
return True
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
except OSError as e:
|
||||
print(f"OSError occurred: {e}. ffmpeg may not be installed correctly or is not available in the system PATH.")
|
||||
print("Please delete the ffmpeg and try to download and install again.")
|
||||
except Exception as e:
|
||||
print(f"An unexpected error occurred: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def check_ffmpeg() -> bool:
|
||||
if not check_ffmpeg_installed():
|
||||
return install_ffmpeg()
|
||||
return True
|
||||
Reference in New Issue
Block a user