shower – prezentace s videy
Hledal jsem nějakou elegantní možnost, jak udělat prezentace s vloženými videy. OpenOffice.org Impress cosi pořád kecal o kodecích a nechtělo se mi to řešit. Pravděpodobně by to nějak šlo s LaTeX Beamerem vložením videa do PDF. Beamer může být skvělá věc, ale nechtělo se mi laborovat s tím, jak tam vytvořit vlastní téma, protože žádné z výchozích se mi pro danou prezentaci nezdá.
Nakonec jsem skončil u osvědčené (pro většinu lidí asi trochu brute-force a ani ne moc elegantní) kombinace Qt + mplayer a naprogramování si prohlížedla přesně na míru. Qt spolu s mplayerem jsem už jednou úspěsně použil; pro dvb-starter. A protože jsem narazil na způsob, jak mplayer vložit přímo do Qt widgetu (shodou okolností nemůžu to fórum, kde jsem to našel, znovu objevit), nic nestálo v cestě se na to vrhnout.
Embedding (krásné to slovo) mplayeru v Xkách je velice jednoduché – stačí mu přes volbu -wid následovanou číslem Xkového okna (v Xkách je oknem prakticky všechno; ve většině toolkitů je snad každý widget reprezentovám Xkovým oknem) předat, kam má video vykreslovat. Problém byl v tom, že mplayer video roztáhne na celé okno – a tedy je povětšinou deformované. Naprostá souhra náhod tomu dala a já otevřel dnes jeden post na jednom blogu na Abclinuxu a tam přesně to, co jsem potřeboval – přidání černých pruhů kolem videa pomocí filtru (-vf) expand. Věc je pak úplně jednoduchá (spustí přehrávání video.avi v daném widgetu):
QProcess *mplayer = new QProcess(widget);
mplayer->start(
"mplayer", QStringList() <<
"-wid" << QString::number(widget->winId()) <<
"-slave" <<
"-vf" << QString("expand=:::::%1").arg((double) widget->width() / widget->height()) <<
"video.avi"
);
Metoda winId() vrací číslo Xkového okna, které se převede na řezězec a předá spouštěnému mplayeru, čímž řekneme, že má video vykreslovat do daného widgetu. Video filter expand bere několik parametrů (jako je pozice x, y; šířka, výška apod.). Důležitý je ale poslední – desetinné číslo specifikující poměr stran. Ostatní parametry se doplní, aby to vycházelo co nejlépe (největší možná velikost, vycentrované umístění…).
Jak tohle člověk má, stačilo přidat vykreslování obrázkových slajdů a shower byl na světě. Jak jinak než, že kód je na GitHubu:
$ git clone git://github.com/jakubkulhan/shower.git
Doufám v co nejmenší počet SEGFAULTů při prezentaci :-)
vydáno 20. 9. 2009, 16:27:00