如何用gstreamer获取媒体长度?

14 投票
4 回答
7737 浏览
提问于 2025-04-15 20:24

我该如何用gstreamer找到媒体的播放时间?

4 个回答

1

请查看第6.5节。

http://majorsilence.com/pygtk_audio_and_video_playback_gstreamer

这样做可以省去手动创建和运行一个处理流程的麻烦。

2

为什么要重复造轮子呢?
你可以使用以下命令:
gst-discoverer-1.0 文件名
或者
gst-discoverer-0.10 文件名

根据文件类型,你可能想加上“ | grep Duration”,这样可以避免显示那些可能很长的标签。
如果你想去掉视频、flac和mp3文件中多余的标签,可以用grep来排除它们,这样就可以了。
gst-discoverer-1.0 文件名 | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment

19

这里有一个简单的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

撰写回答