adatok kinyerése videóból

Ha már elkezdtük az ffmpeg-et vizsgálni akkor nézzük meg, hogyan lehet adatokat kinyerni a (de)kódolandó videóból:
ffmpeg -i /utvonal/az/avihoz/fajl.avi

A kimenet nagyjából így fog kinézni:
FFmpeg version SVN-rUNKNOWN, Copyright (c) 2000-2007 Fabrice Bellard, et al.
configuration: --enable-gpl --enable-pp --enable-swscaler --enable-pthreads --enable-libvorbis --enable-libtheora --enable-libogg --enable-libgsm --enable-libmp3lame --enable-dc1394 --disable-debug --enable-shared --prefix=/usr
libavutil version: 1d.49.3.0
libavcodec version: 1d.51.38.0
libavformat version: 1d.51.10.0
built on Nov 28 2007 19:39:53, gcc: 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)

Seems stream 0 codec frame rate differs from container frame rate: 30000.00 (30000/1) -> 23.98 (24000/1001)
Input #0, avi, from '/media/stuffs/new/clannad/01 CLANNAD (BS-i DivX6.6 1280x720).avi':
Duration: 00:24:09.9, start: 0.000000, bitrate: 1854 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 1280x720, 23.98 fps(r)
Stream #0.1: Audio: mp3, 48000 Hz, stereo, 192 kb/s
Must supply at least one output file

Nézzük mit kapunk.
Az első néhány sor az ffmpeg készítésekor felhasznált kapcsolók listája és a lib-ek verziója. Az előbbi azért fontos, mert például amikor mp3 hangsávval rendelkező videót szerettem volna készíteni a hangsáv készítését nem engedte mert nem ismerte az enkoder az mp3-at. Kis google-zás után arra jutottam, hogy az ubuntu verzióba nincs beleforgatva a liblame mint enkore (–enable-libmp3lame). Hogy kiderüljön mivel lett forgatva az ffmpeg elég volt azt egyszer lefuttatni. (a bemásolt példa azért megtévesztő mert én azóta készítettem egy saját deb-et amibe beleforgattam).

Következő rész a számunkra igazán fontos. Input #0, vagyis az első bemenő fájl adatai, avi fájltípus és a fájl neve, elérési útja.
Duration: hossz
start: a bemenő fájl melyik pozíciójától szeretnénk feldolgozni.
bitrate: értelem szerűen.
A bemenő fájlnak két adatfolyamja van a példa szerint.
Az első egy videó csatorna, melynek a kodekje (!) mpeg4 és a színpaletta yuv420p (FIXME), felbontás 1280×720, képkockák száma másodpercenként: 23.98.
A második sáv egy 48000 Hz-es, sztereó mp3, mely 192 kb/s -os mintavételezésű.

Egy szintén fontos kapcsoló amit érdemes megjegyezni a -formats.
Ennek a kimenete a következőképpen néz ki:

...
File formats:
E 3g2 3gp2 format
E 3gp 3gp format
D 4xm 4X Technologies format
....
D wsvqa Westwood Studios VQA format
D wv WavPack
DE yuv4mpegpipe YUV4MPEG pipe format

Codecs:
D V 4xm
D V D 8bps
D V VMware video
D V D aasc
....
D A xan_dpcm
D V D xan_wc3
D V D xl
DEV D zlib
DEV zmbv

Supported file protocols:
file: pipe: udp: rtp: tcp: http:
Frame size, frame rate abbreviations:
ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif
Motion estimation methods:
zero(fastest) full(slowest) log phods epzs(default) x1 hex umh iter

A támogatott fájl formátumok, kodekek, protokollok listája.
A fájlformátumok és a kodekek előtt lévű betűk kis magyarázatra szorulnak:
D – dekódolás
E – enkódolás
A – audió
V – videó

A fent említett liblame kapcsoló hiányával például így nézne ki az mp3 sora:
D A mp3
vagyis csak dekódolni tudja, és a megnevezett formátum audió.
Nálam ez így néz ki:
DEA mp3
vagyis dekódolni, enkódolni is tudja az audió formátumot.

