From a973fe79e81a48f9dd0fe6e1544e02ba9a48ef68 Mon Sep 17 00:00:00 2001 From: OleSTEEP Date: Mon, 22 Apr 2024 23:23:06 +0300 Subject: [PATCH] FFMpeg-Compressor: Add SkipVideo parameter --- FFMpeg-Compressor/README.md | 12 ++++++----- FFMpeg-Compressor/ffmpeg-comp.toml | 1 + FFMpeg-Compressor/modules/compressor.py | 27 ++++++++++++++----------- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/FFMpeg-Compressor/README.md b/FFMpeg-Compressor/README.md index 56b8ff4..4d04f2f 100644 --- a/FFMpeg-Compressor/README.md +++ b/FFMpeg-Compressor/README.md @@ -5,11 +5,11 @@ Python utility uses ffmpeg to compress Visual Novel Resources * Download `ffmpeg-comp.toml` and put in next to binary or in to `/etc` folder * Change the configuration of the utility in `ffmpeg-comp.toml` for yourself * `ffmpeg-comp {folder}` -* In result you get `{folder-compressed}` near with original `{folder}` +* In result, you get `{folder-compressed}` near with original `{folder}` ### Configuration #### FFMPEG section -* CopyUnprocessed - Copy all files that failed to compress by ffmpeg to destination folder. In can helps to recreate original folder, but with compressed files. (default: `true`) +* CopyUnprocessed - Copy all files that failed to compress by ffmpeg to destination folder. In can help to recreate original folder, but with compressed files. (default: `true`) * ForceCompress - Force try to compress all files in directory via ffmpeg. (default: `false`) * MimicMode - Rename compressed file to it original name and extension. VN engines determine the file type by its header, so for example PNG file named file.jpg will be loaded as PNG file. (default: `true`) * HideErrors - Hide some errors about compression. (default: `true`) @@ -20,18 +20,20 @@ Python utility uses ffmpeg to compress Visual Novel Resources * BitRate - Required audio bitrate. For best quality use `320k` value. #### IMAGE section +* ResDownScale - Downscale image resolution count. (default: `1`) * Extension - Required image file extension. It supports: `.apng`, `.avif`, `.bmp`, `.tga`, `.tiff`, `.dds`, `.svg`, `.webp`, `.jpg/.jpeg`, `.png` * FallBackExtension - Extension if current format does not support RGBA. -* Lossless - Enables lossless copression for supported formats. With this quality parameter means quality of compression. (default: `false`) +* Lossless - Enables lossless compression for supported formats. With this quality parameter means quality of compression. (default: `false`) * Quality - Quality level of images. Values range: `0-100` (100 - best quality, 0 - worst quality) #### VIDEO section +* SkipVideo - Skip processing all video files. (default: `false`) * Extension - Required image file extension. It supports: `.3gp`, `.amv`, `.avi`, `.gif`, `.m2l`, `.m4v`, `.mkv`, `.mov`, `.mp4`, `.m4v`, `.mpeg`, `.mpv`, `.webm`, `.ogv` -* Codec - (May be optional in future) Required video codec. (See official ffmpeg documentation for supported codecs) +* Codec - (Maybe optional in future) Required video codec. (See official ffmpeg documentation for supported codecs) ### TODO (for testing branch) * [x] Recreate whole game directory with compressed files -* [x] Cross platform (Easy Windows usage and binaries, MacOS binaries) +* [x] Cross-platform (Easy Windows usage and binaries, macOS binaries) * [x] Use ffmpeg python bindings instead of cli commands * [ ] Reorganize code * [ ] Multithread \ No newline at end of file diff --git a/FFMpeg-Compressor/ffmpeg-comp.toml b/FFMpeg-Compressor/ffmpeg-comp.toml index 51a4866..fbbe2d0 100644 --- a/FFMpeg-Compressor/ffmpeg-comp.toml +++ b/FFMpeg-Compressor/ffmpeg-comp.toml @@ -17,5 +17,6 @@ Lossless = true Quality = 100 [VIDEO] +SkipVideo = true Extension = "webm" Codec = "libvpx-vp9" \ No newline at end of file diff --git a/FFMpeg-Compressor/modules/compressor.py b/FFMpeg-Compressor/modules/compressor.py index 48b4d92..769a85e 100644 --- a/FFMpeg-Compressor/modules/compressor.py +++ b/FFMpeg-Compressor/modules/compressor.py @@ -43,20 +43,23 @@ def compress_audio(folder, file, target_folder, extension): def compress_video(folder, file, target_folder, extension): - codec = configloader.config['VIDEO']['Codec'] + if not configloader.config['VIDEO']['SkipVideo']: + codec = configloader.config['VIDEO']['Codec'] - printer.files(file, os.path.splitext(file)[0], extension, codec) - try: - (ffmpeg - .input(f'{folder}/{file}') - .output(utils.check_duplicates(f'{target_folder}/{os.path.splitext(file)[0]}.{extension}'), vcodec=codec) - .run(quiet=True) - ) - except ffmpeg._run.Error as e: + printer.files(file, os.path.splitext(file)[0], extension, codec) + try: + (ffmpeg + .input(f'{folder}/{file}') + .output(utils.check_duplicates(f'{target_folder}/{os.path.splitext(file)[0]}.{extension}'), vcodec=codec) + .run(quiet=True) + ) + except ffmpeg._run.Error as e: + utils.add_unprocessed_file(f'{folder}/{file}', f'{target_folder}/{file}') + utils.errors_count += 1 + if not configloader.config['FFMPEG']['HideErrors']: + printer.error(f"File {file} can't be processed! Error: {e}") + else: utils.add_unprocessed_file(f'{folder}/{file}', f'{target_folder}/{file}') - utils.errors_count += 1 - if not configloader.config['FFMPEG']['HideErrors']: - printer.error(f"File {file} can't be processed! Error: {e}") return f'{target_folder}/{os.path.splitext(file)[0]}.{extension}'