2011-12-22 3 views
0

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

(размер в байтах * 8)/(общая скорость потока данных (аудио + видео битрейтом) * 1024)

например:

(1136992 * 8)/(7128 * 1024), который выходит 1.24617705 секунд

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

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

+1

Файлы, содержащие видео и аудио, вряд ли будут необработанными данными. Какой формат является файлом? Любое сжатие сбрасывает ваши расчеты. –

ответ

0

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

0

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

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

1

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

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

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

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

Смежные вопросы