ゴールデンウィークは有給使ってガッツリ11連休取った割に、全然有効活用できてなくて絶望する今日この頃。
いつも「仕事したくない、休みたい」とか言ってるけど、いざガッツリ休みあっても存外使い切れないもんですな。
さて、ゴールデンウィーク後半は専らVitaをいじって遊んでいた。
VitaにはNASにアクセスして音楽や動画を再生したり画像を表示することができるnaspocketというアプリがある。
奇しくも前にNASを構築して昔からのファイル資産を移していたので、ごろごろしながら昔のメディアファイルを色々再生して楽しんでいる。
CentOSでメディアサーバを立てる〜その2:MediaTombでメディアサーバを構築しよう〜 - そんな今日この頃でして、、、
iPadほど重くないしスマホよりは画面が大きいしで中々快適で良い感じである。
ただ、Vitaではwmaやwmvファイルを再生できないのが不満だったりする。
(まぁ、それ言うとスマホのアプリも大概はwma形式ダメだったりするけど)
wmaはWindow Media Player用のエンコード形式。
Media PlayerでCDを取り込んだ際のデフォルトがこれだったりするので、iPodが影も形も無い時代からPCを弄ってた人は結構この形式のファイルを持ってたりするんじゃないだろうか。
(あと、あまり大きな声で言えないけどインターネットでストリーミング配信してるラジオをダウンロードすると大体wmaを格納したasfだったりする)
Windowsならwmaファイルをmp3に変換するフリーソフトはかなり豊富にある。
しかし、今メインで使ってるMacではあまり良さそうなフリーソフトは見つからなかった。
(有料のための機能制限版だったりUIがよく分からなかったり)
そんなわけで、いっそのことNASとして使ってるCentOS上で変換出来るようにしようと思い調べてみた。
準備
変換をかけるにはwma→wav→mp3の2段階のステップを辿る。
(というか普通エンコーダーは内部的に全部同じ)
Linux上でwmaファイルを再生するにはmplayer、mp3への変換にはlameコーディックを用いる。
兎にも角にもyumでインストールする。
$ sudo yum install -y mplayer lame
存外時間かかったりする。
※もしかしたらデフォのリポジトリにないかも。rpmforgeあたり入れときましょう。
変換してみる
wma→wav
以下のmplayerコマンドで変換をかける。
$ mplayer [wmaファイル名] -ao pcm:file=temp.wav
上記コマンドでtemp.wavという名前の一時ファイルが出力される。
wav→mp3
以下のlameコマンドで変換する。
$l lame temp.wav [mp3ファイル名]
上記の第二引数で指定したファイル名でmp3ファイルが出力される。
できあがり
あとは適当にrm temp.wav
で一時ファイルを削除すれば良い。
スクリプト化してみる
スクリプト
流石に一杯あるファイルを一々コマンドでやるのはしんどいので自動化スクリプトを書いてみる。
#!/bin/sh for input in $* do echo input:$input output=`echo $input|sed -e "s/\..*/.mp3/"` mplayer $input -ao pcm:file=temp.wav lame temp.wav $output rm temp.wav echo output:$output done
これをwma2mp3.shとでもしてホームディレクトリにでも置いておく。
使ってみる
例えばどっかのディレクトリ以下にあるwmaファイルを全部mp3に変換する場合は下記のコマンドのようにlsで探してパイプで渡せば良い。
$ ls *.wma|xargs sh ~/wma2mp3.sh
入り組んだディレクトリ構造もls *.wma
をfind ./ -name *.wma
に変えればいけるんじゃないかと思う。
とりあえずこれで音楽ファイルは目的を達せそう。
存外簡単にできた。
今のとこそこまでやろうとは思わないけど、NASにファイル追加されたタイミングでスクリプト叩くようにすれば面白いかも。
動画ファイルはもっと色々面倒くさそうだから悩ましい。
[改訂新版] シェルスクリプト基本リファレンス ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)
- 作者: 山森丈範
- 出版社/メーカー: 技術評論社
- 発売日: 2011/04/27
- メディア: 単行本(ソフトカバー)
- 購入: 9人 クリック: 119回
- この商品を含むブログ (11件) を見る
追記
このスクリプト&起動コマンドだと、ファイル名にスペースが含まれると、引数が別れてしまって別ファイル扱いになり上手く動かない…