Jak jsem konvertoval mp3

10. 10. 2011 11:44 (aktualizováno) Petr Krčmář

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

Sdílet