2010-03-13 10 views

Antwort

17

Hier ist ein einfaches Python-Skript, um die Dauer von allem, was Gstreamer dekodieren kann, zu erhalten. Beachten Sie, dass alle Zeiten in gstreamer in Nanosekunden sind.

duration.py:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from __future__ import division 

import sys 
import gobject 
gobject.threads_init() 
import pygst 
pygst.require("0.10") 
import gst 
d = gst.parse_launch("filesrc name=source ! decodebin2 ! fakesink") 
source = d.get_by_name("source") 
source.set_property("location", sys.argv[1]) 
d.set_state(gst.STATE_PLAYING) 
d.get_state() 
format = gst.Format(gst.FORMAT_TIME) 
duration = d.query_duration(format)[0] 
d.set_state(gst.STATE_NULL) 

import datetime 
delta = datetime.timedelta(seconds=(duration/gst.SECOND)) 
print delta 

Beispiele:

$ python duration.py VIDEO_TS/VTS_03_1.VOB 
0:20:10.528000 
$ python duration.py ~/Movies/BigBuckBunny_640x360.m4v 
0:09:56.461667 
+0

Es gibt weniger als die Gesamtdauer des Streams für mich. Bei einem MKV-Video mit 83 Sekunden werden beispielsweise 880 ms zurückgegeben. Vielleicht ein Problem mit Metadaten? Andere Spieler spielen die Datei korrekt und das MKV selbst wird von der gleichen Version von gstreamer erzeugt. – fviktor

0

Warum das Rad neu erfinden?
Verwendung:
gst-Entdecker-1.0 Dateiname
oder
gst-Entdecker-0.10 Dateiname

Je nach Dateityp, den Sie hinzufügen möchten „| grep Dauer“ die Tags zu vermeiden, die langwierig sein kann .
Zum Entfernen überflüssiger Tags für Video-, Flac- und MP3-Dateien sollte dies der Fall sein, indem grep verwendet wird, um sie auszuschließen.
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment