ogg2mp3

カーオーディオがオーディオファイル対応のになったので、 いまさらのmp3作り。21世紀になってからエンコードするのは ogg にしかしてない。押し入れにCD探しに行くのも面倒だし、 音質も気にしないのでogg2mp3なんて絶対あるやろとぐうぐるせんせい 呼んだらたくさん当たりすぎ。どれにしようかなてんじんさまの…で えいやっとこの ogg2mp3 にした。

でもって、再エンコードしながら折角のマルチコアが活きてない、 と気になる。ああ、三浦くんが2年生時代に自由課題でこれ作りたくなったわけが わかった。マルチプロセスを生成できるって言えば、makeだな。でも いちいちMakefile書くのはアホやな。ああそうだ、xargsでなんとか なんないかね。

echo ../../AHardDaysNight/*.ogg | xargs -n1 -P4 ogg2mp3

いけた。-PオプションはNetBSD/FreeBSDともにOK。GNUもOK。 Solarisないね…。とか見てたら 同じこと を考えている人がいたようだ。ああ、灯台下暗し、zargsか。

autoload -U zargs
zargs -n1 -P4 -- ../../AHardDaysNight/*.ogg -- ogg2mp3

zargsの-nはプロセスに与える全ての引数の数なので、 最後の起動コマンドに初期引数をつけるときはそれを加算した値にしとく。

zargs -n1 -- * -- echo foo
zargs: argument list too long
zargs -n2 -- * -- echo foo
これならOK。でも -i オプション使うとその個数も余計に入れちゃうようだ。
zargs -n2 -i% -- * -- echo % foo
zargs: argument list too long
zargs -n3 -i% -- * -- echo % foo
これで % の位置に1個ずつ入って実行される。

うーん、まあいっか、zargsはほとんど使わないだろうから。