I'm not sure if I ever posted this, but some might find it interesting. I rendered two videos with Voukoder using the default settings. One video was a static shot while the other included very much subject and camera movement.
CRF (or QP called Constant Quantizer when using GPU support) encoding gives the necessary bitrate to preserve the desired quality set, the more details and movement, the higher the necessary bitrate.
This is the main advantage of CRF encoding, the only disadvantage is that with a too high quality setting (a lower CRF number) those peak bitrates can become too high in very detailed/moving scenes, which can cause stuttering play on players/TVs who can't handle those high peakbitrates. Even the default setting of Voukoder (CRF=23) sometimes generates peak bitrates far beyond what my UHDTV can handle (Max 100Mbps). Therefore for 4k content, I prefer to use a CRF setting of 25-27.
Indeed, the peak bit rate for UHD can be higher that the 100 Mbps ethernet port on some (most) TVs in the wild if no rate control or limits are placed on the render.
Not sure what the BitrateViewer tells us about bitrate vrs complexity. Granted a still image made into a video only needs one frame compressed at the beginning followed by a command of some sort to repeat that frame for the length of the video. Compared to moving images that need every frame compressed. But I also know that hevc captures and reproduces complexity better than avc and I don't see that reflected when I compare... in fact the lower bitrate renders show higher bitrate peaks. Even higher than the original on the right ride of the chart. Like your crf26 render. Guess I just don't get it. Here's what I got doing a bunch of renders with Voukoder and MainConcept with both avc and hevc... maybe @fifonik can help us understand:
BitrateViewer doesn't tell us much about HEVC renders.
I've resisted using it much because I can't share the files with everyone. AVC (h.264/x.264) are more broadly playable when I give a file to someone.
@Howard-Vigorita said: "Granted a still image made into a video only needs one frame compressed at the beginning followed by a command of some sort to repeat that frame for the length of the video. Compared to moving images that need every frame compressed."
You appear to have the endpoint concept down. It's the variations of complexity between the limits that are the problem.
The average bitrate of even a complex motion-in-detail x264 can be tamed by adjusting the vbv-bufsize and vbv-maxrate ratio. Very useful for streaming on social media with their peak bitrate penalties.
Indeed, the peak bit rate for UHD can be higher that the 100 Mbps ethernet port on some (most) TVs in the wild if no rate control or limits are placed on the render.
@john_dennis I forgot to tell that my sample was recorded in a flat profile, so it needs level/color correction, when done the peak bitrates for that sample are even much higher:
The average bitrate of even a complex motion-in-detail x264 can be tamed by adjusting the vbv-bufsize and vbv-maxrate ratio. Very useful for streaming on social media with their peak bitrate penalties.
@mark-y Indeed very usefull, could you tell how you do exactly?
Just go to Voukoder options and on Video tab you can specify Max Bitrate as well as many other options:
That's what I also thought, but just changing max bitrate to, for example 80000kbps, didn't change anything in the render, still get peaks far above 100Mbps. So that's why I asked for more details.
But I also know that hevc captures and reproduces complexity better than avc
That is not my understanding.
HEVC, under optimal circumstances, can approach the motion complexity metrics of AVC, doing so at a lower average bitrate.
HEVC was designed to provide an improvement in bandwidth (file size) over AVC, and at "about" the same quality.
However, in an era of internet speculation that often ignores the lessons of physics, social media is just full of these theories, which may actually be embraced and promoted by the majority of hobbyists and gamers.
Thanks to @mark-y for mentioning vbv-bufsize and vbv-maxrate.
Now, back to the woodshed for me.
Welcome. In the age of video for social media over constrained server bandwidth, having the ability to tame the highs and lows a bit is essential, if you're doing anything other than slides or talking heads.
@john_dennis Thank you for finding that rich article. Got it bookmarked and I will enjoy reading it over a couple of brews this evening, which promises to be chilly.
The average bitrate of even a complex motion-in-detail x264 can be tamed by adjusting the vbv-bufsize and vbv-maxrate ratio. Very useful for streaming on social media with their peak bitrate penalties.
@mark-y Indeed very usefull, could you tell how you do exactly?
Note the spelling of "bufsize." Note that the average bitrates for each example are identical, about 23Mbps.
Practical settings for streaming delivery are somewhere in between those extremes I used for illustration. A good starting point is to set vbv-bufsize at 2x your vbv-maxrate for moderate bandwidth comperssion.
It's fun stuff, but pretty obscure to most home users.
BitrateViewer doesn't tell us much about HEVC renders.
This is exactly the reason I created the FFBitrateViewer :)
@fifonik And that's why I hunted it down. If the program @john_dennis is using is the one I think it is, it's over a decade old and doesn't support directly reading any of the newer formats that came out since then. Like av1, hevc, or vp9. Using ffprobe to read the input files is brilliant because your version will continue working as long as ffprobe gets updated.
But I don't understand the significance of the bitrate chart as it pertains to complexity, particularly when the re-render rate exceeds the original. One possibility is that the render process might be spitting out garbage or redundant pixels when that happens. I don't like crf but I doubt its that bad, considering its overall bitrate is generally too low in my opinion. More likely the program might be comparing the bitrates of the raw clips as they come off the disk. Unless it's an intra clip, token-tables don't come with every frame. Might explain the periodic spikes. And if there's a long gop with only one table at the end, there would be a big bump on the bitrate there. If that's what's happening, I'd suggest it would be more meaningful to have an option to compare bitrates of fully decoded frames. I can't think of any other possible alternative explanations.
BTW, I've just released a new version of the FFBitrateViewer. Most noticeable changes: "per GOP" view and a few issues fixed (including the negative bitrate caused by int overflow).
I installed your bit rate viewer and tried a few runs. Here is a graph of @3POINT's file showing the effects of panning and water drops pouring over the edge of the fountain.
In the frame-based graph one can also see the I-frames every 25 frames. There are no B-frames in this encode.
General
Complete name : C:\Users\John\Desktop\Render\Vegas 22 Voukoder.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 128 MiB
Duration : 18 s 200 ms
Overall bit rate : 59.2 Mb/s
Frame rate : 50.000 FPS
Writing application : Voukoder (VEGAS)
Video
ID : 1
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L5.2
Format settings : CABAC / 3 Ref Frames
Format settings, CABAC : Yes
Format settings, Reference frames : 3 frames
Format settings, GOP : M=1, N=25
Codec ID : avc1
Codec ID/Info : Advanced Video Coding
Duration : 18 s 160 ms
Bit rate : 58.9 Mb/s
Width : 3 840 pixels
Height : 2 160 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 50.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.142
Stream size : 128 MiB (99%)
Writing library : x264 core 164
Encoding settings : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113
/ me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1
/ trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=48
/ lookahead_threads=8 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0
/ constrained_intra=0 / bframes=0 / weightp=2 / keyint=25 / keyint_min=3 / scenecut=40
/ intra_refresh=0 / rc_lookahead=25 / rc=crf / mbtree=1 / crf=23.0 / qcomp=0.60 / qpmin=0 / qpmax=69
/ qpstep=4 / ip_ratio=1.40 / aq=1:1.00
Codec configuration box : avcC
Audio
ID : 2
Format : AAC LC
Format/Info : Advanced Audio Codec Low Complexity
Codec ID : mp4a-40-2
Duration : 18 s 200 ms
Source duration : 18 s 176 ms
Bit rate mode : Constant
Nominal bit rate : 329 kb/s
Maximum bit rate : 329 kb/s
Channel(s) : 2 channels
Channel layout : L R
Sampling rate : 48.0 kHz
Frame rate : 46.875 FPS (1024 SPF)
Compression mode : Lossy
Source stream size : 731 KiB (1%)
Default : Yes
Alternate group : 1