Cómo llegar a un compromiso entre la tasa de bytes, la resolución y los fps

Quiero transmitir un video en un dispositivo a pantalla completa (por lo tanto, las dimensiones de la pantalla son fijas)

¿En qué debo centrarme para ofrecer la mejor experiencia para un ancho de banda determinado? ¿Debería tener otras preocupaciones además del ancho de banda (GPU...)?

Aquí está mi entendimiento hasta ahora:

  • fps es muy sencillo en su funcionamiento. No veo una gran diferencia entre 15 fps y 30 fps o más (en comparación con los otros parámetros que puedo cambiar), pero dado que los videos se comprimen en función de los deltas de fotogramas, no estoy seguro de que limitar los fps ahorre un ancho de banda notable. Podría ahorrar la decodificación y el renderizado de la GPU, pero tampoco estoy seguro de eso: digamos que la pantalla tiene una frecuencia de actualización de 60 Hz, ¿ayudaría eso a tener un video fps de 15 frente a 30? Probablemente todavía ayude en la decodificación, pero la mayoría de los dispositivos están bien con esas tasas.

  • dimensiones (es decir, 720p, 2k...) El video se estirará o reducirá para ajustarse al tamaño de la pantalla. Para una tasa de bytes constante, ¿obtengo un resultado diferente con un 480p con una proporción de 0,1 byte/píxel/fotograma frente a un 720p con 0,04 byte/píxel/fotograma (~el mismo total)?

    • ¿Cambiaría la respuesta si el tamaño de la pantalla es de aproximadamente 480p frente a mucho más grande?
    • ¿Eso afecta la decodificación/renderización en absoluto? Supongo que decodificar porque tienes que decodificar cada píxel. No estoy seguro acerca de la representación ya que el tamaño del video mostrado es fijo.
  • Finalmente tasa de bytes. Este es el parámetro más cercano a la restricción de ancho de banda. ¿Fijar la tasa de bytes va a encontrar el mejor compromiso para ofrecer la mejor calidad, o debo cambiar otros parámetros?

    • ¿Cambiar la frecuencia de los fotogramas clave reduce el ancho de banda utilizado (mientras que tiene las desventajas de tener menos fotogramas clave como para buscar)?

(Estoy usando el codificador ffmpeg h264)

Respuestas (1)

Dado que el ancho de banda es fijo, el primer paso para maximizar la calidad es utilizar ese ancho de banda por completo, por lo que la tasa de bits debe establecerse en ese número.

La velocidad de fotogramas hará una diferencia modesta, una vez que se especifica una tasa de bits fija, ya que normalmente x264 coloca los fotogramas clave a 250 fotogramas de distancia y, por lo tanto, todos o la mayoría de los fotogramas en un segundo aleatorio son fotogramas delta, así que déjelo entre 24 y 30.

Para mantener una calidad dada, el tamaño aumenta, pero no linealmente, con la resolución. Entonces 1080p, con 2,25 veces el no. de píxeles como 720p, toma alrededor de 1,5 a 1,8 veces para mantener la misma calidad. Esta elección depende completamente de la naturaleza del contenido. Para material de acción en vivo, 480p es lo suficientemente bueno. Recuerde, hasta la llegada de la alta definición hace una década, las audiencias de la televisión estadounidense habían estado viendo feeds 480i durante décadas. Para animación 2D, con bordes nítidos, 720p puede ser una mejor opción.

Y, para una tasa de bytes fija, ¿cuál es la diferencia entre reducir la resolución, dejarla intacta y dejar que el códec decida cómo comprimir mejor la imagen?
¿Cuál es la resolución de la fuente y la resolución de la pantalla?
La fuente varía de 1080p a 4k. Estoy apuntando a dispositivos móviles, por lo que la altura es de más de 1000 px. Además, para complicar más las cosas, estoy trabajando en videos 360, por lo que lo que se muestra en la pantalla es solo una parte del video que se transmite.
El codificador no decide si reducir la resolución. Funciona con los marcos sin comprimir sin procesar que se le dan y hace lo mejor que puede dadas las restricciones que establece. Entonces, para una tasa de bits determinada, elija la resolución más baja que se vea bien en la pantalla a la que está transmitiendo.