h264 stream still high bit rate when no movement

Marianna Smidth Buschle msb at qtec.com
Mon Oct 18 17:18:54 UTC 2021


Well, that doesn't tell much.

Except that it seems you have roughly 1 key-frame per second, or 1 every 
21.5 frames, so it also seems like you don't have a fixed KF interval 
but that the encoder is dynamically adding them "as needed".

One way to reduce the bitrate is to increase the KF interval to 2-10 
seconds, since it is the frames that takes the most space. But that has 
it's disadvantages as well (buffering, seeking, HLS segment size) so you 
need to know what you are doing: is that live streaming, file saving, ...?

I'm guessing you are using x264enc? You can also play with other 
settings like the speed presets (which set a lot of the parameters). But 
keep in mind it is always a trade off between quality, bitrate and 
processing time.

Also take a look at 
https://streaminglearningcenter.com/encoding/how-to-choose-your-bitrate-control-technique.html 
which has a pretty good explanation about rate-control settings which is 
pretty much the most important thing defining the bitrate/quality. The 
example uses ffmpeg, but it is not difficult to translate to the 
gstreamer plugin version of x264.

Basically if you use CBR (constant bitrate) you don't see any difference 
in the bitrate between moving and static scenes. And everything is bound 
to the bitrate you require. Normally higher bitrate=higher quality, but 
that curve flattens at some point (and the point depends mostly on the 
scene you are streaming). Normally the worst choice, unless your network 
is very constrained.

If you use VBR (variable bitrate) you get the difference between moving 
and static, but still keep the requested average. Again it is a bit of a 
science to figure out the "correct" bitrate for the scene you have.

Or you can use one of the quality based methods. Which means your 
bitrate can vary like crazy, because the encoder will make sure to use 
as many bits as it needs to keep the quality constant. And here you have 
to fiddle with a quality parameter. Best choice for quality, but might 
be hard to stream since you don't know the bandwidth you need/have. The 
good thing is that there are also options to constrain it (set a maximum 
bitrate), so you can keep it from "exploding".

On 18.10.2021 15.38, gstreamer-devel-request at lists.freedesktop.org wrote:
> I have around 9 I frames, and 206 P frames per 10s.
> 1280x720 pixels, 25 fps
>
> Input #0, mpegts, from '/tmp/video.raw':
>    Duration: 00:00:08.60, start: 9590.882000, bitrate: 2328 kb/s
>    Program 1
>      Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuvj420p(pc, bt709, progressive), 1280x720, 25 fps, 25 tbr, 90k tbn, 180k tbc
>      Stream #0:1[0x101]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 90 kb/s

-- 
Best regards / Med venlig hilsen
“Marianna Smidth Buschle”



More information about the gstreamer-devel mailing list