Вопрос

Я разрабатываю кусок программного обеспечения, которая записывает видео из живого источника в файлы WMV (с помощью сжатия WMV1).

Я пытаюсь дать приблизительную оценку оставшегося времени записи, основываясь на пространстве, оставленном на жестком диске хранения. Я не могу просто основывать размер выходного файла на сочетной степени кодека, к сожалению, поскольку сжатие видео означает, что выходной размер дико варьируется в зависимости от сложности изображения.

Какие-нибудь мысли?

К вашему сведению я использую C# и DirectShow.

Это было полезно?

Решение

Это действительно хороший вопрос. К сожалению, нет никакого пларочного способа сделать это, но у вас есть два основных варианта:

  1. Рассчитайте заранее, среднее пространство, используемое за заданную единицу времени на данном битрейте, на основе экспериментов или данных поставщика кодека.
  2. Начните с использования методики № 1, но затем также создайте механизм для определения среднего пространства, используемого во время данной записи, путем разделения пространства, используемого в настоящее время, файлом от общего времени записи. Затем используйте этот показатель, чтобы определить время оставшегося времени.

Вариант 1 - быстрый и простой способ начать. Вариант 2 требует немного большего программирования, но ваша оценка будет существенно более точной. В конце концов, сжатие в этих случаях основано на том, что вы записываете. Запись сплошного зеленого экрана в течение 1 часа требует значительно меньше диска, чем запись движущегося фона с непрерывным изменением переднего плана, или, возможно, фрактальной последовательности. Нет возможности сделать хорошую оценку заранее.

Другие советы

Вы можете оценить будущий размер сжатия только с помощью скоростей сжатия, полученных за последние x секунд. Не иметь его слишком большого значения или слишком маленького.

Слишком небольшой период времени будет означать, что время может сильно измениться [в зависимости от количества движения в видео], и слишком долго будет означать, что время будет очень нечетным.

Я предполагаю, что время 30 секунд может дать разумную степень точности

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top