Estoy leyendo un poco sobre I-frames y sus contrapartes, P-frames y B-frames. Entiendo el uso. Los fotogramas I son la clave para la compresión y los siguientes fotogramas P y B pueden utilizar los datos de los fotogramas I para ahorrar bits.
Sin embargo, lo que me parecería interesante es saber cómo determina el codificador qué fotogramas deben ser fotogramas I y cuáles deben ser P y B y extraer sus datos. ¿Cómo decide el codificador qué fotogramas serán fotogramas I?
Pensamientos secundarios (no tiene que responder, pero estos son interesantes y útiles para mí en el futuro): ¿Son los fotogramas I más fáciles, más rápidos, de encontrar y extraer que extraer cada 30 fotogramas? Si un video es una presentación de diapositivas con audio y sin animaciones de diapositivas, ¿es probable que los fotogramas I coincidan con los cambios de diapositivas? ¿Sería mejor la compresión en un video hecho a partir de imágenes de diapositivas en lugar de las mismas imágenes tomadas a través de una transmisión en tiempo real?
Este es un tema complejo, con el algoritmo exacto único para cada codificador.
A continuación se muestra una explicación del pseudocódigo de un desarrollador x264. Los fotogramas B no se tienen en cuenta, pero la lógica básica debería ser similar.
encode current frame as (a really fast approximation of) a P-frame and an I-frame.
if ((distance from previous keyframe) > keyint) then
set IDR-frame
else if (1 - (bit size of P-frame) / (bit size of I-frame) < (scenecut / 100) * (distance from previous keyframe) / keyint) then
if ((distance from previous keyframe) >= minkeyint) then
set IDR-frame
else
set I-frame
else
set P-frame
encode frame for real.
scenecut
es el valor umbral de cambio de escena. 0
significa que el cuadro actual es idéntico al cuadro anterior y 100
significa que es completamente diferente.
keyint
es la distancia máxima permitida entre dos fotogramas clave; minkeyint
es el mínimo.
IDR
Los fotogramas (actualización instantánea del decodificador) son fotogramas clave tales que ningún fotograma futuro requiere hacer referencia a un fotograma anterior al fotograma IDR para la decodificación. No es necesariamente cierto para I-frames simples.
usuario24601
jim mack
puntapié
gian