Pergunta

Estou desenvolvendo um software que registra o vídeo de uma fonte ao vivo para arquivos WMV (usando compactação WMV1).

Estou tentando fornecer uma estimativa aproximada do tempo de gravação restante, com base no espaço deixado no disco rígido de armazenamento. Não posso simplesmente basear o tamanho do arquivo de saída na taxa de bit do codec, infelizmente, pois a compactação de vídeo significa que o tamanho da saída varia muito de acordo com a complexidade da imagem.

Alguma ideia?

Para sua informação, estou usando C# e DirectShow.

Foi útil?

Solução

Esta é uma pergunta muito boa. Infelizmente, não há uma maneira segura de fazer isso, mas você tem duas opções básicas:

  1. Calcule com antecedência o espaço médio usado por determinada unidade de tempo em uma determinada taxa de bits, com base em experimentação ou dados do provedor do codec.
  2. Comece usando a técnica nº 1, mas também crie um mecanismo para determinar o espaço médio que está sendo usado durante uma determinada gravação, dividindo o espaço atualmente em uso pelo arquivo a partir do tempo total de gravação. Em seguida, use essa métrica para determinar a quantidade de tempo restante.

A opção 1 é uma maneira rápida e fácil de começar. A opção 2 requer um pouco mais de programação, mas sua estimativa será substancialmente mais precisa. Afinal, a compactação nesses casos é baseada no que você está gravando. A gravação de uma tela verde sólida por 1 hora leva substancialmente menos disco do que a gravação de um plano de fundo em movimento com o primeiro plano em primeiro plano, ou talvez uma sequência fractal. Não há como fazer uma boa estimativa antes do tempo.

Outras dicas

Você só pode estimar o tamanho futuro da compressão usando as taxas de compressão recebidas nos últimos x segundos. Não tenha um valor muito grande, ou muito pequeno.

Um período de tempo muito pequeno significa que o tempo pode mudar muito [dependendo da quantidade de movimento no vídeo] e muito tempo significará que o tempo será muito não prejudicial.

Eu acho que um tempo de 30 segundos poderia fornecer um grau razoável de precisão

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top