diff --git a/FFMpeg-Compressor/ffmpeg-comp.toml b/FFMpeg-Compressor/ffmpeg-comp.toml index 802fb3b..43199df 100644 --- a/FFMpeg-Compressor/ffmpeg-comp.toml +++ b/FFMpeg-Compressor/ffmpeg-comp.toml @@ -1,5 +1,6 @@ [FFMPEG] FFmpegParams = "-n -hide_banner -loglevel error" +CopyUnprocessed = false MimicMode = false [AUDIO] @@ -7,7 +8,7 @@ Extension = "mp3" BitRate = "320k" [IMAGE] -Extension = "png" +Extension = "jpg" CompLevel = 20 JpegComp = 3 diff --git a/FFMpeg-Compressor/main.py b/FFMpeg-Compressor/main.py index 790adee..bd7314a 100755 --- a/FFMpeg-Compressor/main.py +++ b/FFMpeg-Compressor/main.py @@ -1,4 +1,4 @@ -#!/bin/python3 +#!python3 from modules import configloader from modules import compressor @@ -43,6 +43,15 @@ for folder, folders, files in os.walk(orig_folder): comp_file = compressor.compress_video(folder, file, target_folder) case "unknown": comp_file = compressor.compress(folder, file, target_folder) + if configloader.config['FFMPEG']['MimicMode']: - os.rename(comp_file, f'{folder}_compressed/{file}') + try: + os.rename(comp_file, f'{folder}_compressed/{file}') + except FileNotFoundError: + printer.error(f"File {file} can't be processed! Maybe it is ffmpeg error or unsupported file. " + f"You can change -loglevel in ffmpeg parameters to see full error.") + +if configloader.config['FFMPEG']['CopyUnprocessed']: + printer.info("Copying unprocessed files...") + utils.add_unprocessed_files(orig_folder) utils.get_compression_status(orig_folder) diff --git a/FFMpeg-Compressor/modules/utils.py b/FFMpeg-Compressor/modules/utils.py index 66f3b80..3eb4d58 100644 --- a/FFMpeg-Compressor/modules/utils.py +++ b/FFMpeg-Compressor/modules/utils.py @@ -1,4 +1,6 @@ from modules import printer +from shutil import copyfile +from glob import glob import os @@ -32,11 +34,13 @@ def get_compression_status(orig_folder): orig_folder_len = 0 comp_folder_len = 0 - for folder, folders, file in os.walk(orig_folder): - orig_folder_len += len(file) + for folder, folders, files in os.walk(orig_folder): + orig_folder_len += len(files) - for folder, folders, file in os.walk(f'{orig_folder}_compressed'): - comp_folder_len += len(file) + for folder, folders, files in os.walk(f'{orig_folder}_compressed'): + for file in files: + if not os.path.splitext(file)[1].count(" (copy)"): + comp_folder_len += 1 if orig_folder_len == comp_folder_len: printer.info("Success!") @@ -46,6 +50,22 @@ def get_compression_status(orig_folder): get_compression(orig_folder, f"{orig_folder}_compressed") +def add_unprocessed_files(orig_folder): + for folder, folders, files in os.walk(orig_folder): + for file in files: + new_folder = f"{folder}".replace(orig_folder, f"{orig_folder}_compressed") + if len(glob(f"{folder}/{os.path.splitext(file)[0]}*")) != 1: + if len(glob(f"{new_folder}/{file}")): + copyfile(f"{folder}/{file}", f"{new_folder}/{file} (copy)") + printer.warning(f'Duplicate file has been found! Check manually this files - "{file}", "{file} (copy)"') + else: + copyfile(f"{folder}/{file}", f"{new_folder}/{file}") + printer.info(f"File {file} copied to compressed folder.") + else: + if not len(glob(f"{folder}_compressed/{os.path.splitext(file)[0]}*")): + copyfile(f"{folder}/{file}", f"{new_folder}/{file}") + printer.info(f"File {file} copied to compressed folder.") + + def help_message(): - text = "Usage: ffmpeg-comp {folder}" - return text + return "Usage: ffmpeg-comp {folder}"