Как извлечь битрейт и другую статистику видеофайла с помощью Python

Я пытаюсь извлечь преобладающий битрейт видеофайла (например, файл .mkv, содержащий фильм) с регулярным интервалом выборки от 1 до 10 секунд в условиях нормального воспроизведения. Что-то вроде того, что вы можете видеть в vlc, во время воспроизведения файла в окне статистики.

Может ли кто-нибудь предложить лучший способ начальной загрузки кодирования такого анализатора? Есть ли библиотека, которая предоставляет API для такой информации, о которой знают люди? Возможно, оболочка Python для ffmpeg или аналогичный инструмент, который обрабатывает видеофайлы и может таким образом извлекать такую ​​статистику.

На самом деле я стремлюсь к файлу формата CSV, содержащему смещение в секундах и средний или фактический битрейт в КиБ/с при этом смещении в ресурсе.

Обновление:

Я собрал pyffmpeg и написал следующий шип:

import pyffmpeg

reader = pyffmpeg.FFMpegReader(False)
reader.open("/home/mark/Videos/BBB.m2ts", pyffmpeg.TS_VIDEO)
tracks=reader.get_tracks()

# Called for each frame
def obs(f):
  pass

tracks[0].set_observer(obs)
reader.run()

Но просмотр информации о кадре (f) в обратном вызове, похоже, не дает мне никаких зацепок для расчета битрейта в секунду. На самом деле расчеты битрейта в pyffmpeg измеряются для всего файла (размер файла / продолжительность), поэтому обработка в библиотеке очень поверхностна. Ясно, что его внимание сосредоточено на извлечении i-кадров и другой работе, связанной с кадрами/GOP.


person codeasone    schedule 05.10.2010    source источник


Ответы (2)


Вы должны быть в состоянии сделать это с помощью gstreamer. http://pygstdocs.berlios.de/pygst-tutorial/seeking.html есть пример простого медиаплеера. Он звонит

pos_int = self.player.query_position(gst.FORMAT_TIME, None)[0]

периодически. Все, что вам нужно сделать, это позвонить query_position() во второй раз с помощью gst.FORMAT_BYTES, выполнить простые математические операции и вуаля! Битрейт против времени.

person joeforker    schedule 05.10.2010

Что-то вроде этого:

http://code.google.com/p/pyffmpeg/

http://pymedia.org/

person jknair    schedule 05.10.2010
comment
pyffmpeg не дает мне того, что мне нужно, поскольку его обработка битрейтов поверхностна, и я не могу извлечь размеры данных для каждого кадра (P/B/I), из которых можно сделать вывод о пропускной способности данных в секунду AFAICT. - person codeasone; 05.10.2010
comment
Создание pymedia на последней версии Ubuntu было свиньей ... и pymedia не обрабатывает контейнеры m2ts или mkv, а предназначена только для обработки элементарных потоков. - person codeasone; 05.10.2010
comment
Поэтому, хотя я благодарен за наводки, они, к сожалению, не привели меня к решению. - person codeasone; 05.10.2010
comment
Я попробую ffmpeg распаковать, а затем pymedia демультиплексировать видео ES и измерить битрейт и скоро отчитаться... - person codeasone; 05.10.2010