Come si trova il tempo di riproduzione del supporto con gstreamer?Come si trova la lunghezza del supporto con gstreamer?
risposta
Ecco un semplice script Python per ottenere la durata di qualsiasi cosa che gstreamer possa decodificare. Nota che tutte le volte in gstreamer sono in nanosecondi.
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
Esempi:
$ python duration.py VIDEO_TS/VTS_03_1.VOB
0:20:10.528000
$ python duration.py ~/Movies/BigBuckBunny_640x360.m4v
0:09:56.461667
Vedere la Sezione 6.5.
http://majorsilence.com/pygtk_audio_and_video_playback_gstreamer
Evita necessità di creare una pipeline ed eseguirlo manualmente.
Puoi includere l'idea di base di questo articolo nel tuo post? Le risposte al solo collegamento tendono a marcire nel tempo. (questo link è già 404) – ComputerDruid
Perché reinventare la ruota?
Usa:
GST-scopritore-1.0 filename
o
GST-scopritore-0.10 filename
A seconda del tipo di file si consiglia di aggiungere "| grep Durata" per evitare i tag che possono essere lunghi .
Per il ridimensionamento di tag estranei per file video, flac e mp3, questo dovrebbe fare il trucco usando grep per escluderli.
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment
Fornisce meno della durata totale del flusso per me. Ad esempio, restituisce 880 ms per un video MKV di 83 secondi. Forse un problema con i metadati? Altri giocatori riproducono correttamente il file e lo stesso MKV è prodotto dalla stessa versione di gstreamer. – fviktor