Come ffmpeg determina i singoli bitrate del stream?

Ad esempio, ho un video per cui mostra ffmpeg

   Durata: 00: 46: 43.72, avvio: 0.540000, bitrate: 2593 kb / s
     Stream # 0.0 [0x1e0]: Video: mpeg2video (Principale), yuv420p, 720x576 [PAR 16:15 DAR 4: 3], 9000 kb / s, 25 fps, 25 tbr, 90k tbn, 50 tbc
     Stream # 0.1 [0x80]: Audio: ac3, 48000 Hz, stereo, s16, 448 kb / s

La dimensione del file è di 908843008 byte, quindi il 2593 kb / s è corretto. Ma perché dice che il bitrate del stream video è di 9000 kb / s?

I flussi MPEG utilizzano tipicamente la codifica bitrate variabile per risparmiare spazio in sezioni del video che sono facili da codificare, consentendo così una maggiore qualità. FFMpeg sta riportndo il bitrate memorizzato nell'intestazione di sequenza del stream video, che è il bitrate massimo nell'integer file (o, in molti casi, il bitrate massimo che l'encoder è stato configurato per consentire – il file effettivo potrebbe non avere sezioni che utilizzano come alto un bitrate come questo). Il valore 9000kbps è tipico dei flussi MPEG2 da (o destinati a) DVD: i DVD hanno un massimo bitrate audio e video combinato di 9800kbps, pertanto è ansible ~ 500kbps per l'audio e alcuni ricambi per i pacchetti di navigazione e altri overhead.

In generale, ffmpeg utilizza le intestazioni di file per informazioni where può (quando riconosce i formati di intestazione) e, altrimenti, torna a calcolarlo dalla durata e dalla dimensione del file.

I formati wrapper (ad esempio mov, mp4) non dispongono di un proprio bitrate – il bitrate è una caratteristica dei flussi individuali – ma avrebbe una durata. ffmpeg può quindi calcolare il bitrate da file e durata.

I flussi, però, avranno un bitrate specificato nelle intestazioni di stream, in modo che possa essere letto direttamente dai metadati. Ciò significa che il bitrate può essere specificato erroneamente nell'intestazione o potrebbe essere 9000kb / s all'inizio e diminuire ad un bitrate inferiore o che il stream potrebbe essere troncato in modo che il file non sia completo, quindi le matematiche non funzionano come previsto.

Se si estrae il componente video (ad esempio: ffmpeg -i myfile.mov -vcodec copy -an testfile.m2v , l'utilizzo varia con le versioni del software), potresti essere in grado di indagare ulteriormente e di elaborare where provenga il bitrate visualizzato.