Opět jeden z mých zápisů pro budoucí generace a mou děravou hlavu. Potřeboval jsem hromadně zkonvertovat haldu nevhodně uložených mp3 souborů. Napsal jsem si kvůli tomu malý skript.
Vlastním jeden klasický, ale velmi starý mp3 přehrávač: Diva od Daisy Multimedia. Ten můj má konkrétně asi šest let, ale funguje, je na tužkové baterky a na CF kartu a já zatím nemám důvod jej měnit.
Bohužel ještě nepatří do kategorie „blbuvzdorné a všepřehrávající“. Diva je celkem vybíravá na formát a nemá ráda nic jiného než klasické mp3 (přesně MPEG1 Layer III) vzorkované na 44,1 kHz. Variabilní bitrate ale zvládá a stejně tak jsem kdysi zkoušel 8 bitů a mono a tohle nevadí.
To za normálních okolností není problém, soubory si vytvářím obvykle sám a Diva s nimi proto nemá nejmenší problém. Nedávno se mi ale do rukou dostala hromádka mp3 souborů, které měly špatný formát a bohužel byly vzorkovány na 22 kHz. Musel jsem je tedy hromadně zkonvertovat, aby mi hrály v Divě.
Napsal jsem si tedy malý skriptík, který každý soubor v aktuálním adresáři rozbalí (převede na PCM wav), překonvertuje na 44,1 kHz a transformuje tak, aby ho posléze sežral lame a nakonec zase zabalí a hodí do podadresáře uprava
.
Ta tučná část je nejdůležitější a dost dlouho jsem se trápil, než jsem parametry soxu nastavil tak, aby se výsledný soubor lame líbil. V opačném případě sice komprese proběhla, ale výsledná mp3 obsahovala jen praskání, pískání a šum. Ty parametry jsou také hlavním důvodem tohoto zápisu.
Skript potřebuje splnit tři závislosti: mplayer, sox a lame. Samozřejmě parametry výsledného souboru mp3 si můžete na řádku s lame nastavit dle potřeby. Tady je:
#!/bin/bash mkdir uprava for soubor in *.mp3 ; do mplayer -ao pcm:file=pcmko $soubor sox pcmko -r 44100 -s -S -t wav pcmko2 lame -b 128 pcmko2 uprava/$soubor rm pcmko rm pcmko2 done
Zda sa mi, ze kedysi som podobnu vec riesil iba cez lame a velmi podobny skript. Myslim si, ze dekodovanie mp3 na wav je s LAME bezproblemova vec a spatne prekodovanie do mp3 takisto. A LAME vie menit parametre mp3 suborov, bitrate, vzorkovanie priamo z mp3 na mp3.
Ak sa mylim, tak ma opravte, ale myslim si ze pouzitie podobneho skriptu ale iba s vyuzitim LAME je asi vyhodnejsie. Tym samozrejme nehovorim, ze Petrov skript je zly alebo nefunkcny. S trochou stastia ten skript mozno najdem :-) Myslienka robit konverzie suborov
audio, video a obrazky pomocou skriptov je genialna vec a bola by to velka skoda, keby sa tato moznost nevyuzila...
pri cteni tohoto zapisku jsem si vzpomel na svoji "trochu" vetsi hromadu "empetrojek" ve spatnem formatu a napadlo me, jestli by nebylo lepsi je prevest rovnou do ogg. a pri te prilezitosti do ogg prevest i zbytek sveho hudebniho portfolia.
chtel bych se tedy zeptat, jak moc by tato konverze postihnula dane soubory - tj. jestli by doslo k velkym ztratam. nevi nekdo?
[1] Lame umí překódovat jednu mp3 do jiné a umí přitom měnit její parametry. Ale nikdy jsem neměl štěstí se změnou vlastností jako je vzorkování a podobně. I když se mu pokusíte vnutit "-s 44.1", tak stejně použije vzorkování zjištěné ze souboru. Tohle se používá jen u RAWů, ve kterých ta informace není. Budu rád, když mě někdo poučí, jak to udělat jen s lame, ale mě se to nikdy nepovedlo.
Zkuste pouzit PACPL Perl Audio Convertor, vetsinu veci zvlada.
http://linuxappfinder.com/package/pacpl
Podobný problém ... mám vse v ogg, bohužel mé ové autorádio si rozumí pouze s mp3 a wma ... transkode pomohl perfektně ... celou složku (cca 3GiB) najednou ... včetně vlastního nastavení ... v kompu zbyly ogg a mp3 bouchnul na http://www.alza.cz/pametova-karta-sandisk-micro-secure-digital-8gb-s-cteckou-mobilemate-micro-reader-d85342.htm a nosím to jako přívěšek na klíčích ...
Poddobný problém řeší sehnat jinou mp3 ve vyšší kvalitě. Většinou to není problém, pokud se samozřejmě nejedná o vaši vlastní nahrávku "tenkrát v lese u táboráku" :o). Překompresovávat znovu ztrátovou kompresi? MP3 dnes ve 128kbps, nebo dokonce 22kHz?!!! Nezlobte se na mě, ale to jste hluší? :o))
jednoznacne souhlasim s Kironem... mp3 ve 22 kHz je neco, co bych si do usi nepustil. ostatne z podobnyho duvodu uz ani nepouzivam ani mp3 ;) nastesti muj obycejny mp3 prehravac od O2, kterej jsem vyhral na jedny hudebni akci oggy bez problemu zvlada a smartphone taktez ( TCPMP). Jako reseni pro prehravani do autoradia staci pripojit takovou tu vecicku co vysila zvuk na radiovy frekvenci a je to :).
mam dotaz - podobny scriptik sem uz taky kdysi davno spachal, ale na lame me mrzi jedna vec - umi jen id3v1 , takze u v2 jdou tagy do pytle, coz me mrzi ,jelikos to mam pak v prehravaci vsechno v slozce neznamy interpret / nezname album atd :) - nevite nekdo o programu co umi kopirovat id3tagy ? - zkousel sem id3cp z baliku id3lib myslim ,obcas funguje ,ted mi uz pul roku nebeha - kodovani - locale mam cs_CZ.UTF-8 ,gentoo, takze vsechno skompilovane s timto parametrem neporadi nekdo ?
Předem se omlouvám za popíchnutí, ale nemůžu si pomoci. Tohle je výtvor šéfredaktora root.cz?! :) Již dlouhou dobu mám podezření, že jste navzdory své prezentaci sebe sama poměrně dost nezkušený/neschopný (vyberte si) - jsou to střípky, příspěvek tady, odpověď támhle, ale tento zápis to vážně orazítkoval. Mnohem lépe by vypadalo, kdybyste si rovnou řekl o radu - nikdo nezná všechno a nechat si poradit je ctností králů.
K věci. Zkuste si vyměnit vnitřní smyčku za:
lame --vbr-new -V2 --resample 44.1 "$soubor" "uprava/$soubor"
id3cp "$soubor" "uprava/$soubor"
(to VBR je jen doporučení kvůli menším ztrátám, brate lze omezit -b/-B, příp vyšším -V; tučnou část nikde nevidím, ale cokoli vás napadne dalšího, jde řešit pomocí přepínačů LAME)
Na ekvivalent vašeho skriptu by stačil ten první řádek sám, ale já z nějakého podivného důvodu upřednostňuji zachování všech tagů ve výsledném souboru (btw, různé verze LAME za určitých okolností při takto přímé konverzi něco z tagů zachovávají, ale nedá se na to spolehout). Pro id3cp viz balíček libid3-dev. Přejdu absurdně vysoké nároky a časový handicap vaší verze (čtení->zápis->čtení->zápis->čtení->zápis->unlink->unlink PCM!!! dat z/na disk), i to, že se kromě audia ztratí veškeré další údaje, i to, že na tak primitivní a běžnou věc voláte tři utility a sta megabytové mezikroky ukládáte na disk. Co ale přejít nedokážu je použití $soubor bez uvozovek. Tomu já říkám maximálně kritická chyba! Pro člověka, který alespoň občas píše shell skripty by to měla být rutina jako oddělování příkazů středníky.
Opravdu mě děsí když vidím, jací lidé se označují za "odborníky". Jen za ty uvozovky byste se měl hanbou propadnout. Přísahám bohu, že mi vstávají vlasy hrůzou na hlavě, když vedle té hrůzy čtu vaše info "...více než deset let .. věnuje se .. bezpečnostní politice..."
Jak říkám, měl jsem určité pochybnosti, ale že to jde tak hluboko jsem vážně netušil. Buď s UNIX-like systémy neděláte 10 let, nebo jste mimořádně natvrdlý. Neberte si to osobně, řekl bych to samé každému, kdo by stvořil něco podobného a přitom si tahal triko tak jako vy.
Perun!
[14] Jak jste sám napsal: "nikdo nezná všechno" a platí to samozřejmě i o mě. Tohle je můj osobní blog a v tomto postu jsem popsal, jak jsem já řešil jeden konkrétní problém.
Vaše řešení je samozřejmě elegantní a jsem opravdu rád, že jste mi jej ukázal. Příště (až budu něco podobného řešit), použiji pravděpodobně Vaši metodu. Každopádně jsem i svým přístupem dosáhl kýženého výsledku. Uvozovky jsem kolem $soubor dát mohl, v mém případě jsou ale zbytečné - nepoužívám mezery v názvech souborů, takže mi to fungovalo i bez nich a šlo přeci o výsledek.
K emotivní části Vašeho příspěvku: nikdy jsem se necítil být programátorem, ani mě to neživí. Napsal jsem jednoduchý skript, který vyřešil jeden můj specifický problém. Nic víc a nic míň.
Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. GNU/Linuxem a Unixem obecně se zabývá již více než deset let a věnuje se především jeho nasazení v počítačových sítích a bezpečnostní politice. Zde bloguje o Root.cz, Linuxu, internetu a světě kolem sebe.
Přečteno 112 292×
Přečteno 89 765×
Přečteno 73 163×
Přečteno 58 109×
Přečteno 54 435×