2010-03-13 15 views

cevap

17

İşte gstreamer'ın çözebileceği herhangi bir şeyin süresini almak için basit bir Python betiği. Gstreamer'daki tüm zamanların nanosaniye cinsinden olduğunu unutmayın.

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 

Örnekler:

$ 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

Benim için akışın toplam süresinden daha azını verir. Örneğin, 83 saniyelik bir MKV video için 880ms döndürür. Belki meta verilerle ilgili bir sorun mu var? Diğer oyuncular dosyayı doğru oynarlar ve MKV'nin kendisi de aynı gstreamer sürümüyle üretilir. – fviktor

0

Neden tekerleği yeniden icat ediyorsunuz?
Kullanım:
gst-kaşifi-1.0 dosya adı
veya
gst-kaşifi-0.10 dosya

Eklemek istediğiniz olabilir Dosya türüne bağlı olarak "| grep Süresi" uzun olabilir etiketleri önlemek için .
Video, flac ve mp3 dosyaları için yabancı etiketlerin atlatılması için bu, bunları dışarıda tutmak için grep kullanarak aldatıcı olmalıdır.
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment

İlgili konular