2010-03-13 15 views

回答

17

下面是一個簡單的Python腳本來獲取任何gstreamer可以解碼的時間。請注意,gstreamer中的所有時間都是納秒。

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 

實例:

$ 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

它給出比我的流的總持續時間少。例如,它爲83秒的MKV視頻返回880ms。也許元數據有問題?其他玩家正確播放該文件,MKV本身由相同版本的gstreamer生成。 – fviktor 2011-11-24 01:05:24

0

爲什麼重新發明輪子?
用途:
GST-發現者-1.0文件名

GST-發現者 - 0.10名

根據您可能要添加的文件類型「| grep的持續時間」,以避免可能會很長的標籤。
爲了消除視頻,flac和mp3文件的無關標籤,這應該通過使用grep來排除它們。
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment