Blufflog

This blog is bluff.

ディレクトリ構造を維持したまま FLAC を ALAC や MP3 に変換する

結論

これを実現する convertflac という CLI を作りました。

brew install ffmpeg # FFmpeg をインストール。インストール済みなら省略
pip install convertflac
convertflac <入力 FLAC ファイルのあるディレクトリのパス>

FFmpeg コマンド

to ALAC (Apple Lossless Audio Codec)

ffmpeg -i <入力 FLAC ファイルのパス> -codec:a alac -codec:v copy -n <出力 ALAC ファイルのパス>.m4a

to MP3 320kbps CBR

ffmpeg -i <入力 FLAC ファイルのパス> -ab 320k -codec:v copy -n <出力 MP3 ファイルのパス>.mp3

コマンド解説

オプション 説明
-i <入力 FLAC ファイルのパス> 入力ファイルのパスを指定
-ab 320k 音声データのビットレートを 320kbps に指定
-codec:a alac 変換先コーデックを ALAC に指定
-codec:v copy アルバムアートワーク画像を変換せず維持(参考
-n ファイルを上書きしない

FFmpeg インストール方法

macOSLinuxWindows Subsystem for Linux (WSL) など Homebrew が使える環境の場合、以下のコマンドで簡単にインストールできます。

brew install ffmpeg

Homebrew をインストールしていない場合は公式サイトの指示に従いインストールしてください。

Windows など Homebrew が使えない環境の場合は WSL を使うのがお勧めです。しかしそれができない、またはしたくない場合は FFmpeg 公式サイトの指示に従い FFmpeg をインストールしてください。

背景

ストリーミング全盛の今、FLAC ファイルを ALAC や MP3 に変換する需要は少ないと思います。しかし、ストリーミングなどでは配信されていない楽曲も多数存在するため、CD 音源データの管理は未だに必要だと思います。

リッピング(取り込み)した CD 音源データをどのように保存するかですが、個人的には、

  1. ロスレス可逆圧縮
  2. メタデータを多数保持できる
  3. ベンダーロックインのリスクが低く広く使われている

という 3 点から、FLAC 形式で保存するのがお勧めです。

ではなぜ FLAC を ALAC などに変換する必要があるのかということですが、これは Apple のせいです。

iPhoneMac のミュージックアプリ(旧 iTunes)では FLAC オーディオファイル再生に非対応です。もちろん FLAC 再生に対応している他の音楽再生アプリを使うこともできます。しかし、iPhoneMac の連携など Apple 製品のメリットを最大限享受するにはやはり純正のミュージックアプリを使いたいところです。

そこで、Apple のミュージックアプリでも扱えるように FLAC で取り込んだマスターのファイルを ALAC に変換して、Apple 製品上では ALAC ファイルを扱いたいと考えました。

また、FLAC と ALAC のどちらにも対応していない環境を利用する場合や、データ容量を節約したい場合もあるかも知れません。その場合は FLAC を MP3 に変換するのが良いと思います。AAC でも良いのですが MP3 の方がより汎用的だと思います。

MP3 は非可逆圧縮なので音質の低下というデメリットがあります。音質とデータサイズのバランスを取る意味で、個人的には MP3 320kbps CBR に変換するのが多くの場合で最適だと考えています。

FLAC を ALAC や MP3 に変換する場合、FFmpeg を利用する方法が有名だと思います。しかしこの方法には 2 つの課題があります。

  1. FFmpeg のオプションなどを覚えて毎回入力するのが面倒
  2. ディレクトリ構造を維持したバッチ処理が面倒

課題 1 は説明不要だと思うので、「課題 2. ディレクトリ構造を維持したバッチ処理が面倒」という点について説明します。

リッピングした FLAC ファイルは <アーティスト名>/<アルバム名>/<曲名>.flac のようなディレクトリ構造を持っていることが多いと思います。このような FLAC データのディレクトリ構造を維持したまま FFmpeg で変換するには恐らくシェルスクリプトなどを駆使する必要があり、なかなか面倒です。

そこで、これらの課題を解決する convertflac を作りました。

convertflac

convertflac は Python 製の CLI で、入力 FLAC オーディオデータのディレクトリ構造とメタデータを維持したまま ALAC や MP3 に変換します。

今回初めて PyPIPython パッケージを公開してみたのですが、以前のややこしそうなイメージよりはだいぶ分かりやすくなっていたように感じました。パッケージに関するメタデータは基本的に全て pyproject.toml 1 つで完結し、setup.pysetup.cfg などは不要です。ビルドにも wheel コマンドは不要でした。python -m build のように Python Packaging Authority (PyPA) が提供する build モジュール経由でビルドできます。アップロードには同様に PyPA 提供の twine を使いました。(あとは全て pip コマンドで完結するとより分かりやすい気がしますが…)

ストリーミング全盛の今、需要は少ないとは思いますが、必要な方がいらっしゃいましたらご自由にご利用ください。