窓を作っては壊していた人のブログ

この謎のブログタイトルの由来を知るものはもういないだろう

Macで音声ファイルを変換する(m4a -> wav編)

人の声で声質変換したくなって雑にこの文章読んでってお願いしたらファイルフォーマットが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を覚えると本当に作業が楽になって良い。