I have recently ventured out into dealing with audio and video related coding and i have limited knowledge about neither one of them.
It happens that i have a projec
another option besides opencv or ffmpeg is maybe 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
However, this solution crashs randomly (every 100 file or so) with the current gstreamer version (on Ubuntu 12.04). And maybe you need some gstreamer plugin for working with mpg-2; I currently don't know which ones.
I am also working on a more or less large media project, which should be able to handle a large range of codecs and containers and every library we are using is more or less a mess (wrong values or instable). Maybe there is so some specialized mpg library out there.
Oh and VLC is using ffmpeg; so if you are not allowed to use ffmpeg you maybe are also not allowed to use VLC too.
I don't know any pure python implementations. But maybe the opencv bindings works for you:
import cv
cvcapture = cv.CaptureFromFile("movie.mpg")
cv.GetCaptureProperty(cvcapture,cv.CV_CAP_PROP_FRAME_COUNT)
Otherwise, maye you can use pyffmpeg. Beware: It is my experience that the frame count is often not very accurate. Opencv 2.6 works very well, but ealier versions gives sometimes just garbage.
Edit: Ah, sorry my mistake: This gives you the frame count only. For the duration: Multiply this with the frame rate:
cv.GetCaptureProperty(cvcapture,cv.CV_CAP_PROP_FPS)