sobota 21. září 2013

mp3fs - z flac do mp3 skrz souborový systém on the fly

Tohoto nástroje jsem si měl všimnout před dvěma léty, když jsem řešil, jak přehrávat na svém telefénu flac. No nešlo to, zbývala jen konverze do podporovaného formátu. A právě tuto situaci může jednoduše vyřešit souborový systém mp3fs. Ten totiž umožní přistupovat k původním flac souborům jako k mp3 a při čtení je teprve konvertuje. Zkrátka připojíte adresář s vaší hudební sbírkou přes mp3fs do adresáře vedle, kde se budou všechny flac soubory tvářit jako mp3 a když je odtud začnete číst (například kopírovat do přehrávače) polezou z něj opravdu mp3. Žádné místo navíc zabrané duplicitami v jiném formátu, navíc kdykoli můžete změnit kvalitu převodu změnou parametrů při připojování filesystému. A ačkoli momentálně mp3fs nepotřebuju, přivedlo mě to k dalšímu zajímavému poznatku. ...


Základní vlastnosti

mp3fs je souborový systém FUSE, tudíž běží v uživatelském prostoru a navíc je read-only, tedy funguje jednosměrně, soubory z něj lze jen číst. Při čtení z něj jsou flac soubory konvertovány do mp3 zvolené kvality a datového toku. Datový tok je podporován pouze fixní, aby bylo možno jednoduše dopočítávat velikost souboru před samotnou konverzí.

Instalace

Balíček mp3fs je v Ubuntu k dispozici v repozitářích multiverse a k instalaci tedy stačí nemít tento zakázaný a spustit příkaz:

sudo apt-get install mp3fs

V repozitářích Ubuntu je stále verze 0.31 (i v U13.10), ale na stránkách projektu už je rok k dispozici verze 0.32, která opravuje nějaké ty chybky, nabízí například spolehlivější kalkulaci velikosti výsledného mp3 souboru a řeší havárie při použití některých příkazů, např. scp. Na odkazované stránce projektu se sice dozvíte, že 0.32 přidává konfiguraci pro ReplayGain (co to znamená vysvětlím dále), ale to tam zůstalo jen díky nedbalé aktualizaci stránky po vydání poslední verze, protože ta poznámka patří k předchzí 0.31. Instalaci nejnovější verze popíšu dále.

Použití

Nejjednodušší použití mp3fs je následující:

mp3fs -b 128 --quality=2 ~/music  ~/music-mp3 -o ro

Parametr -b (--obitrate) určuje bitrate (kb/s) a mohl jsem ho vynechat, protože 128 je výchozí hodnotou. Přepínač --quality určuje kvalitu převodu v rozsahu 0-9, přičemž nižší je lepší a výchozí hodnotou je 5, ačkoliv LAME doporučuje 2, což je dáno velkým rozdílem v rychlosti komprimace, 2 už na slušném C2D procesoru zdržuje, kdežto 5 skoro není poznat. Dále určujete cestu k adresáři, který se má přes mp3fs připojit a kam se má připojit. Cílový adresář musí existovat, případně si ho tedy nejprve vytvoříte. Přepínač -o již patří FUSE a určuje, že fs bude jen pro čtení. Tento parametr by tam teoreticky nemusel být, zapisovat do mp3fs adresáře stejně nepůjde, ale rozhodně to není z pohledu systému stejné, natož transparentní.

Pak už jen stačí s virtuálními empétrojkami nakládat běžným způsobem, zhmotňovat se budou při použití. Konvertovat se ale budou pouze soubory typu flac, ostatní skrz mp3fs dostanete v původním stavu, ani mp3 se tudíž znovu přežvýkávat nebudou.

Chcete-li filesystem s mp3 odpojit, uděláte to následovně:

fusermount -u ~/music-mp3

Když to zařve, že je zdroj zaneprázdněn, visí někde aplikace sosající odtud soubor/y. Netušíte-li, která to je (například mocp to umí, i když jste z něj přes "Q" vypadli), můžete se na to podívat:

lsof ~/music-mp3

Pokud se vám hodí mít vaše flacy přes mp3fs připojeny trvale, můžete si přidat patřičný řádek do systémového souboru /etc/fstab, který vám to připojí už při bootu. Řádek může vypadat takto:

mp3fs#/mnt/music /mnt/mp3 fuse ro, bitrate=192 0 0

Adresáře s absolutní cestou si změníte podle potřeby, případně si doplníte práva.

Kompilace nejnovější verze

