FFMpeg-Compressor: Implement multiple FIFO workers
This commit is contained in:
parent
54820279d1
commit
23f7e5ec67
3 changed files with 19 additions and 6 deletions
|
@ -36,5 +36,5 @@ Python utility uses ffmpeg to compress Visual Novel Resources
|
||||||
* [x] Recreate whole game directory with compressed files
|
* [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
|
* [x] Use ffmpeg python bindings instead of cli commands
|
||||||
* [ ] Reorganize code
|
* [x] Multithread
|
||||||
* [ ] Multithread
|
* [ ] Reorganize code
|
|
@ -4,6 +4,7 @@ ForceCompress = false
|
||||||
MimicMode = true
|
MimicMode = true
|
||||||
HideErrors = true
|
HideErrors = true
|
||||||
WebpRGBA = true
|
WebpRGBA = true
|
||||||
|
Workers = 16
|
||||||
|
|
||||||
[AUDIO]
|
[AUDIO]
|
||||||
Extension = "opus"
|
Extension = "opus"
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||||
|
from modules.configloader import config
|
||||||
from modules import compressor
|
from modules import compressor
|
||||||
from modules import printer
|
from modules import printer
|
||||||
from modules import utils
|
from modules import utils
|
||||||
|
@ -21,6 +23,11 @@ def get_args():
|
||||||
exit()
|
exit()
|
||||||
|
|
||||||
|
|
||||||
|
def compress_worker(folder, file, target_folder, req_folder):
|
||||||
|
if os.path.isfile(f'{folder}/{file}'):
|
||||||
|
compressor.compress_file(folder, file, target_folder, req_folder)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
start_time = datetime.now()
|
start_time = datetime.now()
|
||||||
printer.win_ascii_esc()
|
printer.win_ascii_esc()
|
||||||
|
@ -38,10 +45,15 @@ if __name__ == "__main__":
|
||||||
|
|
||||||
printer.info(f"Compressing \"{folder.replace(req_folder, req_folder.split('/').pop())}\" folder...")
|
printer.info(f"Compressing \"{folder.replace(req_folder, req_folder.split('/').pop())}\" folder...")
|
||||||
target_folder = folder.replace(req_folder, f"{req_folder}_compressed")
|
target_folder = folder.replace(req_folder, f"{req_folder}_compressed")
|
||||||
for file in files:
|
|
||||||
if os.path.isfile(f'{folder}/{file}'):
|
with ThreadPoolExecutor(max_workers=config["FFMPEG"]["Workers"]) as executor:
|
||||||
compressor.compress_file(folder, file, target_folder, req_folder)
|
futures = [
|
||||||
|
executor.submit(compress_worker, folder, file, target_folder, req_folder)
|
||||||
|
for file in files
|
||||||
|
]
|
||||||
|
for future in as_completed(futures):
|
||||||
|
future.result()
|
||||||
|
|
||||||
utils.get_compression_status(req_folder)
|
utils.get_compression_status(req_folder)
|
||||||
utils.sys_pause()
|
utils.sys_pause()
|
||||||
print(f"Time taken: {datetime.now() - start_time}")
|
print(f"Time taken: {datetime.now() - start_time}")
|
Loading…
Add table
Add a link
Reference in a new issue