How Perform Scaling with ffmpeg
Scaling with JSVM DownConvertStatic.exe
There are many techniques to scale images, most popular are Nearest Neighbor, Bilinear, Bicubic, Spline, and Lanczos.
The Nearest Neighbor considers the closest pixel, Bilinear – the closest 2×2 pixels, Bicubic the closest 4 × 4 pixels. Spline and Lanczos consider more surrounding pixels. If we denote ‘–>’ as less complex the above-mentioned techniques are ordered as follows:
Nearest Neighbor –> Bilinear –> Bicubic –> Spline –> Lanczos
The following quote is taken from the book “OpenCV 3.x with Python By Example – Second Edition“, the section “Image Scaling”:
“If we are enlarging an image, it’s preferable to use linear or cubic interpolation. If we are shrinking an image, it’s preferable to use area-based interpolation.
Similar results are reported in the paper – there is a difference in best up-scaling and down-scaling methods.
- For up-scaling 1024×768 to 1920×1080 of 24-bit RGB ranging of LibAv scaling methods (a part of ffmpeg):
So, SWS_BILINEAR is best method for up-scaling – no visual distortions and high processing rate . BICUBIC is apparently better in quality but the processing rate is relatively low – 78fps.
- For down-scaling the results are different
SWS_BILINEAR is not best solution for down-scaling, the best solution is SWS_AREA , no visual differences and high processing rate.
Notice, in the paper “Comparison gallery of image scaling algorithms” bi-cubic method seems a good, although and not the best.
How Perform Scaling with ffmpeg
1) Decode and scale with Lanczos method to the resolution 352×288, output is stored in y4m raw video format
ffmpeg -i crowd.h264 -pix_fmt yuv420p -vsync 0 -s 352×288 -sws_flags lanczos -y crowd_cif.y4m
here, ‘-vsync 0’ is necessary, otherwise ffmpeg might discard frames
Note: instead of Lanczos technique you can choose:
‘-sws_flags bilinear’ , ‘-sws_flags bicubic’, ‘-sws_flags neighbor’ (the simplest method), ‘-sws_flags area’ , ‘-sws_flags spline’ etc.
Scaling with JSVM DownConvertStatic.exe
The repository https://vcgit.hhi.fraunhofer.de/jvet/jsvm.git contains JSVM (scalable h264) codec plus several tools. One of the tools is DownConvertStatic.exe – scaler of yuv files.
To build JSVM reference codec
1) clone JSVM
git clone https://vcgit.hhi.fraunhofer.de/jvet/jsvm.git
2) go to the folder jsvm\JSVM\H264Extension\build\windows and open H264AVCVideoEncDec_vc10.sln (if you have more advanced version of Visual Studio make retarget)
3) Choose Release/x64 and built the solution (some projects apparently would fail to be built).
4) exe-files are created at the folder jsvm\bin64
Usage:
DownConvertStatic input-width input-height input-yuv output-width output-height output-yuv method
method – 0 standard scaling method, 1 for dyadic scaling
Example: downscale 1920×1080 to 352×288
DownConvertStatic.exe 1920 1080 crowd_1920x1080_50fps.yuv 352 288 crowd_cif.yuv 0
Resampler
500 frames converted
in 9.64 seconds => 19 ms/frame
Note:
Upscaling interpolation-based methods (bilinear, bicubic, and Lanczos etc.), which are available in ffmpeg tool, update pixel magnitudes by weighted averaging of neighboring pixel values from a low-resolution original frame. These algorithms upscale pretty good smooth regions due to local similarities but they fail at abrupt spatial discontinuities (e.g. edges).
There are a class of upscaling methods, called “single-image or video super-resolution”, which takes into account edges and high-detailed areas. The goal of these super-resolution methods is to magnify an image while maintaining the sharpness of the edges and the details in the image.
23+ years’ programming and theoretical experience in the computer science fields such as video compression, media streaming and artificial intelligence (co-author of several papers and patents).
the author is looking for new job, my resume
I would like to thank you for the efforts youve put in penning this site. I really hope to view the same high-grade content by you later on as well. In fact, your creative writing abilities has inspired me to get my own website now 😉
Absolutely written content, Really enjoyed examining.
I went over this website and I conceive you have a lot of fantastic info , saved to favorites (:.
Well I truly enjoyed studying it. This tip provided by you is very practical for good planning.
You made some decent points there. I looked on the internet for the subject matter and found most guys will consent with your website.
pls. look at this page: https://en.wikipedia.org/wiki/Comparison_gallery_of_image_scaling_algorithms
I really appreciate this post. I’ve been looking all over for this! Thank goodness I found it on Bing. You have made my day! Thx again!
Only wanna comment on few general things, The website design is perfect, the articles is really wonderful : D.
very nice put up, i definitely love this website, carry on it
Very interesting information!Perfect just what I was searching for!
magnificent points altogether, you simply gained a brand new reader. What would you recommend in regards to your post that you made a few days ago? Any positive?