2010-03-13 9 views

risposta

17

Ecco un semplice script Python per ottenere la durata di qualsiasi cosa che gstreamer possa decodificare. Nota che tutte le volte in gstreamer sono in nanosecondi.

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 

Esempi:

$ 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

Fornisce meno della durata totale del flusso per me. Ad esempio, restituisce 880 ms per un video MKV di 83 secondi. Forse un problema con i metadati? Altri giocatori riproducono correttamente il file e lo stesso MKV è prodotto dalla stessa versione di gstreamer. – fviktor

0

Perché reinventare la ruota?
Usa:
GST-scopritore-1.0 filename
o
GST-scopritore-0.10 filename

A seconda del tipo di file si consiglia di aggiungere "| grep Durata" per evitare i tag che possono essere lunghi .
Per il ridimensionamento di tag estranei per file video, flac e mp3, questo dovrebbe fare il trucco usando grep per escluderli.
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment