Closed veikk0 closed 3 years ago
Thank you for this suggestion. I will add an option to allow the user to change the default value (1) of n_subsample
by providing an argument (-n x
or --subsample x
) when running this program.
However, this might cause some problems for and require some refactoring of the by-frame score graph generation or accuracy, since in this mode a score is not calculated for every frame. For the use case of preset comparison this isn't really a problem, since only calculating a score for every X frames doesn't change the average very much at all (as long as you use a value that's within reason).
As this will be an option that the user will have to enable explicitly, it should be obvious to the user that the graphs as well as the the min, mean, and standard deviation are based on the values of every nth frame, since that is all that is being calculated. Therefore, in my opinion, the methodologies for producing the graphs and the aforementioned metrics do not need to be altered.
I have a suggestion for a major performance increase in VMAF calculation; add an option to use the subsampling option, which only calculates VMAF for every x frames.
In FFmpeg's vmaf filter the parameter is called n_subsample, but I'm pretty sure this is a feature of the VMAF library itself.
However, this might cause some problems for and require some refactoring of the by-frame score graph generation or accuracy, since in this mode a score is not calculated for every frame. For the use case of preset comparison this isn't really a problem, since only calculating a score for every X frames doesn't change the average very much at all (as long as you use a value that's within reason).
What I've noticed in terms of performance changes is that the larger the subsample number, the more the bottleneck is moved to the decoder. The videos still need to decoded in their entirety, and for something like 4K this can be a major CPU hog, especially for AV1. So if this gets implemented, it might be a good idea to recommend that an FFmpeg build with dav1d is used, since that's significantly faster at decoding AV1 than libaom's decoder.