gutsy iftab és udev problémák

Valami miatt újraindult a fejlesztői szerverem ami egyben router is. A dist-upgrade után annó nem volt restart így most jött elő egy érdekes probléma. Arról, hogy egy hálókártya azonos helyen legyen mindig (eth*) eddig az iftab nevű beállítófájl gondoskodott. Gutsy-ban ezt a funkciót az udev vette át. A frissítéskor megfelelően áthozza a kártyákat, viszont az udev valami miatt felismerte a pci kártyát még egyszer így azt a kártyát amin a dsl modem csücsül mégegyszer hozzáadta eth2 néven. Így induláskor (és netrestartkor) problémázott a pppoe mert a kártyák beállításakor az eth1-re nem került kártya (vagy felülírta és azt eth2-n volt, vagy hozzá sem adta, mondván kétszer szerepel a beállítófájlban).

/etc/udev/rules.d/70-persistent-net.rules

# Converted from /etc/iftab on upgrade
SUBSYSTEM==”net”, DRIVERS==”?*”, ATTRS{address}==”00:0E:2E:C0:83:BA”, NAME=”eth1″

# PCI device 0x10ec:0x8139 (8139too)
SUBSYSTEM==”net”, DRIVERS==”?*”, ATTRS{address}==”00:0e:2e:c0:83:ba”, NAME=”eth2″

Megoldás annyi, hogy az iftab-ból áthozott sort törölni kell és a udev által hozzáadott sort átszámozni (udev ezt a sort hozzáadja automatikusan ha ezt töröljük).

/etc/init.d/udev restart
/etc/init.d/networking restart

pidgin 2.3.0 msnp14-el

Délelőtt kíváncsian megnéztem, hogy az msn protokollal megy-e a privát üzenet, valahogy gutsy-s pidgin alatt (2.2.0-s verzió talán). Kis google-zás után arra jutottam, hogy nem mivel csak az msnp14-el együtt implementálták a programba.
Következő lépés, kideríteni, hogy mikor landol az msnp14 a pidgin-be. Örömteli hír, már benne van viszont nem támogatott. Gyorsan kerestem egy helyet ahol fenn van a 2.3.0-ból forrás csomaggal együtt a pidgin és valamennyire normális (nem monolitikus) csomagot kínál ubuntu-ra. Getdeb.net-en fellelhető csomagból csináltam egy saját változatot amit feltettem ide:
http://workshop.connor.hu/ubuntu/deb/
Ismert hibák hiányosságok:
o changelog nincs módosítva
o doxygen doksikat kiszedtem mert egy xsl-t hiányolt.
o az msnp14 10 perc futás során 2x kilépett, szóval instabil, fejlesztői és stbstbstb. Ha valaki felteszi akkor azt tényleg csak saját felelősségére!! Nincs semmi hivatalos támogatás ehhez a verzióhoz (én se fogok segíteni ha valami nem megy :)).

Mennek az offline üzenetek, kiírja a személyes üzenetet szóval teszi a dolgát ahogy kell.

Viszont fejlesztők számára jó tesztelési lehetőség. Gutsy-hoz készült.

bréking nyúz

Mai nappal elindult a volt sulimban, Gödöllőn egy diákoknak szóló alapoktól induló tanfolyás, amin programozással, webes technológiákkal és linux desktop (ubuntu) hétköznapi felhasználással fogom nyúzni őket, vélhetően a hallgatóság legnagyobb örömére. Elképzelhető, hogy az egyes órákon elhangzott témák kivonata felkerül ide is. Vagy nem. De ez biztos!

A másik örömteli hír, hogy elmúlt héten hivatalosan is megkezdte működését a Midián Informatikai Kft. Remélhetően hamarosan a weboldal is elindul. (jó grafikusokat folyamatosan keresek egyébként! :))

