Как узнать длину носителя с помощью gstreamer? - PullRequest
12 голосов
/ 14 марта 2010

Как найти время воспроизведения мультимедиа с помощью gstreamer?

Ответы [ 3 ]

17 голосов
/ 14 марта 2010

Вот простой скрипт на 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
2 голосов
/ 01 апреля 2010

См. Раздел 6.5.

http://majorsilence.com/pygtk_audio_and_video_playback_gstreamer

Избегает необходимости создавать конвейер и запускать его вручную.

0 голосов
/ 24 июля 2015

Зачем изобретать велосипед?
Использование:
gst-discoverer-1.0 имя файла
или
gst-discoverer-0.10 имя файла

В зависимости от типа файла вы можете добавить «| grep Duration», чтобы избежать длинных тегов.
Для избавления от лишних тегов для видео, flac и mp3 файлов это нужно сделать, используя grep для их исключения.
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment

...