結論
これを実現する 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 インストール方法
macOS、Linux、Windows Subsystem for Linux (WSL) など Homebrew が使える環境の場合、以下のコマンドで簡単にインストールできます。
brew install ffmpeg
Homebrew をインストールしていない場合は公式サイトの指示に従いインストールしてください。
Windows など Homebrew が使えない環境の場合は WSL を使うのがお勧めです。しかしそれができない、またはしたくない場合は FFmpeg 公式サイトの指示に従い FFmpeg をインストールしてください。
背景
ストリーミング全盛の今、FLAC ファイルを ALAC や MP3 に変換する需要は少ないと思います。しかし、ストリーミングなどでは配信されていない楽曲も多数存在するため、CD 音源データの管理は未だに必要だと思います。
リッピング(取り込み)した CD 音源データをどのように保存するかですが、個人的には、
という 3 点から、FLAC 形式で保存するのがお勧めです。
ではなぜ FLAC を ALAC などに変換する必要があるのかということですが、これは Apple のせいです。
iPhone や Mac のミュージックアプリ(旧 iTunes)では FLAC オーディオファイル再生に非対応です。もちろん FLAC 再生に対応している他の音楽再生アプリを使うこともできます。しかし、iPhone と Mac の連携など Apple 製品のメリットを最大限享受するにはやはり純正のミュージックアプリを使いたいところです。
そこで、Apple のミュージックアプリでも扱えるように FLAC で取り込んだマスターのファイルを ALAC に変換して、Apple 製品上では ALAC ファイルを扱いたいと考えました。
また、FLAC と ALAC のどちらにも対応していない環境を利用する場合や、データ容量を節約したい場合もあるかも知れません。その場合は FLAC を MP3 に変換するのが良いと思います。AAC でも良いのですが MP3 の方がより汎用的だと思います。
MP3 は非可逆圧縮なので音質の低下というデメリットがあります。音質とデータサイズのバランスを取る意味で、個人的には MP3 320kbps CBR に変換するのが多くの場合で最適だと考えています。
FLAC を ALAC や MP3 に変換する場合、FFmpeg を利用する方法が有名だと思います。しかしこの方法には 2 つの課題があります。
課題 1 は説明不要だと思うので、「課題 2. ディレクトリ構造を維持したバッチ処理が面倒」という点について説明します。
リッピングした FLAC ファイルは <アーティスト名>/<アルバム名>/<曲名>.flac
のようなディレクトリ構造を持っていることが多いと思います。このような FLAC データのディレクトリ構造を維持したまま FFmpeg で変換するには恐らくシェルスクリプトなどを駆使する必要があり、なかなか面倒です。
そこで、これらの課題を解決する convertflac を作りました。
convertflac
convertflac は Python 製の CLI で、入力 FLAC オーディオデータのディレクトリ構造とメタデータを維持したまま ALAC や MP3 に変換します。
今回初めて PyPI で Python パッケージを公開してみたのですが、以前のややこしそうなイメージよりはだいぶ分かりやすくなっていたように感じました。パッケージに関するメタデータは基本的に全て pyproject.toml
1 つで完結し、setup.py
や setup.cfg
などは不要です。ビルドにも wheel
コマンドは不要でした。python -m build
のように Python Packaging Authority (PyPA) が提供する build
モジュール経由でビルドできます。アップロードには同様に PyPA 提供の twine
を使いました。(あとは全て pip
コマンドで完結するとより分かりやすい気がしますが…)
ストリーミング全盛の今、需要は少ないとは思いますが、必要な方がいらっしゃいましたらご自由にご利用ください。