Hello,
It could greatly improve the final quality of the encoding to split the input video into scenes and encode each one to achieve the same visual quality value (using a metric such as VMAF, SSIM etc) as this project tries to do:
https://github.com/master-of-zen/Av1an
Do I get this right the idea is to rencode each scene until all hit at least some quality level defined by calculating the VMAF score after each encode?
I agree that chunked encoding can make sense to encode faster if the encoder isn't well parallized.
But reencoding xy times to hit a specific target VMAF does not sound like a good idea, instead the encoder you want to use should use VMAF as quality measurement base.
-> I'm not going to implement this in Hybrid, but hey simply use Av1an if you think this is a good idea. Also you might want to suggest using VMAF to the authors of the encoders.
Cu Selur
Ps.: If it's just about the speed, Hybrid also has an *experimental* support for chunked encoding (Config->Internals->Chunked encoding)
Yes there would be multiple re-encodings (even via binary search of the crf equivalent, without having to massively increase attempts for other setting changes which at that point would be so many attempts that the machine learning route would be preferable as a best setting search approach)
Also by dividing by scenes, just following the principle of constant quality, you would get a quality advantage the more the scenes are different from each other.
And also more speed if there was not already enough parallel computation.
It seems to me that the Aomedia AV1 encoder has already implemented a setting to adjust the quality according to the VMAF value but I think the next step is to find an homogeneous division of the scenes compared to consider the whole video and average the VMAF value (I'm not an expert in the field nor can I be sure that the Aomedia encoder is not already designed this way).
I simply wanted to suggest a different mode that I was impressed to find in Av1an.
aomenc has a bunch of tune options which allow to tune the rate distortion metrics with psnr, ssim, vmaf_with_preprocessing, vmaf_without_preprocessing, vmaf, vmaf_neg, butteraugli.
So may be using Hybrids chunked encoding with one of the tune vmaf options and constrained quality encoding might be worth to try for you.
Cu Selur
Yes, thanks.
I used it but unfortunately with the options VMAF, vmaf_without_preprocessing the encoding crashes.
Also seems that vmaf_with_preprocessing and none have the same command arguments in hybrid
on Windows 10 and Hybrid 2022.03.20.1
Okay, encoding aborts with:
Code:
Error: Tried to set control 24 = 6
Failed to control codec: Invalid parameter
This error may be related to the wrong configuration options: try to set -DCONFIG_TUNE_VMAF=1 at the time CMake is run.
seem like
m-ab-s doesn't build aomenc by default with vmaf support any more.
https://github.com/m-ab-s/media-autobuil.../pull/1530
-> I'll look into it after work.
Cu Selur
Send you a link to a dev version which comes with a aomenc-build which supports vmaf.
Cu Selur
Thank you, I am trying to install it.
Meaning I'm looking for a way again to bypass the mysterious Out of Memory error
https://forum.selur.net/thread-2207.html.
Usually it was enough to wait 10+ minutes at the error window.
I've also noticed (with the version before this dev) the encoding with AOMedia is very slow, Good quality deadline helps to speed it up, since there are no presets like in x264-x265, do you have any advice to speed it up?
Thanks, I'll read these tomorrow.
I've managed to install the dev version sent but it still crash at encoding with tune VMAF.
I think this is the line with the error
Code:
level 9: aomenc output: Error: Unrecognized option -vmaf-model-path=C:/Program Files/Hybrid/64bit/vmaf_v0.6.1.json
Probably it needs the linux-like path like the others vmaf-based tools for windows do, replacing
escaping the
with
More info:
https://github.com/Netflix/vmaf/issues/424