-
Notifications
You must be signed in to change notification settings - Fork 10
pycvvdp: Introduce saving quality metrics by default #7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
This allows us to have a CSV file (can be extended to JSON/XML) in future for quality metrics computed by the program. By default it saves to $output/${basename}-metrics.csv format. This is enabled by default because why not
I know that VMAF can output the quality per-frame and the final score is the mean of those. This is not the case for cvvdp - it computes the normalized L2 norm of per-frame scores in a different space (before regressing JOD). Therefore, I would be against outputting per-frame scores for cvvdp. But we will look into creating a text file with the results. Right now, |
Thanks, Are you suggesting that mean of all JODs for a given video is not accurate? Cause that is essentially we get when we use quiet. It is more or less csv of quiet option output in a slightly more readable form |
The JOD score for video should be computed by running on video files, not individual frames. I suggest combining frames into video files (with ffmpeg), using lossless compression or no compression. It is also important to have correct frame-per-second metadata in the video file. |
I was trying to load linear light EXR files which is RGB image sequence with correct fps, wouldn’t that be same as loading video as we have frame array there in operation pipeline? so source and distortion are exr image sequences which is obtained with standard HDRTools library with appropriate conversion files. (From PQ BT2020 sources and compression with codecs) I strongly believe handling BT.2020 with libavfilter is not a good way to retain original colours since it is inherently not well designed at the moment. |
Just to add that initially i was trying to load lossless Y4M/YUV, but tool did not like it |
ColorVideoVDP/pycvvdp/cvvdp_metric.py Line 283 in 7e93a51
examples folder).
|
I think it can still be useful to get per frame scores to understand the distribution of quality across the sequence, even if the overall quality is not the average of the frame quality. For example I'm working on some encoder tuning right now where I get virtually the same |
You could dump the values that are used to plot a distogram: ColorVideoVDP/pycvvdp/cvvdp_metric.py Line 1071 in 757f200
There is also an experimental feature of dumping channels as video in the branch What you need is rather specialized and needed for your particular application so I suggest that you customise cvvdp. If we output per-frame scores, most people will misinterpret those and start computing the mean. |
The new version, v0.4.2 (3a746fd), adds an option to save the results and also process a video stored as a sequence of images. I hope it addresses most of the issues that this pull request targets. |
@mantiuk what if instead of per frame scores there was support for computing a short term quality score, and reporting the value of the short term quality throughout the sequence. Not sure what the minimum number of frames would be to have a meaningful measure of short term quality, maybe 0.5s? 1s? It would provide an alternative to looking frame by frame (which ignores the video aspect) while still providing a way to identify the worst section of a sequence and take that into consideration when performing encoder evaluations and tuning. |
Per-frame (and also per-channel and per-band) saving is now in the branch |
This allows us to have a CSV file (can be extended to JSON/XML) in future for quality metrics computed by the program. By default it saves to$output/$ {basename}-metrics.csv format.
This is enabled by default because why not
Edit:
Sample: