2010-03-13 10 views

Odpowiedz

17

Oto prosty skrypt w języku Python, w którym można uzyskać informacje o czasie trwania dowolnej operacji dekodowania. Zauważ, że wszystkie czasy w gstreamerze są w nanosekundach.

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 

Przykłady:

$ 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

Daje mi mniej niż łączny czas trwania strumienia. Zwraca on na przykład 880 ms na 83-sekundowy film MKV. Może problem z metadanymi? Inni gracze odtwarzają plik poprawnie, a sam MKV jest produkowany przez tę samą wersję gstreamer. – fviktor

0

Po co wynajdować koło?
Zastosowanie:
GST-odkrywca-1,0 filename
lub
GST-odkrywca-0,10 filename

W zależności od typu pliku może chcesz dodać „grep Czas trwania”, aby uniknąć znaczników, które mogą być zbyt długie .
Aby pozbyć się zbędnych znaczników dla plików wideo, flac i mp3, powinno to wystarczyć, używając grep, aby je wykluczyć.
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment