Welcome to Doom9's Forum, THE in-place to be for everyone interested in DVD conversion.

Before you start posting please read the forum rules. By posting to this forum you agree to abide by the rules.

 

Go Back   Doom9's Forum > Video Encoding > New and alternative video codecs
Register FAQ Calendar Today's Posts Search

Reply
 
Thread Tools Search this Thread Display Modes
Old 26th April 2016, 19:00   #1  |  Link
Blue_MiSfit
Derek Prestegard IRL
 
Blue_MiSfit's Avatar
 
Join Date: Nov 2003
Location: Los Angeles
Posts: 5,989
Living with VP9

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?
Blue_MiSfit is offline   Reply With Quote
Old 26th April 2016, 21:24   #2  |  Link
mandarinka
Registered User
 
mandarinka's Avatar
 
Join Date: Jan 2007
Posts: 729
The terrible rate control is a known thing. AFAIK there is no solution.

Supposedly the main user of libvpx VP9 encoding is youtube and I heard that they rolled some custom override hack that completely bypasses the upstream rate control. So that probably contributes to this defect not being addressed.
mandarinka is offline   Reply With Quote
Old 4th May 2016, 00:39   #3  |  Link
Motenai Yoda
Registered User
 
Motenai Yoda's Avatar
 
Join Date: Jan 2010
Posts: 709
ffmpeg should permitt to override the rc too with
-rc_override and -rc_eq
Code:
-rc_override[:stream_specifier] override (output,per-stream)

    Rate control override for specific intervals, formatted as "int,int,int" list separated with slashes.
Two first values are the beginning and end frame numbers, last one is quantizer to use if positive,
or quality factor if negative.

rc_eq string (encoding,video)

    Set rate control equation. When computing the expression, besides the standard functions defined in the
section ’Expression Evaluation’, the following functions are available: bits2qp(bits), qp2bits(qp).
Also the following constants are available: iTex pTex tex mv fCode iCount mcVar var isI isP isB avgQP qComp
avgIITex avgPITex avgPPTex avgBPTex avgTex.
also you can try to use the constrained fixed quality/quantizer mode and set your crf and bitrate cap
Code:
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 10 -b:v 1000k -c:a libvorbis output.webm
from webmproject.org
Code:
CQ mode is a special variant of VBR. It is designed as a fire-and-forget mechanism for encoding a
large set of clips such that, as much as possible, the output stays within given quality and size constraints
across the set. CQ mode exposes an additional parameter (--cq-level), and the meaning of the --target-bitrate
parameter changes to be the “target maximum rate”.

In CQ mode the encoder will try to encode normal frames (all frames apart from key frames, golden frames
and alternative reference frames) at a quantizer / quality level of --cq-level, provided that this does not cause
the bitrate to rise above the target maximum value. Key frames, golden frames and alt ref frames may be coded
at a lower “q” value, but the minimum is still linked to the user-selected value, and in all cases --min-q
and --max-q are treated as hard limits. In practice this means that easy clips may undershoot the target
maximum bitrate, because they are constrained by the CQ level, but harder clips will be bounded by the target
maximum data rate and will increasingly revert to standard VBR behavior.

CQ mode is available for one-pass encodes, but is generally intended for two-pass. For one-pass, CQ applies
the user cq-value, but can’t adapt to a higher value if the clip is difficult.

In the two-pass variant of CQ mode there is a further refinement. If the first pass analysis suggests that a clip is
too difficult to be encoded at the user-selected --cq-level, then rather than code part of the clip at this level
and the rest at a much lower quality, it tries to pick a sustainable “auto-cq” level. Under no circumstances will
this “auto-cq” value drop below the user-selected value.
anyway try with -qmin 0 and -undershoot-pct 95

edit: seems not -rc_override nor -rc_eq works with libvpx
__________________
powered by Google Translator

Last edited by Motenai Yoda; 4th May 2016 at 15:55.
Motenai Yoda is offline   Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 12:14.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.