Точное количество секунд в видео - PullRequest
0 голосов
/ 23 декабря 2011

Я пытаюсь получить точный размер видео, используя следующее.

(размер в байтах * 8) / (общий битрейт (аудио + видео битрейты) * 1024)

например:

(1 136 992 * 8) / (7128 * 1024), что составляет 1,24617705 секунд

Но в прямом эфире Windows Movie Maker было сказано, что фактическая продолжительность в секундах была около 1,87 секунды . Я делаю что-то не так, или Windows Live Movie Maker отключен? Я предполагаю, что это первое.

Я использовал видео, записанное с Easycap, затем поместил его в Windows Live Movie Maker для обрезки, а затем, наконец, преобразовал в формат ogv. Так что это имеет смысл, что это будет полностью испорчено. Я не знаю, как получить доступ к заголовку метаданных видеофайла ogv, я посмотрел вокруг, но не вижу ответов.

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

Вы делите размер файла с битрейтом?Если это так, вы включаете заголовки и другие накладные расходы в свои вычисления.

Но главная причина, по которой это вычисление не работает, заключается в том, что битовые скорости не настолько точны.Подумайте об этом: если бы скорость передачи данных была точной, каждый отдельный видеокадр (и звук, который идет с ним) должен был бы быть сжат до точного того же количества байтов.Большинство компрессоров просто так не работают.(Единственным исключением является кодек DV. Поскольку DV является форматом ленты, он должен генерировать данные с постоянной скоростью.)

Думайте о скорости передачи данных больше как о среднем количестве бит, используемых в секунду.

Чтобы узнать длину видеофайла, вам нужно прочитать метаданные файла.Как это сделать, отличается от формата к формату.Для файла ogv программа oggLength кажется вам необходимой (включена в oggvideotools ).

0 голосов
/ 23 декабря 2011

Этот конкретный расчет будет работать, только если каждый кадр имеет одинаковый размер.Единственный способ это сделать, если вы используете несжатый видео и аудио поток.Эти типы файлов становятся огромными и непрактичными очень быстро, поэтому, вероятно, вы используете сжатие.В сжатых видеофайлах битрейт НЕ является гарантией, он просто средний.Кроме того, размер каждого кадра изменяется, поскольку существуют разные типы кадров.

Большинство форматов контейнеров видео (avi, ogm, mkv и т. Д.) Все включают длину файла в метаданные (как частьзаголовок).Было бы гораздо точнее просто прочитать это значение.

0 голосов
/ 23 декабря 2011

Видеофайлы часто имеют метаданные и заголовки, которые увеличивают общий размер файла.Чтобы получить надежные измерения, вам нужно будет рассчитать размер не видео / не аудио данных и вычесть их перед выполнением расчета.Не только это, но вам также придется учитывать возможную переменную скорость передачи аудио и видео данных.Как правило, это будет нелегко, если вы не смотрите на очень простой тип файла с постоянной скоростью передачи данных или вы уже глубоко знаете формат видео (или у вас уже есть библиотека, которая понимает и анализирует формат).

...