Video és hanganyagok hossza (GStreamer)

 ( landras | 2008. augusztus 11., hétfő - 15:30 )

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/chapter-helloworld.html#section-helloworld). 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/chapter-queryevents.html#section-querying.

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ás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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

midentify es felparsolod a kimenetet.
--

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

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 ! -

Konkrétan egy videót találtam, melynek a hosszát nem pontosan mondta meg, mégpedig az Ubuntuban található Examples/Experience ubuntu.ogg.
Mivel más videóval nincs probléma, így a midentify-nél maradtam.

Ogg-gal vannak nekem is problemaim, de massal (avi, mpeg, mp3) jol mux.
--

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

Nem probléma, ogg-gal ritkán van dolgom. A tesztelésnél szerencsétlenségemre pont ezt találtam meg. :)