views:

56

answers:

2

Hey,

I am developing a piece of software that records video from a live source to WMV files (using WMV1 compression).

I am attempting to provide a rough estimate of the recording time remaining, based on the space left on the storage hard drive. I cannot simply base the output file size on the bit-rate of the codec, unfortunately, since the video compression means that the output size varies wildly according to the complexity of the image.

Any thoughts?

FYI I am using C# and DirectShow.

+1  A: 

This is a really good question. Unfortunately, there's no sure-fire way of doing this, but you have two basic options:

  1. Calculate ahead of time the average space used per given time unit at a given bitrate, based on experimentation or data from the codec provider.
  2. Start by using technique #1, but then also create a mechanism for determining the average space being used during a given recording, by dividing the space currently in use by the file from the total recording time. Then, use this metric to determine the amount of time remaining.

Option 1 is a quick and easy way to get started. Option 2 requires a bit more programming, but your estimate will be substantially more accurate. After all, compression in these instances is based on what you are recording. Recording a solid green screen for 1 hour takes substantially less disk than recording a moving background with continuously changing foreground, or maybe a fractal sequence. There's no way to do a good estimate ahead of time.

David Pfeffer
A: 

You can only estimate future compression size by using the compression rates received in the last x seconds. Dont have it too large a value, or too small.

Too small a time period will mean that the time could wildly change [depending on the amount of motion in the video] and too long a time will mean the time will be very unaccurate.

I'd guess a time of 30 seconds could provide a reasonable degree of accuracy

Kurru