[FFmpeg-user] Encoding multiple files for adaptive bit rate streaming using RTMP and HLS

Werner Robitza werner.robitza at gmail.com
Tue May 12 13:50:22 CEST 2015

On Tue, May 12, 2015 at 11:47 AM, Henk D. Schoneveld <belcampo at zonnet.nl> wrote:
> Would you be so kind to explain why to NOT use the crf option?

CRF is essentially a constant quality mode, which results in variable
bitrate depending on the spatiotemporal complexity of the scenes. For
streaming purposes, this is not ideal, since your adaptive streaming
client assumes that a segment encoded at a target bitrate of x kBit/s
is can actually be transmitted over a link with x kBit/s throughput.

If you want to make sure you're not exceeding a certain bandwidth, the
VBV encoding mode is probably the best option (see also
https://trac.ffmpeg.org/wiki/EncodingForStreamingSites). Therefore,
set -maxrate and -bufsize.

A single-pass constant bitrate will not generally be more stable than
CRF, but it should be less spikey.

See this chart for a comparison between CRF, single-pass CBR and
single-pass CBR with -maxrate set: http://i.imgur.com/GxTW4Jy.png
y-axis is the frame size, moving average of 120 frames.

More information about the ffmpeg-user mailing list