Av1an/utils/setup.py

68 lines
1.7 KiB
Python
Executable file

#!/bin/env python
import os
import shutil
from pathlib import Path
from psutil import virtual_memory
from .utils import terminate
from distutils.spawn import find_executable
def determine_resources(encoder, workers):
"""Returns number of workers that machine can handle with selected encoder."""
# If set by user, skip
if workers != 0:
return workers
cpu = os.cpu_count()
ram = round(virtual_memory().total / 2 ** 30)
if encoder in ('aom', 'rav1e', 'vpx'):
workers = round(min(cpu / 2, ram / 1.5))
elif encoder == 'svt_av1':
workers = round(min(cpu, ram)) // 5
# fix if workers round up to 0
if workers == 0:
workers = 1
return workers
def check_executables(encoder):
encoders = {'svt_av1': 'SvtAv1EncApp', 'rav1e': 'rav1e', 'aom': 'aomenc', 'vpx': 'vpxenc'}
if not find_executable('ffmpeg'):
print('No ffmpeg')
terminate()
# Check if encoder executable is reachable
if encoder in encoders:
enc = encoders.get(encoder)
if not find_executable(enc):
print(f'Encoder {enc} not found')
terminate()
else:
print(f'Not valid encoder {encoder}\nValid encoders: "aom rav1e", "svt_av1", "vpx" ')
terminate()
def setup(temp: Path, resume):
"""Creating temporally folders when needed."""
# Make temporal directories, and remove them if already presented
if not resume:
if temp.is_dir():
shutil.rmtree(temp)
(temp / 'split').mkdir(parents=True, exist_ok=True)
(temp / 'encode').mkdir(exist_ok=True)
def outputs_filenames(inp: Path, out:Path):
if out:
return out.with_suffix('.mkv')
else:
return Path(f'{inp.stem}_av1.mkv')