カーオーディオがオーディオファイル対応のになったので、 いまさらの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はほとんど使わないだろうから。