Hlavní navigace

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

Michal Burda 25. 6. 2003

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.

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

Našli jste v článku chybu?

25. 6. 2003 14:57

Ritchie (neregistrovaný)

Chtěl bych se zeptat, jak slušně rozdělit velké avi na několik menších. Video je kódováno v divx, zvuku tuším v mp3.

16. 3. 2009 14:41

... (neregistrovaný)
Prosim o pridani odkazu kde muzu stahnou ten program na spojeni dbou pisnicek
dekuji
Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

120na80.cz: Rakovina oka. Jak ji poznáte?

Rakovina oka. Jak ji poznáte?

Vitalia.cz: Tesco: Chudá rodina si koupí levné polské kuře

Tesco: Chudá rodina si koupí levné polské kuře

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

DigiZone.cz: NG natáčí v Praze seriál o Einsteinovi

NG natáčí v Praze seriál o Einsteinovi

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie