From 4ec523ed1b03aefed371392baf77cdd4441db321 Mon Sep 17 00:00:00 2001 From: OleSTEEP Date: Thu, 1 Jun 2023 18:33:52 +0300 Subject: [PATCH] FFMpeg-Compressor: Ignore folders --- FFMpeg-Compressor/main.py | 8 +--- FFMpeg-Compressor/modules/compressor.py | 54 ++++++++++++------------- FFMpeg-Compressor/modules/utils.py | 20 +++++++++ 3 files changed, 48 insertions(+), 34 deletions(-) diff --git a/FFMpeg-Compressor/main.py b/FFMpeg-Compressor/main.py index 9d853df..c789839 100755 --- a/FFMpeg-Compressor/main.py +++ b/FFMpeg-Compressor/main.py @@ -21,10 +21,4 @@ except OSError: printer.info("Compression started!") compressor.compress(orig_folder) - -if len(os.listdir(path=orig_folder)) == len((os.listdir(path=f"{orig_folder}_compressed"))): - printer.info("Success!") - utils.get_compression(orig_folder, f"{orig_folder}_compressed") -else: - printer.warning("Some files failed to compress!") - utils.get_compression(orig_folder, f"{orig_folder}_compressed") +utils.get_compression_status(orig_folder) diff --git a/FFMpeg-Compressor/modules/compressor.py b/FFMpeg-Compressor/modules/compressor.py index 7a4210d..18df541 100644 --- a/FFMpeg-Compressor/modules/compressor.py +++ b/FFMpeg-Compressor/modules/compressor.py @@ -33,41 +33,41 @@ def has_transparency(img): def compress(folder): - files = len(os.listdir(path=folder)) + files = len(os.listdir(folder)) progress = 0 - for file in os.listdir(path=folder): + for file in os.listdir(folder): + if os.path.isfile(f'{folder}/{file}'): + if os.path.splitext(file)[1] in audio_exts: - if os.path.splitext(file)[1] in audio_exts: + bitrate = config['FFMPEG']['AudioBitRate'] + printer.files(int((progress / files) * 100), file, os.path.splitext(file)[0], req_audio_ext, f"{bitrate}bit/s") + os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} '{folder}_compressed/{os.path.splitext(file)[0]}.{req_audio_ext}'") - bitrate = config['FFMPEG']['AudioBitRate'] - printer.files(int((progress / files) * 100), file, os.path.splitext(file)[0], req_audio_ext, f"{bitrate}bit/s") - os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} '{folder}_compressed/{os.path.splitext(file)[0]}.{req_audio_ext}'") + elif os.path.splitext(file)[1] in image_exts: - elif os.path.splitext(file)[1] in image_exts: + if req_image_ext == "jpg" or req_image_ext == "jpeg": - if req_image_ext == "jpg" or req_image_ext == "jpeg": + if not has_transparency(Image.open(f'{folder}/{file}')): + jpg_comp = config['FFMPEG']['JpegComp'] + printer.files(int((progress / files) * 100), file, os.path.splitext(file)[0], req_image_ext, f"{jpg_comp}%") + os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -q {jpg_comp} '{folder}_compressed/{os.path.splitext(file)[0]}.{req_image_ext}'") - if not has_transparency(Image.open(f'{folder}/{file}')): - jpg_comp = config['FFMPEG']['JpegComp'] - printer.files(int((progress / files) * 100), file, os.path.splitext(file)[0], req_image_ext, f"{jpg_comp}%") - os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -q {jpg_comp} '{folder}_compressed/{os.path.splitext(file)[0]}.{req_image_ext}'") + else: + printer.warning(f"{file} has transparency (.jpg not support it). Skipping...") else: - printer.warning(f"{file} has transparency (.jpg not support it). Skipping...") + comp_level = config['FFMPEG']['CompLevel'] + printer.files(int((progress / files) * 100), 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} '{folder}_compressed/{os.path.splitext(file)[0]}.{req_image_ext}'") + + elif os.path.splitext(file)[1] in video_exts: + codec = config['FFMPEG']['VideoCodec'] + printer.files(int((progress / files) * 100), file, os.path.splitext(file)[0], req_video_ext, codec) + os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -vcodec {codec} '{folder}_compressed/{os.path.splitext(file)[0]}.{req_video_ext}'") else: - comp_level = config['FFMPEG']['CompLevel'] - printer.files(int((progress / files) * 100), 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} '{folder}_compressed/{os.path.splitext(file)[0]}.{req_image_ext}'") + printer.warning("File extension not recognized. This may affect the quality of the compression.") + print(f"\r[{int((progress/files) * 100)}%] \033[0;33m{file}\033[0m") + os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} '{folder}_compressed/{file}'") - elif os.path.splitext(file)[1] in video_exts: - codec = config['FFMPEG']['VideoCodec'] - printer.files(int((progress / files) * 100), file, os.path.splitext(file)[0], req_video_ext, codec) - os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} -vcodec {codec} '{folder}_compressed/{os.path.splitext(file)[0]}.{req_video_ext}'") - - else: - printer.warning("File extension not recognized. This may affect the quality of the compression.") - print(f"\r[{int((progress/files) * 100)}%] \033[0;33m{file}\033[0m") - os.system(f"ffmpeg -i '{folder}/{file}' {ffmpeg_params} '{folder}_compressed/{file}'") - - progress += 1 + progress += 1 diff --git a/FFMpeg-Compressor/modules/utils.py b/FFMpeg-Compressor/modules/utils.py index 3b5c308..9009c10 100644 --- a/FFMpeg-Compressor/modules/utils.py +++ b/FFMpeg-Compressor/modules/utils.py @@ -28,6 +28,26 @@ def get_compression(orig, comp): printer.warning("Nothing compressed!") +def get_compression_status(orig_folder): + orig_folder_len = 0 + comp_folder_len = 0 + + for file in os.listdir(orig_folder): + if os.path.isfile(f'{orig_folder}/{file}'): + orig_folder_len += 1 + + for file in os.listdir(orig_folder): + if os.path.isfile(f'{orig_folder}_compressed/{file}'): + comp_folder_len += 1 + + if orig_folder_len == comp_folder_len: + printer.info("Success!") + get_compression(orig_folder, f"{orig_folder}_compressed") + else: + printer.warning("Some files failed to compress!") + get_compression(orig_folder, f"{orig_folder}_compressed") + + def help_message(): text = "Usage: main.py {folder}" return text