Blue_MiSfit
26th April 2016, 19:00
Hey folks,
I'm looking to learn more about using VP9 for general purpose encoding. To that end I'm going to share what I've learned so far, and hope that others will share their experiences!
I've been working on using VP9 as an alternative to HEVC due to licensing issues and have been mostly impressed.
I'm doing 360 video encoding, which has very large frame sizes (2880x2880 to 4096x4096). At the data rates that we're targeting, AVC totally falls apart. HEVC is quite good, and VP9 is somewhere in the middle, but definitely closer to HEVC.
I've had a few issues with VP9 - namely rate control. Even with 2 pass, some clips undershoot by more than 50%. Sometimes they're transparent, and sometimes they're not. Does anyone have words of wisdom on how to improve this? Or is it just "how it is"?
Also, I've learned that by default in ffmpeg libvpx-vp9 defaults to a max keyframe interval of 9999 frames, which is ideal for compressibility but awful for usability :) I'm setting -g 250 to make it match x264 and x265.
I've also noticed that the first pass in VP9 encoding seems to be single threaded, making it very slow. The second pass, however, does thread relatively well - at least on my quad core Skylake dev box.
I'm using an x64 Zeranoe ffmpeg build on Windows, and this seems to work well, but I've noticed it includes libvpx version 1.5.0 which was released last November. There seems to be active development. Should I look into building my own libvpx?
I've found decoding performance to be excellent. At similar resolutions and frame size I've found that VP9 requires less CPU power than HEVC. This is all using LAV Filters + MadVR in MPC-HC x64 on Windows 10. For example:
*2880x2880p30 at 15 Mbps takes 10-12% CPU for me using VP9, and HEVC takes 14-15%.
*4096x4096p60 at 15 Mbps takes 50-52% CPU using VP9, and HEVC maxes out the CPU and drops frames everywhere.
Any words of wisdom?
I'm looking to learn more about using VP9 for general purpose encoding. To that end I'm going to share what I've learned so far, and hope that others will share their experiences!
I've been working on using VP9 as an alternative to HEVC due to licensing issues and have been mostly impressed.
I'm doing 360 video encoding, which has very large frame sizes (2880x2880 to 4096x4096). At the data rates that we're targeting, AVC totally falls apart. HEVC is quite good, and VP9 is somewhere in the middle, but definitely closer to HEVC.
I've had a few issues with VP9 - namely rate control. Even with 2 pass, some clips undershoot by more than 50%. Sometimes they're transparent, and sometimes they're not. Does anyone have words of wisdom on how to improve this? Or is it just "how it is"?
Also, I've learned that by default in ffmpeg libvpx-vp9 defaults to a max keyframe interval of 9999 frames, which is ideal for compressibility but awful for usability :) I'm setting -g 250 to make it match x264 and x265.
I've also noticed that the first pass in VP9 encoding seems to be single threaded, making it very slow. The second pass, however, does thread relatively well - at least on my quad core Skylake dev box.
I'm using an x64 Zeranoe ffmpeg build on Windows, and this seems to work well, but I've noticed it includes libvpx version 1.5.0 which was released last November. There seems to be active development. Should I look into building my own libvpx?
I've found decoding performance to be excellent. At similar resolutions and frame size I've found that VP9 requires less CPU power than HEVC. This is all using LAV Filters + MadVR in MPC-HC x64 on Windows 10. For example:
*2880x2880p30 at 15 Mbps takes 10-12% CPU for me using VP9, and HEVC takes 14-15%.
*4096x4096p60 at 15 Mbps takes 50-52% CPU using VP9, and HEVC maxes out the CPU and drops frames everywhere.
Any words of wisdom?