Pregunta

Estoy desarrollando una pieza de software que graba video de una fuente en vivo a archivos WMV (usando la compresión WMV1).

Estoy intentando proporcionar una estimación aproximada del tiempo de grabación restante, según el espacio que queda en el disco duro de almacenamiento. Desafortunadamente, no puedo basar simplemente el tamaño del archivo de salida en la tasa de bits del códec, ya que la compresión de video significa que el tamaño de salida varía enormemente según la complejidad de la imagen.

¿Alguna idea?

FYI Estoy usando C# y DirectShow.

¿Fue útil?

Solución

Esta es una muy buena pregunta. Desafortunadamente, no hay una forma segura de hacer esto, pero tiene dos opciones básicas:

  1. Calcule con anticipación el espacio promedio utilizado por unidad de tiempo dada en una tasa de bits dada, según la experimentación o los datos del proveedor del códec.
  2. Comience utilizando la técnica #1, pero luego también cree un mecanismo para determinar el espacio promedio que se usa durante una grabación determinada, dividiendo el espacio actualmente en uso por el archivo desde el tiempo de grabación total. Luego, use esta métrica para determinar la cantidad de tiempo restante.

La opción 1 es una forma rápida y fácil de comenzar. La opción 2 requiere un poco más de programación, pero su estimación será sustancialmente más precisa. Después de todo, la compresión en estos casos se basa en lo que está grabando. La grabación de una pantalla verde sólida durante 1 hora requiere sustancialmente menos disco que grabar un fondo en movimiento con un primer plano continuo, o tal vez una secuencia fractal. No hay forma de hacer una buena estimación con anticipación.

Otros consejos

Solo puede estimar el tamaño de compresión futuro utilizando las tasas de compresión recibidas en los últimos x segundos. No lo tenga demasiado grande, o demasiado pequeño.

Un período de tiempo demasiado pequeño significará que el tiempo podría cambiar salvajemente [dependiendo de la cantidad de movimiento en el video] y un tiempo demasiado largo significará que el tiempo será muy inexacto.

Supongo que un tiempo de 30 segundos podría proporcionar un grado razonable de precisión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top