人の声で声質変換したくなって雑にこの文章読んでってお願いしたらファイルフォーマットがm4aで届いた。 確かにこちらでフォーマットを指定していなかったなーと反省しながら、wavにどうやって変換しようかなぁと考えたのでメモ。
検討したツール
動画も音声もgifファイルだってなんでもござれの万能な子。 毎回オプション忘れるからググる程度に扱い難しいなーと思っている。 なぜか作業用マシンに入っていなかったので対象外。
- sox (Sound eXchange)
大学時代研究でお世話になったツール。 サンプリングレートを変えれたり、soxiコマンドで音声ファイルの情報がすぐに見れたりで音声扱うならこれって感じのツール。 これ使おうかなと思ったら
sox FAIL formats: no handler for file extension `m4a'
あれーなかったけ……ってことで今回は m4a -> wav の変換では使わない。
- afconvert
Macに標準でついてる音声ファイルの変換アプリケーション。 Macで録音したりするとm4aで吐かれたりするのもあるってことで、ちゃんとm4aファイルを扱える。 未だに全オプションは使ったことがない程度にhelp叩いた時にクソ長いhelpが流れてくる。 今回はこれを使う。
m4a -> wavをする
helpを一部抜粋すると
General options: { -d | --data } data_format[@sample_rate][/format_flags][#frames_per_packet] [-][BE|LE]{F|[U]I}{8|16|24|32|64} (PCM) e.g. BEI16 F32@44100 or a data format appropriate to file format (see -hf) format_flags: hex digits, e.g. '80' Frames per packet can be specified for some encoders, e.g.: samr#12 A format of "0" specifies the same format as the source file, with packets copied exactly. A format of "N" specifies the destination format should be the native format of the lossless encoded source file (alac, FLAC only) Output file options: { -f | --file } file_format use -hf for a complete list of supported file/data formats
となっているので、とりあえずm4aからwavの変換だけをするのであれば
afconvert -f WAVE -d LEI16 input.m4a output.wav
で出来てしまう。 本当に簡単。
ついでにサンプリングレートをsoxで変換しようと思ったらターゲットのファイルのサンプリングレートと一致していたので今回はスキップ。
フォルダ内のm4aを一括でwavにするには
for f in `ls *.m4a`; do afconvert -f WAVE -d LEI16 $f ${f%.m4a}.wav; done
こんな感じで回せばおしまい。 いやーshellを覚えると本当に作業が楽になって良い。