1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-09-01 08:09:48 +02:00
ScreenPlay/Tools/download_ffmpeg.py
2023-02-18 12:11:29 +01:00

120 lines
3.9 KiB
Python

#!/usr/bin/python3
# SPDX-License-Identifier: LicenseRef-EliasSteurerTachiom OR AGPL-3.0-only
from fileinput import filename
from zipfile import ZipFile
import platform
from urllib.request import urlopen
import os
import defines
from shutil import move, rmtree
from util import cd_repo_root_path
from sys import stdout
stdout.reconfigure(encoding='utf-8')
def download(
download_server_base_url,
extraction_path,
name) -> str:
url = download_server_base_url + name
print(f"Downloading {name} from: {url}")
filedata = urlopen(url)
datatowrite = filedata.read()
path_and_filename = os.path.join(extraction_path, name)
print("Save tmp file: ", path_and_filename)
with open(path_and_filename, 'wb') as f:
f.write(datatowrite)
return path_and_filename
def extract_zip(extraction_path, path_and_filename):
print(f"Extract {path_and_filename} to {extraction_path}")
with ZipFile(path_and_filename, "r") as zip_ref:
zip_ref.extractall(extraction_path)
print(f"Delete tmp file: {path_and_filename}")
os.remove(path_and_filename)
def extract_zip_executables(extraction_path, path_and_filename):
files = []
listOfFileNames = []
with ZipFile(path_and_filename, 'r') as zipObj:
# Get a list of all archived file names from the zip
listOfFileNames = zipObj.namelist()
# Iterate over the file names
for fileName in listOfFileNames:
# Check filename endswith csv
if fileName.endswith('.exe'):
# Extract a single file from zip
zipObj.extract(fileName, extraction_path)
print(f"Extract {fileName} to {extraction_path}")
files.append(fileName)
for file in files:
abs_file_path = os.path.join(extraction_path, file)
move(abs_file_path, extraction_path)
print(f"Move {abs_file_path} to {extraction_path}")
print(f"Delete tmp zip file: {path_and_filename}")
os.remove(path_and_filename)
# We need the first folder name of a file:
# ffmpeg-5.0.1-essentials_build/bin/ffmpeg.exe
empty_ffmpeg_folder = os.path.join(extraction_path,os.path.dirname(os.path.dirname(files[0])))
ffplay = os.path.join(extraction_path,"ffplay.exe")
print(f"Delete not needed {ffplay}")
os.remove(ffplay)
print(f"Delete empty folder: {empty_ffmpeg_folder}")
rmtree(empty_ffmpeg_folder)
def download_prebuild_ffmpeg_mac(extraction_path: str):
print("Setup ffmpeg mac")
ffmpeg_zip_name = f'ffmpeg-{defines.FFMPEG_VERSION}.zip'
ffprobe_zip_name = f'ffprobe-{defines.FFMPEG_VERSION}.zip'
download_server_base_url = 'https://evermeet.cx/ffmpeg/'
ffmpeg_path_and_filename = download(
download_server_base_url, extraction_path, ffmpeg_zip_name)
extract_zip(extraction_path, ffmpeg_path_and_filename)
ffprobe_path_and_filename = download(
download_server_base_url, extraction_path, ffprobe_zip_name)
extract_zip(extraction_path, ffprobe_path_and_filename)
def download_prebuild_ffmpeg_windows(extraction_path: str):
print("Setup ffmpeg Windows")
ffmpeg_shared_7zip_name = "ffmpeg-release-essentials.zip"
download_server_base_url = 'https://www.gyan.dev/ffmpeg/builds/'
ffmpeg_path_and_filename = download(
download_server_base_url, extraction_path, ffmpeg_shared_7zip_name)
extract_zip_executables(extraction_path, ffmpeg_path_and_filename)
def execute():
# Make sure the script is always started from the same folder
root_path = cd_repo_root_path()
extraction_path = os.path.join(root_path, "ThirdParty/ffmpeg")
if os.path.exists(extraction_path):
rmtree(extraction_path)
os.makedirs(extraction_path)
if platform.system() == "Windows":
download_prebuild_ffmpeg_windows(extraction_path)
elif platform.system() == "Darwin":
download_prebuild_ffmpeg_mac(extraction_path)
if __name__ == "__main__":
execute()