さまざまな音楽配信サービスのファイルやネットで配布された音楽ファイルなどを保存していくと PC 内にいろんな形式のファイルが乱雑に転がってしまっている状態になると思います。PC でこれらのファイルの再生するときは VLC などの高機能な万能プレイヤーを使えばファイル形式について気にする必要はありません。
しかしスマートフォンや音楽プレイヤーに移すと再生できないファイルも出てきてしまいます。こうしたときにファイルを一括して特定の圧縮形式にエンコードしてしまいたいのではないでしようか。
本記事はFFmpeg を用いて一発で大量の音声ファイルを変換するコマンドをご紹介いたします。
大本命は超高圧縮率でライセンスの心配がいらないオープンソースな音声圧縮形式「Opus」なのですが、いかんせん普及が全然進んでいません。対応してるプレイヤーがほとんどないのです。YouTube の音声データによく使われるようになってきたのですが、音楽ファイルとして広まるかどうかはまだ未知数で今後に期待したいところです。
現在広く使われている圧縮形式と言えば、 mp3 と m4a (mp4)になります。今回この2つから選んでいくことにします。
また、 Linux には高性能な AACエンコーダに対応した GUI ソフトウェアがないので FFmpeg を用いて変換します。
m4a(AAC) へ変換
Linux の場合選択肢は以下の5つのエンコーダがあります。
- Wine 経由で Apple AAC
- Nero AAC
- FFmpeg 内蔵の AAC
- Fraunhofer AAC
Wine を使って Apple AAC エンコーダを使えなくもないですが変換が遅かったり色々問題もあるようです。 今回の目的を果たしてくれそうなエンコーダは FFmpeg のコマンドラインが使える下の2つになります。
libfdk_aac
が音質良いですよ、と FFmpeg 公式でおすすめされているので Linux で AAC にエンコードしたい場合は Fraunhofer FDK AAC ほぼ一択のようです。Android にも導入されている高性能で実績のあるコーデックです。
Fraunhofer FDK AAC コーデックによるエンコード
FDK AAC は GPL とは違ったライセンスの元でリリースされているので FFmpeg にマージされておらず、自分でビルドしなければなりません。
少々面倒ですが FFmpeg が公式でビルドする方法を載せてくれているので比較的簡単に導入できます。
Arch Linux ならばフル装備の FFmpeg を AUR 経由で簡単にビルドできます。
エンコードしたいファイルが置かれているディレクトリまで移動したあとに下のコマンドを実行します。 .bashrc にコマンドを alias を使って登録しておくと便利です。
mkdir -p outputs && for f in *.*; do ffmpeg -i "$f" -c:a libfdk_aac -vn -b:a 256k "outputs/${f%.*}.m4a"; done
上記のコマンドを解説すると、ディレクトリ下に outputs というディレクトリを作成し、FFmpeg で読み込めそうなファイルを全部読み込んで m4a (AAC) 256Kbps へとエンコードし、 outputs に放り込む仕組みです。
-c:a
オプションでオーディオコーデックを指定します。 -vn
は動画が混じってた場合に取り除いてくれるコマンドオプションです。 -b:a
は固定ビットレート(CBR)です。
ハイファイマニアでもないし、128Kbps の AAC でも全然聴けてしまう耳なのですが、今回は再エンコードしてしまうので念のために 2倍の 256 Kbps にしました。スマートフォンなどの携帯ストレージでも大容量化が進んでこの程度の容量は痛くも痒くもなくなったというのもあります。
FFmpeg ネイティブエンコーダを使う
ここでは FFmpeg のネイティブ AAC エンコーダを利用しています。2016年に安定版がリリースされ、他の AAC エンコーダと遜色ない性能だと公式に発表してますが、自分が使った限りでは FDK AAC よりかなり音質が劣ります。
特に、 64Kbps でそれぞれ比較すると露骨に音質の差がわかります。おすすめはしませんがなにかをインストールしたり特別な設定が必要なく使えるので便利ではあります。
mkdir -p outputs && for f in *.*; do ffmpeg -i "$f" -c:a aac -vn -b:a 256k "outputs/${f%.*}.m4a"; done
VBR (可変ビットレート)も使えますが、このエンコーダではまだ試験段階らしく、 CBR よりも音質が悪くなってしまう可能性があります。
mp3 へと変換する
MP3 で音楽や音声を管理するのも手です。 MP4 はタグ機能が優れていますが MP3 は高い互換性をもっており、様々な機器で再生することができます。これは非常に大きなメリットです。
AAC は Apple が開発に大きく関わっていたということもあり、同じ AAC でも機器によっては再生できないこともあるなど、互換性に難を抱えています。
もう時代遅れと思われがちですが Amazon などのサービスも MP3 で音楽ファイルの販売を行っておりますので、未だ現役で一番使われている圧縮形式だと思います。
それに MP3 320 Kbps と AAC 320 Kbps を聴き比べてみましたが、自分の耳では聞き分けることができませんでした。エンコーダによっては AAC の方が劣っているということもあり得るので音質の面でも必ずしも MP3 が弱いとは限りません。
下記のブログ様で音声圧縮形式の比較検証を載せています。
iTunes の MP3 エンコーダの出来はあまり良くないので LAME エンコーダの使用をおすすめします。
mkdir -p outputs && for f in *.*; do ffmpeg -i "$f" -c:a libmp3lame -vn -b:a 256k "outputs/${f%.*}.mp3"; done
先程のコマンドラインのコーデックと出力する拡張子を改変しただけです。
以上になります。
コメント
初めまして。
調べてみたところ、同じビットレートなら音質がaac>mp3ですから、aacで出力したいです。FFmpeg でaacに変換できますか。