Harmadik, személyesebb élményem, holnap elmegyek életem első fényképezésére ahol elsőként fogok a gép másik oldalán állni. Egy épületről kell referencia fotókat készíteni.

Negyedik szintúgy offtopic: Ha valaki jár antikváriumban, és találkozik fafaragásról szóló könyvvel az legyen szíves szólni nekem! Köszönöm!

netboot ubuntu próba

Olyan rendszerek esetén ahol nincs semmilyen cserélhető meghajtó, ellenben van gyors hálózat, esetleg az rendes telepítés valami oknál fogva nem megy, alternatíva lehet a netboot képfájl. Ez a fajta telepítés a debian adminok számára nem ismeretlen, viszont az ubuntu felhasználók elől gondosan elrejtik (nem véletlenül).
Hamarosan egy iskolában fogok szakkört indítani, asztali Ubuntu-val és más webes eszközökkel fogom megismertetni a lelkes diákokat. A gépek viszonylag új HP gépek, de valami oknál fogva az új deb alapú linuxok sorra elhasalnak a telepítő betöltése előtt (knoppix, ubuntu desktop telepítő…). Az alternate névvel illetett telepítő sikeresen betöltődik, viszont a cdről való olvasás szintúgy gondokkal kűzd, a sebessége nem nevezhető távolról sem olvasási sebességnek (valami az ide verzérlő meghajtója körül nem stimmel). Ilyen esetben megoldás lehet egy olyan telepítő ami nem, vagy csak nagyon kis mértékben veszi igénybe a cd-romot. Szerencsére eszembe jutott hogy létezik a netboot, gondoltam kipróbálom hogy muzsikál. Virtualbox-os teszteket akadály nélkül vette, jövőhéten lehet éles teszteket is végezni (persze kezdő felhasználók ne próbálgassák).
Amennyiben valaki kedvet érez a próbálgatáshoz, innen tudja beszerezni:
http://archive.ubuntu.com/ubuntu/dists/gutsy/main/installer-i386/current/images/netboot/

Vagy az aktuális terjesztés tárolójából a megfelelő címen. Léteznek leírások tényleges cd mentes netboot-os megoldásokról, de azokkal egyenlőre nem foglalkoztam (ha valaki kedvet érez ne fogja vissza magát :), viszont érdekes téma, lehet hogy sort kerítünk reá.

videodarabolás ffmpeg-el

Újabb ffmpeg 5 perc keretében megtanulunk kinyesni egy kicsit a filmből. Ha már előzőleg megtanultunk pozícionálni akkor most azt felhasználva továbbfejlesztjük tudományunk. És a parancs vala:

ffmpeg -i fileneve.avi -ss 00:02:00 -t 00:00:30 op.avi

-ss már tudjuk mire szolgál.
-t kimentett anyag hossza.

Az eredmény pedig a bemenet 2. percétől 30 másodperc hosszú anyag.

szenilitás beköszönése

Két napja frusztrál az a probléma, hogy a gutsy-n nem tudok debootstrap-al feltenni egy gutsy-t. Ma remekül sikerült megoldani a problémát, mivel a kernel forgatáskor (független az előbbiektől) ez a kép köszöntött:
make xconfig
HOSTCC scripts/basic/fixdep
/bin/sh: line 1: scripts/basic/fixdep: Permission denied

Ekkor kezdett gyanus lenni, majd egy mount kiadása után beigazolódott, hogy az év lámaságát szenvedtem el:

/dev/sda1 on /media/stuffs type ext3 (rw,noexec,nosuid,nodev)

Nos ez szép lecke volt…

képlopás filmből ffmpeg segítségével

ffmpeg -i "avi" -y -ss 0:00:03 -vframes 1 -an -vcodec mjpeg op/op01.mjpeg

Magyarázat:

-i Forrásfájl amit meg akarunk nyitni.
-y Felülírja a célfájlt ha létezik.
-ss Pozícionálás. A képet ebből a pozícióból fogja szedni.
-vframes Kimentendő frame-k száma.
-an “hangsáv” letiltása.
-vcodec Kimeneti “videósáv” kódolása. (további infó ffmpeg -formats)
op/op01.mjpeg Cél képfájl.

