Jak znaleźć czas odtwarzania nośnika z gstreamerem?Jak znaleźć długość mediów z gstreamerem?
Odpowiedz
Oto prosty skrypt w języku Python, w którym można uzyskać informacje o czasie trwania dowolnej operacji dekodowania. Zauważ, że wszystkie czasy w gstreamerze są w nanosekundach.
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
Przykłady:
$ python duration.py VIDEO_TS/VTS_03_1.VOB
0:20:10.528000
$ python duration.py ~/Movies/BigBuckBunny_640x360.m4v
0:09:56.461667
patrz punkt 6.5.
http://majorsilence.com/pygtk_audio_and_video_playback_gstreamer
Unika potrzebę stworzenia rurociągu i uruchomić go ręcznie.
Czy możesz umieścić podstawowy pomysł z tego artykułu w swoim poście? Odpowiedzi dotyczące wyłącznie linków mają tendencję do gnicia w czasie. (ten link już jest 404) – ComputerDruid
Po co wynajdować koło?
Zastosowanie:
GST-odkrywca-1,0 filename
lub
GST-odkrywca-0,10 filename
W zależności od typu pliku może chcesz dodać „grep Czas trwania”, aby uniknąć znaczników, które mogą być zbyt długie .
Aby pozbyć się zbędnych znaczników dla plików wideo, flac i mp3, powinno to wystarczyć, używając grep, aby je wykluczyć.
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment
Daje mi mniej niż łączny czas trwania strumienia. Zwraca on na przykład 880 ms na 83-sekundowy film MKV. Może problem z metadanymi? Inni gracze odtwarzają plik poprawnie, a sam MKV jest produkowany przez tę samą wersję gstreamer. – fviktor