Найти разрешение видео и продолжительность видео удаленного медиафайла - PullRequest
1 голос
/ 22 января 2012

Я хочу написать программу, которая может найти некоторую метаинформацию медиафайла. Меня интересуют популярные форматы видео, такие как avi, mkv, mp4, mov (могут быть и другие популярные). Я хочу в основном получить:

  • Размер видео (720, 1080, 360 и т. Д.)
  • Общее время выполнения видео (может быть не очень точное)
  • Количество аудиопотоков
  • Название видеокодека
  • Название аудиокодека

Уже есть mediainfo , но в моей программе я хочу получить информацию об удаленном файле, к которой можно получить доступ через ftp, http, samba; или даже торрент (есть некоторые торрент-решения, которые позволяют читать еще не загруженный файл).

Библиотека MediaInfo не поддерживает формат samba (smb: //) и mkv (для среды выполнения).

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

Эта информация содержится в первых 1, 10 или 100 килобайтах файла? Это с предсказуемым смещением, если я знаю имя контейнера и общий размер файла?

PS: Платформа Linux, язык C / C ++

Ответы [ 3 ]

2 голосов
/ 22 февраля 2012

Нет, вы не можете предсказуемо найти искомую информацию из «первых X байтов» файла (для любого известного значения X, меньшего, чем полный размер медиа-файла). Некоторые контейнеры перечисляют всю эту информацию в заголовке. Некоторые (например, QuickTime) имеют эти метаданные в конце файла со смещением метаданных в заголовке. Некоторые (например, AVI) списки смещают потоки в заголовке, с конкретной информацией о потоке в заголовке каждого потока (то есть разбросаны по всему файлу). А некоторые используют разные стили в зависимости от метода кодирования (например, быстрая потоковая передача или кодирование на лету).

Тем не менее, теоретически возможно сделать то, что вы ищете, запросив соответствующие байтовые диапазоны. Например, запросите первые 10 Кбайт или около того, и на основе типа контейнера проанализируйте, какие другие диапазоны байтов вам нужно будет прочитать / проанализировать, чтобы найти метаданные. Но это был бы довольно большой проект.

1 голос
/ 22 января 2012

Зависит от формата контейнера, avi / mp4 / mkv

Посмотрите на источник до http://mediainfo.sourceforge.net/en

0 голосов
/ 22 января 2012

В общем случае просто невозможно сказать. Все зависит от формата контейнера удаленного файла, и даже в этом случае вам, вероятно, придется прыгать через множество циклов, чтобы получить все эти метаданные даже из 50% файлов. Ограничьте себя носителями ISO (QuickTime, MPEG-4, 3GPP и т. Д.), И вы можете увеличить этот показатель, но даже тогда это неочевидно.

...