AV1-vs-HEVC/workflows/encode_hevc.py

73 lines
2.0 KiB
Python
Raw Permalink Normal View History

2024-01-12 20:33:08 +01:00
import os
import subprocess
import time
from . import res
DEFAULT_BITDEPTH_HEVC = 10
DEFAULT_CRF_HEVC = 21
DEFAULT_PARAMS_HEVC = "aq-mode=1:qcomp=0.7:vbv-bufsize=9000:vbv-maxrate=9000:no-sao=1:no-strong-intra-smoothing=1:keyint=240:min-keyint=24"
DEFAULT_PIX_FMT_HEVC = "yuv420p10le"
DEFAULT_PRESET_HEVC = "slow"
def get_encoding_command_hevc(f):
filenameSample = os.path.splitext(os.path.basename(f))[0]
filenameEncode = ".".join(
[
filenameSample,
'HEVC',
'10Bit',
'Preset',
f'{DEFAULT_PRESET_HEVC}',
'CRF',
f'{DEFAULT_CRF_HEVC}',
'mkv'
]
)
filepathEncode = os.path.join(res.get_path_data_encodes_hevc(), filenameEncode)
cmd_parts = [
'ffmpeg',
f'-i "{f}"',
'-an',
'-c:v libx265',
f'-preset {DEFAULT_PRESET_HEVC}',
f'-crf {DEFAULT_CRF_HEVC}',
f'-x265-params "{DEFAULT_PARAMS_HEVC}"',
f'-pix_fmt {DEFAULT_PIX_FMT_HEVC}',
'-y',
f'"{filepathEncode}"'
]
return " ".join(cmd_parts)
def start_workflow():
res.bootstrap_folder_structure()
path_results_encoding_time_hevc_json = os.path.join(
res.get_path_results_encoding_time(),
res.get_filename_results_encoding_time_hevc()
)
results_encoding_time_hevc = res.read_dict_from_json_file(
path_results_encoding_time_hevc_json
)
for f in res.get_all_sample_files():
filename = os.path.splitext(os.path.basename(f))[0]
if filename in results_encoding_time_hevc.keys():
continue
time_start = time.time()
subprocess.run(
get_encoding_command_hevc(f),
shell=True,
check=True
)
time_encoding = round(time.time() - time_start)
results_encoding_time_hevc[filename] = time_encoding
res.write_dict_to_json_file(
path_results_encoding_time_hevc_json,
results_encoding_time_hevc
)