Nejjednodušší variantou, jak se dostat k aktuální verzi, nemuset vyrábět nový instalační balík a přitom nepřijít o možnost jednoduše mp3fs spravovat přes balíčkovací systém, je nainstalovat výše zmíněným postupem z repozitářů dostupnou verzi a tu pak přerazit tou novou. Balíčkovací systém si sice bude myslet, že je to verze starší, ale to je celkem fuk. Když přijde náhodou nová verze s aktualizací, přepíše se ta kompilovaná a zase se nic neděje.

Stáhněte si tedy archiv s nejnovější verzí, rozblte ho třeba přímo do $HOME/ a z terminálu přepněte do právě vybaleného adresáře, aktuálně například:

cd ~/mp3fs-0.32

Nainstalujte potřebné nástroje:

sudo apt-get install build-essential liblame-dev libflac-dev libfuse-dev libid3tag0-dev

Nyní přijde na řadu klasická výrobní trojice, pokud chcete přepsat stávající instalaci, uděláte to takto:

./configure --prefix=/usr/
make
sudo make install

Jestli ale chcete instalaci kamkoliv jinam, prostě změňte --prefix na adresář podle vašeho uvážení, třeba na $HOME/bin/, pak samozřejmě vynecháte sudo před make install, i instalaci balíčku z repozitáře.

ReplayGain

ReplayGain umožňuje přehrávačům podporujícím tuto funkci automaticky přizpůsobovat hlasitost nahrávky na jakousi ideální úroveň při přehrávání, což by mělo eliminovat nutnost neustálého manuálního přizpůsobování hlasitosti, při přehrávání různých nahrávek. Děje se tak pomocí metadat zapsaných ve zvukových souborech, která popisují rozdíl v hlasitosti nahrávky oproti referenční hodnotě a bývají doplněná i o hodnotu maximální amplitudy v nahrávce, kvůli případnému omezení clippingu, což se zas zpravidla řeší kompresí. Také se rozlišují RG data pro celé album a jednotlivé stopy. Z toho vyplývá, že nejprve něco musí nahrávky zanalyzovat a metadata zapsat. LAME, který je v linuxových systémech používán pro výrobu mp3 souborů a používá ho i mp3fs, toto samozřejmě umí.

Jenže mp3fs sice přidalo podporu ReplayGain a později i nějaké to nastavení, ale neumí tato metadata vytvářet, umí je jen přenášet, případně modifikovat. Pokud zdrojový soubor tato metadata postrádá, mp3fs je nevyrobí. Ten umí RG data zpracovat tak, že je přepočítá na jinou referenci (přepínač --gainref/--ogainref) a pak umožňuje tato data zahodit úplně, dát přednost RG celého alba, pokud je k dispozici, jinak zkusí použít RG jednotlivých tracků a poslední možností je přenášet RG pro každý soubor zvlášť.

Skoro všechny zásadní linuxové audio přehrávače umí ReplayGain využít, ale nebývá to výchozí chování, je to nutmé zapnout. Rhythmbox to řeší pomocí pluginu, který ... shazuje celou aplikaci. Alespoň v mém případě.

Zajímá-li vás, jak si tato metadata pro své audiosoubory dodatečně vytvořit, najdete si to na netu, nebo počkáte na nějaký můj další článek, kde vám to prozradím. Rozhodně je to funkce užitečná, zvláště pokud často posloucháte různé nahrávky na přeskáčku.

3 komentáře:

  1. Tak jsme vyzkoušel, na přímé použití pro přehrávání ze složky kde je pto připojeno to teda není, ale na kopírování do jiných zařízení to na občasné použití stačí.

    OdpovědětVymazat
    Odpovědi
    1. Kdo by to taky přehrával přes tohle, když má vedle flac? :) Jiank je ta rychlost jen o nastavení kvality a rychlosti počítadla. Náročnější si holt počkají, ale furt to šetří čas, nebo místo.

      Vymazat
    2. Přesně tak, akorát uvažuju, že když mam konečně místo (servřík jako NAS, HTPC...) mohl bych ty flacky zkusit a moutnout si to trvale kvůli přehrávání v telefonu, autorádiu.. Pač muj telefon se symbianem belle to nedá. Otázka zda to na mem NTB s jedním z kvalitnějších repro poznám a o sluchátkách nemluvím. (Asus N56VM, kupodivu pod linuxem celkem bez problémový s kernelem 3.5+, vyjma 3.8+ a regulace podsvícení, to jde dobře jen na 3.5).

      Vymazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.