Konverze obrázků
Potřebujete zkonvertovat sadu BMP souborů do formátu JPEG? Můžete to dělat složitě načítáním jednotlivých souborů do grafického editoru a ručním ukládáním v jiném formátu. Jde to ale i jednoduššeji: můžete použít například balík utilit ImageMagick a následující skriptík:
Soubor bmp2jpg:
#!/bin/bash # z čeho a na co se bude převádět? NAME=`basename "$0"` FROM=`echo "$NAME" | cut -f1 -d2` TO=`echo "$NAME" | cut -f2 -d2` # zpracování všech parametrů: while [ "$1" != "" ] do OUT="`basename \"$1\" .$FROM`.$TO" echo "$1 -> $OUT" convert "$1" "$OUT" rm "$1" shift done
Skript se používá tak, že jako parametry se mu uvedou soubory ve formátu BMP, které se pokusí pomocí nástroje convert už zmiňovaného balíku ImageMagick převést na JPEG soubor. Příklad:
bmp2jpg *.bmp
…zkonvertuje všechny soubory s příponou .bmp na .jpg.
Skript je naprogramován natolik obecně, že pokud vytvoříte na soubor bmp2jpg vhodný symbolický odkaz (řekněme jpg2bmp – důležitá je ta dvojka uprostřed), bude provádět konverze mezi jinými formáty:
ln -s bmp2jpg jpg2bmp ln -s bmp2jpg bmp2gif ln -s bmp2jpg gif2bmp
Tedy například:
gif2bmp *.gif
ImageMagick obsahuje spoustu dalších nástrojů pro práci s obrázky. Kromě konverzí do mnoha formátů umí i různé transformace: zvětšování, otáčení, vkládání textu apod. To vše z příkazové řádky. Balík ImageMagick je součástí většiny distribucí Linuxu.
MP3 → WAV
Pro konverzi zvuku z formátu WAV na MP3 slouží různé enkodéry. Za všechny uvedu například BladeEnc nebo Lame. Co když ale potřebujete naopak empétrojky převést zpět na WAV? Tady si lze pomoci řádkovým přehrávačem mpg123 a švýcarským nožem pro práci se zvukem – nástrojem sox(Sound eXchange – bývá součástí většiny distribucí).
Když navíc použijete následující skript mp32wav, můžete jednoduše převádět na WAVy celé archivy souborů MP3:
#!/bin/bash TARGET=${1?"Prvním parametrem musí být cílový adresář!"} POM=`dirname "$TARGET"` PO2=`basename "$TARGET" /` TARGET="${POM}/${PO2}/" shift F=$1 while [ "x$F" != "x" ] do O=`basename "$F" ".mp3"` echo "${F} => ${TARGET}${O}.wav" mpg123 -q --stereo -s "$F" \ | sox -t raw -r 44100 -w -s -c 2 - -t wav "${TARGET}${O}.wav" shift F=$1 done
Prográmek se používá takto:
mp32wav <cílový adresář> soubor1.mp3 soubor2.mp3 ...
Tedy například:
mp32wav ../moje_album_WAV *.mp3
…čímž se převedou všechny soubory s příponou mp3 na WAVy a uloží se do adresáře ../moje_album_WAV.
SoX podobně jako ImageMagick umí také hodně dalších věcí. „Rozumí“ mnoha zvukovým formátům, umí je přehrávat i převádět nebo třeba na zvukové soubory aplikovat různé filtry. Opravdu stojí za to se s ním blíže seznámit.
Spojování WAVů
Jako další příklad použití nástroje SoX uvedu problém spojení dvou WAV souborů. Jednou jsem potřeboval spojit dvě písničky (které na sebe plynule navazovaly) do jedné a provedl jsem to takhle:
Soubor wavjoin:
#!/bin/bash SRC1=${1?"Prvním parametrem musí být jméno prvního zdrojového WAV souboru!"} SRC2=${2?"Druhým parametrem musí být jméno druhého zdrojového WAV souboru!"} TARGET=${3?"Třetím parametrem musí být jméno cílového WAV souboru!"} SRC1BASE=`basename "$SRC1" ".wav"` SRC2BASE=`basename "$SRC2" ".wav"` TARGETBASE=`basename "$TARGET" ".wav"` PREFIX="/tmp/wavjoin-$$-" sox "$SRC1" "${PREFIX}${SRC1BASE}.raw" sox "$SRC2" "${PREFIX}${SRC2BASE}.raw" cat "${PREFIX}${SRC1BASE}.raw" "${PREFIX}${SRC2BASE}.raw" \ > "${PREFIX}${TARGETBASE}.raw" sox -r 44100 -s -w -c 2 "${PREFIX}${TARGETBASE}.raw" "${TARGET}" rm "${PREFIX}${SRC1BASE}.raw" rm "${PREFIX}${SRC2BASE}.raw" rm "${PREFIX}${TARGETBASE}.raw"
Spojení WAVů spočívá v tom, že se nejprve oba zdrojové zvukové soubory převedou na RAW data (surová data – tj. formát, kterému rozumí zvukovka), ta se spojí a výsledek se opět převede do formátu WAV. Příklad:
wavjoin zdroj1.wav zdroj2.wav cilovy.wav
Dlužno dodat, že uvedený způsob je příšerně pomalý. Nicméně funguje, proto jsem se odvážil jej sem zařadit. Dovolím si však apelovat na zkušenější čtenáře, jestliže znají lepší způsob, ať se s ním nezapomenou s ostatními v připomínkách podělit. :-)
Vypínání monitoru v X-Window
Poslední vychytávka tohoto dílu už s multimédii nemá moc společného, zařadil jsem ji jen jako malý zákusek. Svého času jsem si chtěl do WindowMakeru přidat tlačítko pro okamžité vypnutí monitoru. Zkoumal jsem, jak se to softwarově dělá, a výsledkem byl dvouřádkový skript xscreenoff:
#!/bin/bash sleep 2 xset dpms force off
Kýženou akci vykonává nástroj xset. Po jistých zkušenostech s používáním jsem však před něj zařadil ještě příkaz sleep 2, který zpracování skriptu pozdrží na dvě sekundy. Je to proto, že po vypnutí monitoru obvykle odcházím a zasouvám klávesnici pod desku stolu. Často se mi pak stávalo, že jsem přitom nechtíc ťuknul do myši a obraz znovu naskočil (a já zuřil :-))…