そんな今日この頃でして、、、

コード書いたり映画みたり。努力は苦手だから「楽しいこと」を探していきたい。

CentOSでwmaファイルをmp3に変換する

ゴールデンウィークは有給使ってガッツリ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 *.wmafind ./ -name *.wmaに変えればいけるんじゃないかと思う。


とりあえずこれで音楽ファイルは目的を達せそう。

存外簡単にできた。

今のとこそこまでやろうとは思わないけど、NASにファイル追加されたタイミングでスクリプト叩くようにすれば面白いかも。


動画ファイルはもっと色々面倒くさそうだから悩ましい。

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

[改訂新版] シェルスクリプト基本リファレンス  ??#!/bin/shで、ここまでできる (WEB+DB PRESS plus)

追記

このスクリプト&起動コマンドだと、ファイル名にスペースが含まれると、引数が別れてしまって別ファイル扱いになり上手く動かない…