From d74464a031a96233e1fff48aee14fc3910bbed3b Mon Sep 17 00:00:00 2001 From: OleSTEEP Date: Tue, 8 Aug 2023 16:33:25 +0300 Subject: [PATCH] FFMpeg-Compressor: UNIX binary --- .../{config.toml => ffmpeg-comp.toml} | 0 FFMpeg-Compressor/modules/compressor.py | 23 +++++++++++++------ FFMpeg-Compressor/modules/printer.py | 20 +++++++++------- FFMpeg-Compressor/modules/utils.py | 2 +- 4 files changed, 29 insertions(+), 16 deletions(-) rename FFMpeg-Compressor/{config.toml => ffmpeg-comp.toml} (100%) diff --git a/FFMpeg-Compressor/config.toml b/FFMpeg-Compressor/ffmpeg-comp.toml similarity index 100% rename from FFMpeg-Compressor/config.toml rename to FFMpeg-Compressor/ffmpeg-comp.toml diff --git a/FFMpeg-Compressor/modules/compressor.py b/FFMpeg-Compressor/modules/compressor.py index 72760cf..4d72056 100644 --- a/FFMpeg-Compressor/modules/compressor.py +++ b/FFMpeg-Compressor/modules/compressor.py @@ -7,8 +7,14 @@ audio_exts = ['.aac', '.flac', '.m4a', '.mp3', '.ogg', '.opus', '.raw', '.wav', image_exts = ['.apng', '.avif', '.jfif', '.pjpeg', '.pjp', '.svg', '.webp', '.jpg', '.jpeg', '.png', '.raw'] video_exts = ['.3gp' '.amv', '.avi', '.gif', '.m4v', '.mkv', '.mov', '.mp4', '.m4v', '.mpeg', '.mpv', '.webm', '.ogv'] -with open("config.toml", "rb") as f: - config = tomllib.load(f) +try: + config = tomllib.load(open("ffmpeg-comp.toml", "rb")) +except FileNotFoundError: + try: + config = tomllib.load(open("/etc/ffmpeg-comp.toml", "rb")) + except FileNotFoundError: + printer.error("Config file not found. Please put it next to binary or in to /etc folder.") + exit() ffmpeg_params = config['FFMPEG']['FFmpegParams'] req_audio_ext = config['FFMPEG']['AudioExt'] @@ -34,14 +40,14 @@ def has_transparency(img): def compress(root_folder, folder): target_folder = folder.replace(root_folder, f"{root_folder}_compressed") - files = len(os.listdir(folder)) for file in os.listdir(folder): if os.path.isfile(f'{folder}/{file}'): if os.path.splitext(file)[1] in audio_exts: bitrate = config['FFMPEG']['AudioBitRate'] printer.files(file, os.path.splitext(file)[0], req_audio_ext, f"{bitrate}bit/s") - os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} '{target_folder}/{os.path.splitext(file)[0]}.{req_audio_ext}'") + os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} " + f"'{target_folder}/{os.path.splitext(file)[0]}.{req_audio_ext}'") elif os.path.splitext(file)[1] in image_exts: @@ -50,7 +56,8 @@ def compress(root_folder, folder): if not has_transparency(Image.open(f'{folder}/{file}')): jpg_comp = config['FFMPEG']['JpegComp'] printer.files(file, os.path.splitext(file)[0], req_image_ext, f"level {jpg_comp}") - os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -q {jpg_comp} '{target_folder}/{os.path.splitext(file)[0]}.{req_image_ext}'") + os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -q {jpg_comp} " + f"'{target_folder}/{os.path.splitext(file)[0]}.{req_image_ext}'") else: printer.warning(f"{file} has transparency (.jpg not support it). Skipping...") @@ -58,12 +65,14 @@ def compress(root_folder, folder): else: comp_level = config['FFMPEG']['CompLevel'] printer.files(file, os.path.splitext(file)[0], req_image_ext, f"{comp_level}%") - os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -compression_level {comp_level} '{target_folder}/{os.path.splitext(file)[0]}.{req_image_ext}'") + os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -compression_level {comp_level} " + f"'{target_folder}/{os.path.splitext(file)[0]}.{req_image_ext}'") elif os.path.splitext(file)[1] in video_exts: codec = config['FFMPEG']['VideoCodec'] printer.files(file, os.path.splitext(file)[0], req_video_ext, codec) - os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -vcodec {codec} '{target_folder}/{os.path.splitext(file)[0]}.{req_video_ext}'") + os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -vcodec {codec} " + f"'{target_folder}/{os.path.splitext(file)[0]}.{req_video_ext}'") else: printer.warning("File extension not recognized. This may affect the quality of the compression.") diff --git a/FFMpeg-Compressor/modules/printer.py b/FFMpeg-Compressor/modules/printer.py index cd9f2b6..f735b01 100644 --- a/FFMpeg-Compressor/modules/printer.py +++ b/FFMpeg-Compressor/modules/printer.py @@ -7,6 +7,18 @@ def clean_str(string): return string + " " * (os.get_terminal_size().columns - len(string)) +def info(string): + print(clean_str(f"\r\033[0;32m[INFO]\033[0m {string}")) + + +def warning(string): + print(clean_str(f"\r\033[0;33m[WARNING]\033[0m {string}")) + + +def error(string): + print(clean_str(f"\r\033[0;31m[ERROR]\033[0m {string}")) + + def bar_init(folder): file_count = 0 for folder, folders, file in os.walk(folder): @@ -15,10 +27,6 @@ def bar_init(folder): bar = IncrementalBar('Compressing', max=file_count, suffix='[%(index)d/%(max)d] (%(percent).1f%%) - ETA: %(eta)ds') -def info(string): - print(clean_str(f"\r\033[0;32m[INFO] \033[0m {string}" + " ")) - - def files(source, dest, dest_ext, comment): source_ext = os.path.splitext(source)[1] @@ -32,7 +40,3 @@ def unknown_file(file): print(clean_str(f"\r[COMP] \033[0;33m{file}\033[0m")) bar.next() - - -def warning(string): - print(clean_str(f"\r\033[0;33m[WARNING] {string}\033[0m")) diff --git a/FFMpeg-Compressor/modules/utils.py b/FFMpeg-Compressor/modules/utils.py index 567348f..66f3b80 100644 --- a/FFMpeg-Compressor/modules/utils.py +++ b/FFMpeg-Compressor/modules/utils.py @@ -47,5 +47,5 @@ def get_compression_status(orig_folder): def help_message(): - text = "Usage: main.py {folder}" + text = "Usage: ffmpeg-comp {folder}" return text