Medya oynatma süresini gstreamer ile nasıl bulurum?Gstreamer ile medya uzunluğunu nasıl bulabilirim?
cevap
İşte gstreamer'ın çözebileceği herhangi bir şeyin süresini almak için basit bir Python betiği. Gstreamer'daki tüm zamanların nanosaniye cinsinden olduğunu unutmayın.
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
Örnekler:
$ python duration.py VIDEO_TS/VTS_03_1.VOB
0:20:10.528000
$ python duration.py ~/Movies/BigBuckBunny_640x360.m4v
0:09:56.461667
bakınız Bölüm 6.5.
http://majorsilence.com/pygtk_audio_and_video_playback_gstreamer
O bir boru hattı oluşturmak ve manuel olarak çalıştırmaya gerek kalmaz.
Bu yazıdan temel fikrini yazınınıza ekleyebilir misiniz? Link sadece cevaplar zamanla çürümeye eğilimlidir. (Bu bağlantı zaten 404'tür) – ComputerDruid
Neden tekerleği yeniden icat ediyorsunuz?
Kullanım:
gst-kaşifi-1.0 dosya adı
veya
gst-kaşifi-0.10 dosya
Eklemek istediğiniz olabilir Dosya türüne bağlı olarak "| grep Süresi" uzun olabilir etiketleri önlemek için .
Video, flac ve mp3 dosyaları için yabancı etiketlerin atlatılması için bu, bunları dışarıda tutmak için grep kullanarak aldatıcı olmalıdır.
gst-discoverer-1.0 filename | grep -v Tags | grep -v ID3v2 | grep -v image | grep -v attachment
Benim için akışın toplam süresinden daha azını verir. Örneğin, 83 saniyelik bir MKV video için 880ms döndürür. Belki meta verilerle ilgili bir sorun mu var? Diğer oyuncular dosyayı doğru oynarlar ve MKV'nin kendisi de aynı gstreamer sürümüyle üretilir. – fviktor