Consider a small time period T over which one wishes to restrict the data throughput: VBV data throughput = (T + VBV buffer duration) * VBV maximum bit rate VBV buffer duration = VBV buffer size / VBV maximum bit rate VBV data throughput = (T + VBV buffer size / VBV maximum bit rate) * VBV maximum bit rate = T * VBV maximum bit rate + VBV buffer size One may prefer to consider the average data rate over time T (i.e. a bit rate spike averaged over duration T): 'Spike' bit rate averaged over time T = VBV data throughput / T = VBV maximum bit rate + VBV buffer size / T Beyond these mathematics, to find the range of VBV buffer sizes and VBV maximum bit rates that constrain the bit rate spikes per one's requirements: VBV buffer duration = VBV buffer size / VBV maximum bit rate > frames / frame rate VBV buffer size * frame rate / frames > VBV maximum bit rate > average bit rate Mathieu Monnier advises that frames be at least 5 but x264 enforces a minimum of 3. The minimum VBV buffer duration is empirically derived from the relative size of the largest frames (I-frames) to the average frame size. Mathieu claims that I-frames are ~5x the average size of a P-frame. $spike_rate = $maxrate + $bufsize / $spike_dur; --- 1 $bufsize * $fps / $frames > $maxrate > $abr; --- 2 To find the lower bounds: $maxrate > $abr; from 2 $bufsize * $fps / $frames > $abr; => $bufsize > $abr * $frames / $fps; from 2 To find upper bounds: $maxrate = $spike_rate - $bufsize / $spike_dur; from 1 but $maxrate > $abr => $spike_rate - $bufsize / $spike_dur > $abr; => $bufsize < ($spike_rate - $abr) * $spike_dur; Similarly $bufsize * $fps / $frames > $maxrate; from 2 => $maxrate < ($spike_rate - $abr) * $spike_dur * $fps / $frames; $maxrate_lower = $abr; $bufsize_lower = $abr * $frames / $fps; $maxrate_upper = ($spike_rate - $abr) * $spike_dur * $fps / $frames; $bufsize_upper = ($spike_rate - $abr) * $spike_dur; Examples: - Apple TV ABR = 3 Mbps T = 0.5 s 'Spike' rate = 7.5 Mbps VBV maximum bit rate = VBV data throughput / T - VBV buffer size / T = 7.5 Mbps - VBV buffer size / 0.5 > 3 Mbps => (7.5 Mbps - 3 Mbps) * 0.5 = 2.25 Mb > VBV buffer size 2.25 Mb * frame rate / frames = 2.25 Mb * 24 / 5 = 10.8 Mbps > VBV buffer size * frame rate / frames > VBV maximum bit rate > 3 Mbps As an example, try taking VBV maximum bit rate as 5 Mbps, then: VBV buffer size = (7.5 Mbps - 5 Mbps) * 0.5 s = 1.25 Mb 10.8 Mbps > 1.25 Mb * 24 fps / 5 frames = 6 Mbps > 5 Mbps therefore a valid solution - iPod 640x480 ABR = 1.5 Mbps T = 0.5 s 'Spike' = 2.5 Mbps VBV maximum bit rate = VBV data throughput / T - VBV buffer size / T = 2.5 Mbps - VBV buffer size / 0.5 > 1.5 Mbps (2.5 Mbps - 1.5 Mbps) * 0.5 s = 0.5 Mb > VBV buffer size 0.5 Mb * frame rate / frames > VBV buffer size * frame rate / frames > VBV maximum bit rate > 1.5 Mb 0.5 Mb * frame rate / frames > VBV buffer size * frame rate / frames > 2.5 Mbps - VBV buffer size / 0.5 s > 1.5 Mbps Try VBV buffer size = 0.5 Mb, then: