библиотека mpeg-2 для извлечения продолжительности видео

Недавно я рискнул заняться кодированием, связанным с аудио и видео, и у меня мало знаний ни об одном из них.

Так случилось, что у меня есть проект, который сейчас работает с видео в формате mpeg-2. Есть ли какая-либо библиотека python, доступная для извлечения продолжительности самого видео mpeg-2?


person Winson    schedule 23.07.2012    source источник
comment
Вы пробовали привязки VLC для python?   -  person zenpoy    schedule 23.07.2012
comment
Спасибо @zenpoy, сейчас я изучаю привязку VLC. Если у меня возникнут проблемы, я вернусь к вам снова =3. Ценю ваши усилия в ответе на мой вопрос.   -  person Winson    schedule 23.07.2012
comment
привет @zenpoy, у меня проблема с привязкой VLC к работе на моем питоне версии 2.7. У вас есть какой-либо связанный веб-сайт, на котором есть инструкция по его установке?   -  person Winson    schedule 23.07.2012
comment
см. также родную библиотеку Python для чтения метаданных из видео?   -  person Janus Troelsen    schedule 23.02.2013


Ответы (2)


Я не знаю никаких чистых реализаций Python. Но, возможно, привязки opencv работают для вас:

import cv
cvcapture = cv.CaptureFromFile("movie.mpg")
cv.GetCaptureProperty(cvcapture,cv.CV_CAP_PROP_FRAME_COUNT)

В противном случае вы можете использовать pyffmpeg. Осторожно: по моему опыту подсчет кадров часто не очень точен. Opencv 2.6 работает очень хорошо, но более ранние версии иногда дают просто мусор.

Редактировать: Ах, извините за мою ошибку: это дает вам только количество кадров. Для продолжительности: умножьте это на частоту кадров:

cv.GetCaptureProperty(cvcapture,cv.CV_CAP_PROP_FPS)
person Kinch    schedule 23.07.2012
comment
Спасибо @kinch за ответ на мой пост, однако я уже изучил opencv, и это кажется слишком большой библиотекой для моего мини-проекта. Кажется, что библиотека для opencv занимает поразительные 2,4 ГБ, что просто слишком много для моего проекта. Кроме того, я не могу использовать ffmpeg, потому что в требованиях проекта четко указано не использовать его ›‹. В любом случае, я согласен, что обе библиотеки хорошо приняты и весьма полезны. - person Winson; 23.07.2012
comment
О да, @kinch, причина, по которой мы не используем просто количество кадров / FPS, заключается в том, что в видео есть два типа: CBR (постоянный битрейт) и VBR (переменный битрейт). В этом случае, если мы используем FameCount/FPS, это будет применимо только для CBR, но не для VBR. Нет вреда в обмене знаниями =3 - person Winson; 23.07.2012
comment
Спасибо @kinch, мне дали зеленый свет на использование FFmpeg, и это чудо работает. =3 ценю вашу помощь. - person Winson; 28.07.2012

другой вариант, кроме opencv или ffmpeg, может быть gstreamer:

import gst
from gst.pbutils import Discoverer

d = Discoverer(5000000000)
vid_info = d.discover_uri("file://<path>") # needs to be a full path
duration = vid_info.get_duration()

# convert to seconds
duration / gst.SECOND

Однако это решение случайным образом дает сбой (каждые 100 файлов или около того) с текущей версией gstreamer (в Ubuntu 12.04). И, возможно, вам нужен какой-нибудь плагин gstreamer для работы с mpg-2; В настоящее время я не знаю, какие.

Я также работаю над более или менее крупным медиа-проектом, который должен иметь возможность обрабатывать широкий спектр кодеков и контейнеров, и каждая библиотека, которую мы используем, более или менее беспорядочна (неправильные значения или нестабильна). Может быть, есть какая-то специализированная библиотека mpg.

О, и VLC использует ffmpeg; поэтому, если вам не разрешено использовать ffmpeg, возможно, вам также не разрешено использовать VLC.

person Kinch    schedule 23.07.2012