Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Chytrému napověz - práce s obrázky a zvukem

Vítám vás u dalšího velice nepravidelného pokračování seriálu o užitečných nástrojích a skriptech pro Linux. Od posledního dílu uteklo už mnoho dní (ba měsíců), a tak jsem se jednoho dne rozhodl, že zjistím, co nového přibylo v mém ~/bin.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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 :-))…

Michal Burda

Michal Burda

Michal Burda vystudoval informatiku a aplikovanou matematiku a nyní pracuje na Ostravské univerzitě jako odborný asistent. Zajímá se o data mining, Javu a Linux.

Školení: Linux – Firemní server

Na třídenním školení se naučíte nainstalovat a spravovat kompletní linuxový server do Vaší firmy se všemi základními službami, které potřebujete pro provoz Vaší sítě, firemních emailů a webových stránek.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,31

Přehled názorů

joinwav
Honza 25. 6. 2003 00:16
Nový
├ 
Re: joinwav
VojtaS 25. 6. 2003 00:29
Nový
│
└ 
Re: joinwav
petrs 25. 6. 2003 02:51
Nový
│
 
└ 
Re: joinwav
Honza 25. 6. 2003 04:31
Nový
├ 
Re: joinwav
VlK 25. 6. 2003 10:39
Nový
│
└ 
Re: joinwav
Jirka Bohac 25. 6. 2003 11:35
Nový
│
 
└ 
Jde to i bez basename
Stanislav Brabec 25. 6. 2003 12:18
Nový
└ 
Re: joinwav
hkmaly 26. 6. 2003 17:17
Nový
 
└ 
Re: joinwav
GiX 27. 6. 2003 14:38
Nový
xscreenoff
PaD 25. 6. 2003 00:38
Nový
└ 
Re: xscreenoff
Honza 25. 6. 2003 01:46
Nový
 
└ 
Re: xscreenoff
PaD 25. 6. 2003 22:12
Nový
 
 
└ 
Re: xscreenoff
xX 26. 6. 2003 16:37
Nový
Ad Konverze obrázků
Jirka 25. 6. 2003 06:58
Nový
rozdělit avi
Ritchie 25. 6. 2003 14:57
Nový
├ 
Re: rozdělit avi
Vac 25. 6. 2003 15:47
Nový
├ 
Re: rozdělit avi
Michal Burda 30. 6. 2003 10:21
Nový
└ 
Re: rozdělit avi
ff 4. 7. 2005 06:49
Nový
nahrada imagemagick
marasan 25. 6. 2003 15:26
Nový
├ 
Re: nahrada imagemagick
Honza 25. 6. 2003 23:30
Nový
└ 
Re: nahrada imagemagick
hkmaly 26. 6. 2003 17:14
Nový
MP3->WAV
Tomas Crhonek 25. 6. 2003 18:51
Nový
├ 
Re: MP3->WAV
pharook 25. 6. 2003 19:11
Nový
└ 
Re: MP3->WAV
Honza 26. 6. 2003 11:37
Nový
 
└ 
Re: MP3->WAV
Tomas Crhonek 26. 6. 2003 21:12
Nový
mp3-mp3 convert
anonymní uživatel 3. 7. 2003 16:25
Nový
kde stahnu ten program, abych mohl spojit pisnicky
... 16. 3. 2009 14:41
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem