Video és hanganyagok hossza (GStreamer)

Fórumok

Sziasztok!

Videók és hangfelvételek hosszát szeretném megállapítani. Ezt a GStreamer segítségével próbálom megoldani.
A dokumentációban található "Hello world" lejátssza a paraméterül kapott fájlt (http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/ch…). Próbaképpen ennek a fájlnak a hosszát akartam kiíratni. Erre ezt találtam: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/ch….

A "Hello world"-be a következő sorokat írtam:


GstFormat fmt = GST_FORMAT_TIME;
gint64 len;
	
if(gst_element_query_duration(pipeline, &fmt, &len))
	g_print("Time: %" GST_TIME_FORMAT, GST_TIME_ARGS (len));
else
	g_print("hiba\n");

A probléma az, hogy a gst_element_query_duration() fv. hamis értékkel tér vissza.
Több helyre is beszúrtam a kódrészletet, de semmi változás.

Van javaslatotok a probléma megoldására?
Előre is köszönöm a válaszokat.

Hozzászólások

Bármely más megoldás is érdekel videók hosszának megállapítására.

Köszi! Túlbonyolítottam a dolgot, ezzel egyszerűbb lesz.

Viszont több helyen is írnak arról, hogy nem pontos, én sem tudom, hogy a 6081.84-ból hogyan jön ki 1 perc 36 mp.
Egyik levelező listán a midentify helyett az mmpython használatát javasolják, de ez az időtartamról nem mond semmit.

Nem tudom...

Van egy big_buck_bunny_480p_stereo.ogg nevu file.
A midentify idevago sora szerint:


ID_LENGTH=38036.83

A filmbe belenezve, es az OSD-t lekerve ez jon:


0:00:25 / 10:33:56

Ebbol nekunk a masodik ertek az erdekes, az elso folyamatosan no ;-)


$ python
Python 2.5.2 (r252:60911, Aug 25 2008, 19:48:12) 
[GCC 4.1.2 (Gentoo 4.1.2 p1.1)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 10*3600+33*60+56
38036

Lehet koveket vetni ram, lusta vagyok a bc-vel kinlodni.
Vagyis azt kaptuk, hogy masodpercre pontos az OSD, a midentify viszont szazadmasodpercre pontos kijelzest ad.

A midentify az mplayer csomag resze, igy minden idoinformacio onnan szarmazik.

--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

na most mint a kimenetbol is latszik (10 ora hosszu film), nem mindig lehet pontosan tudni a film/mp3 hosszat vegigparseolas nelkul. trukkosen, a megfelelo opciokkal dekodolas nelkul amugy lehet, hogy vegig lehet parseoltatni az mplayerrel, es megnezni a vegen a film hosszat.

- Use the Source Luke ! -

Nyilvan egy streaming fajlnal nem lehet tudni a hosszt, hiszen a vegtelen nem abrazolhato szammal, ott mindig fals erteket kapnal.

A pelda amugy igen, kivetelesen rossz volt, mert a film nem 10 oras, csak 10-20-30 perces, valoszinu a fajl hibas. Ezt sajnos semmilyen libbel nem tudnad elkerulni, a hibas fajlok hosszat semmi nem kezeli.

De lassunk egy masik fajlt:


$ midentify STS-124-liftoff.avi | grep LENGTH
ID_LENGTH=2042.00

Az OSD-bol tudom megint, h a film 0:34:02 hosszu


>>> 34*60+2
2042

Az OSD kivetelesen szazadmasodpercre pontos volt.

--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

a midentify egy shell script, ami meghivja ay mplayer-t a -identify opcioval.

Es szerintem nem a file hibas, hanem az mplayer indulaskor nyilvan nem megy el az utolso ogg pagehez, hogy megnezze a timestampjet - innen tudna pontosan milyen hosszu a film, de o csak gondolom a bitratabol becsuli. De ilyen esetben vegig lehet menni mplayerrel a fileon (mplayer -vo null -lavdopts skipframe=all -ao dummy file.mpg), es kivonni egymasbol az elso es az utolso idot amit kiir. Ez annyiban nem idealis megoldas, hogy gyorsabban is el lehetne jutni sok esetben az utolso timestampig, de pl. bizonyos dvd-rol leszedett mpeg-eknel a vegigparseolas az egyetlen megoldas, mert ott menet kozben is elofordul, hogy nullazodik az ido.

- Use the Source Luke ! -