macOSのコマンドラインから音ファイル変換

macOSにはafで始まる名前の、オーディオファイルを操作するコマンドラインアプリが入っています(afclip、afconvert、afhash、afida、afinfo、afplayの6つ)。僕がよく使うのはafinfoとafconvertです。

afinfoは以下のようにオーディオファイルの情報を表示してくれます。中身が2チャンネル、標本化周波数44100 HzのFLACファイルだということがわかります。もともと16ビットの音源を変換したものであるとか、長さが約37秒だということも読み取れます。

% afinfo sound.flac 
File:           sound.flac
File type ID:   flac
Num Tracks:     1
----
Data format:     2 ch,  44100 Hz, flac (0x00000001) from 16-bit source, 4096 frames/packet
Channel layout: Stereo (L R)
estimated duration: 37.565238 sec
audio bytes: 3215398
audio packets: 405
bit rate: 683830 bits per second
packet size upper bound: 11221
maximum packet size: 11221
audio data file offset: 8358
optimized
audio 1656627 valid frames + 0 priming + 2253 remainder = 1658880
source bit depth: I16
----

afconvertは音ファイルのフォーマット変換に使います。その時には、出力されるファイルフォーマットとデータフォーマットの二つを指定しないといけません。というのも、例えば.wavファイルの場合、ファイルフォーマットはWAVE規格で決まっていて、一般的な整数型のPCMだけでなく、浮動小数点数やA-Lawのようなデータも扱えるようになっているからです。同様に.m4aファイルでも(afconvert -hfとすると、変換できるファイルとデータのフォーマット組み合わせの一覧が出てきます)。

WAVEファイルをApple Losslessに変換するには、以下のようにします。ファイルフォーマットはm4af (Apple MPEG-4 Audio)で、データフォーマットはalac (Apple Lossless Audio Codec)です。よく使われているファイルの拡張子はm4aです。

% afconvert -f m4af -d alac input.wav -o output.m4a

一方でFLACやAC-3のように、単一のデータフォーマットしか扱わないファイルフォーマットもあります。その時にはデータフォーマットは省略できます。

% afconvert -f flac input.wav -o output.flac