¿Qué sucede cuando usa un valor CRF específico en un video x264 ya codificado?

Si hay un video h.264 y uso -crf 17, a veces obtengo una tasa de bits más baja, pero lo extraño es que la mayoría de las veces obtengo una tasa de bits más alta.

Estoy tratando de obtener esta configuración porque creo que algunos videos míos tienen una tasa de bits más alta que la necesaria y no he encontrado una manera (si es posible) de determinar cuál es la forma más apropiada de hacer esto y tal vez jugar con CRF no me ayudará en absoluto, pero me preguntaba qué sucede realmente cuando no codifica con libx264, por ejemplo, pero en realidad usa valores CRF en un archivo x264.

La tasa de bits depende de la complejidad del video. Para dos videos con la misma resolución y velocidad de fotogramas, usar el mismo CRF dará una tasa de bits más alta para el video con mayor complejidad.
Pero, ¿qué sucede realmente cuando doy crf -17 y el nuevo video es más grande que el anterior?

Respuestas (1)

Al decodificar un archivo, el decodificador intenta recrear el material de origen con la información proporcionada en el archivo. Pero no puede ser una representación 100 por ciento precisa, por lo que el decodificador crea nuevos píxeles que son estimaciones de lo que se incluyó en la fuente.

Cuando codifica por segunda vez con CRF 17, el codificador no sabe que estos nuevos píxeles fueron generados por el decodificador y no necesariamente eran fieles al material original. Pero el codificador aún hace su trabajo e intenta codificar estos nuevos valores con precisión.

Por lo tanto, gasta bits codificando píxeles que fueron descartados y recreados por la primera codificación, lo que hace que el archivo sea más grande.

La semántica de tu respuesta parece extraña. Sugiere que el codificador almacena una representación perfecta de la fuente, pero el decodificador intenta y falla en restaurar un duplicado de esa representación. En cambio, la limitación de información ocurre en la etapa de codificación, según el diseño del codificador y las restricciones de control de velocidad. Se espera que los decodificadores para los códecs modernos produzcan una salida bitexacta (los errores de redondeo pueden seguir siendo posibles debido a las limitaciones de la arquitectura, así como a la omisión del desbloqueo, etc.).
Entiendo su lógica, pero en este contexto me refiero a la salida del codificador como decodificador. Simplifiqué porque asumí que el cartel no es consciente de los matices y estaba tratando de ser más útil que preciso. La salida del decodificador es exacta en bits en todas las implementaciones. Pero mi publicación es básicamente correcta cuando se viaja de ida y vuelta entre los dominios espacial y temporal, y después de la cuantificación y los filtros de bucle, se da a entender nueva información visual que no formaba parte de la referencia.