New Life Has Begun

Elszállt a nyár és a linux alatt a winyó. Rajta sok válogatott mp3, program kódok, könyvelő progam, banki terminál és még pár digitalizált családi felvétel. A winyó relatíve új volt.
Azt hiszem a jövőben kénytelen leszek itthonra is backup megoldást keresni… 🙁

Jólszervezett informatikai rendszerek a XXI. században

Néha szoktam rendelni ezt-azt a netről (dvd, zene cd), de eddig nem volt semmi probléma. Ami volt az is leginkább az én hülyeségemnek volt betudható. Most viszont sikerült találni egy “nagy jól felépített” webáruházat. A cég külföldi cd-k hazai megrendelhetőségét és kiszállítását végzi, ami már nekem is eszembejutott, dombornyomott kártya hiányában, ez egy jó ötlet (paypal, utánvét, banki átutalás, bolti fizetés). Pont ez kell nekem, nincs dombornyomott kártya, és a bolt a mamut II.-ben van (Moszkva térről indul a buszom Zsámbékra), útbaesik. Nagy lelkesen megrendeltem egy cd-t az oldalon csütörtökön, pénteken este kaptam egy levelet miszerint átvehetem a cd-t, megérkezett. Kicsit meglepett hogy ilyen gyorsan, de gondoltam volt raktáron és ezért ilyen gyors (még bosszantott is, hogy 2 órával az előtt jártam ott, hazafele menet bemehettem volt). Ma Zsámbékra utazásom alkalmával bementem a boltba és mutattam a levelet amin az adatok voltak. A hölgy elkezdte keresni a cd-t. Akkor kezdett gyanús lenni a dolog amikor már 3x nézte meg mindenhol. Akkor egy srácnak szólt aki ránézett a gépre és megállapította, hogy az az értesítés egy másik rendelésnek szólt, adjam fel a hírdetést még egyszer… Pompás. De most nem is csak arról van szó, hogy az én megrendelésem. Mi van akkor ha történetesen indulás előtt elolvasom pénteken és be is tudok menni a boltba? Elviszem a cd-t és az aki ténylegesen megrendelte, várt 3 hetet tök fölöslegesen, mert elvittem az orra előtt a cd-t… Ez van, Pistike megviccelt.

Az ötlet jó, nem lehetne ezt normálisan csinálni?

gksu2 python modul “api”

Objektum neve: gksu2
Objektum szintű metódusok:

gboolean su(gchar command_line, GError error)

gboolean sudo_full(GksuContext context, GksuAskPassFunc ask_pass, gpointer ask_pass_data, GksuPassNotNeededFunc pass_not_needed, gpointer pass_not_needed_data, GError error)

gboolean sudo(gchar command_line, GError error)

gboolean run_full(GksuContext context, GksuAskPassFunc ask_pass, gpointer ask_pass_data, GksuPassNotNeededFunc pass_not_needed, gpointer pass_not_needed_data, GError error)

gboolean run(gchar command_line, GError error)

gchar ask_password_full(GksuContext context, gchar prompt, GError error)

gchar ask_password(GError error)

Osztály: GksuContext
példányosítás: gksu2.Context()

Metódusok:
set_user(gchar username)

const-gchar get_user()

set_command(gchar command)

const-gchar get_command()

set_login_shell(gboolean value)

gboolean get_login_shell()

set_keep_env(gboolean value)

gboolean get_keep_env()

set_description(gboolean description)

gchar get_description()

set_message(gchar message)

gchar get_message()

set_alert(gchar alert)

gchar get_alert()

set_grab(gboolean value)

gboolean get_grab()

gboolean get_grab()

set_launcher_context(SnLauncherContext sn_context)

SnLauncherContex get_launcher_context()

set_debug(gboolean value)

gboolean get_debug()