Logic Proで作ったBGMをGodot用のOGGへ変換する方法【FFmpeg・Vorbis・libvorbisの違いも解説】

ゲーム制作を進める中で、Logic Proで作成したBGMをGodotへ取り込みたいと思い、OGG形式へ変換してみました。
調べてみると「FFmpegで変換すればOK」と書かれている記事が多いのですが、実際にやってみるとエラーが発生。
今回は、私の環境で発生した原因と解決方法、さらに「Vorbis」「libvorbis」の違いをまとめます。FFmpegで利用できるエンコーダはビルド構成によって異なるため、同じコマンドを試す前に自分の環境を確認してください。
1. Godot用BGMにOgg Vorbisを選んだ理由
Godotは以下のような音声ファイルを扱えます。
- WAV
- OGG Vorbis
- MP3
GodotはWAV、Ogg Vorbis、MP3をインポートできます。今回は、WAVよりファイルサイズを抑えやすく、音楽や長い音声の選択肢として公式ドキュメントでも案内されているOgg Vorbisを選びました。
理由は以下の通りです。
- ファイルサイズが小さい
- Godotが対応している
- ループ設定をGodotのインポート画面で調整できる
一方、Ogg VorbisはWAVより再生時のCPU負荷が高くなります。短い効果音や同時再生数が多い用途ではWAVも候補になるため、用途に応じて選びます。
2. FFmpegと利用できるエンコーダを確認する
ターミナルで次のコマンドを実行します。
ffmpeg -version
バージョン情報が表示されればインストール済みです。
Homebrewを利用していて、FFmpegが未導入なら次のコマンドでインストールできます。
brew install ffmpeg
インストール方法や含まれるライブラリは時期によって変わります。続けて、利用できるVorbisエンコーダを確認します。
ffmpeg -encoders | grep vorbis
3. libvorbisで変換を試す
一般的によく紹介されているのがこちら。
ffmpeg -i loop_theme_test.wav -c:a libvorbis -q:a 5 loop_theme_test.ogg
ところが実際には、
Unknown encoder 'libvorbis'
というエラーになりました。
私の環境では、次のエラーが表示されました。
FFmpegの設定を確認すると、
--enable-libopus
--enable-libmp3lame
などは有効になっていましたが、
--enable-libvorbis
がありませんでした。
ffmpeg -versionに表示される構成を確認すると、--enable-libvorbisがありませんでした。つまり、今回使用したFFmpegには、
libvorbisエンコーダが含まれていなかった
ということです。これは当時の私の環境での結果であり、現在のHomebrew版を含むすべてのFFmpegに当てはまるわけではありません。
4. FFmpeg内蔵Vorbisで変換する
そこでFFmpeg内蔵のVorbisエンコーダを使ってみました。
ffmpeg -i loop_theme_test.wav -c:a vorbis -q:a 5 loop_theme_test.ogg
すると今度は、
The encoder 'vorbis' is experimental
というエラー。
使用したバージョンではFFmpeg内蔵VorbisがExperimental扱いだったため、
-strict -2
を追加する必要があります。
最終的に成功したコマンドはこちら。
ffmpeg -i loop_theme_test.wav -c:a vorbis -q:a 5 -strict -2 loop_theme_test.ogg
これで正常にOGGファイルが生成され、Godotでも問題なく再生できました。
5. 生成したOGGを確認する
ファイルができたか確認。
ls -lh loop_theme_test.ogg
再生確認。
ffplay loop_theme_test.ogg
ファイルが生成され、再生できることを確認します。さらにGodotへ読み込み、意図した音量・ループ・音質になっているかも確認してください。
6. Vorbisとlibvorbisの違い
変換できたものの、
「Vorbisとlibvorbisって何が違うの?」
という疑問も出てきました。
実は、この2つは少し意味が違います。
Vorbisとは
Vorbisは音声圧縮方式(コーデック)の名前です。
例えば、
- MP3
- AAC
- Opus
- Vorbis
と同じ仲間になります。
一方で、
Oggは音声などを格納するコンテナ形式です。
つまり、
loop_theme_test.ogg
というファイルは、
OGG
└─ Vorbisで圧縮された音声
という構造になっています。
libvorbisとは
libvorbisは
Xiph.Orgが提供するVorbisの参照実装ライブラリ
です。
昔から定番で、
-c:a libvorbis
がよく使われています。
FFmpegからは外部ライブラリを利用するエンコーダとして扱われ、ビルド時に有効化されている場合に使えます。
FFmpegのvorbisエンコーダとは
こちらは
FFmpegが独自に実装している
内蔵Vorbisエンコーダ
です。
コマンドでは
-c:a vorbis
になります。
音質差は実際のファイルで確認する
エンコーダや品質設定、音源によって結果は変わります。今回作成した約1分のBGMを私が聞いた範囲では、気になる違いは感じませんでした。ただし、一般的な音質差として断定はせず、実際に使う音源を同じ条件で変換して比較するのが確実です。
ファイルサイズも条件で変わる
ファイルサイズも、エンコーダ、品質設定、曲の内容によって変わります。今回の結果だけで一定の差とは言えないため、ls -lhなどで生成物を比較します。
Godotへ読み込む前に形式を確認する
Godotから見れば、
loop_theme_test.ogg
として読み込まれるだけです。
内部が
- libvorbis
- FFmpeg native Vorbis
どちらのエンコーダで作成した場合も、中身がOggコンテナのVorbis音声で、Godotが正常に読み込めることを確認します。.ogg拡張子でも別の音声コーデックが入っている場合があるため、拡張子だけでは判断できません。
7. 今回採用した開発中の運用
今回の制作では、次の運用にしました。
開発中
- Logic Pro → WAV書き出し
- Godotへそのまま取り込み
完成版
- WAV → OGG Vorbisへ変換
- 配布版に組み込む
開発中は何度も修正するため、私の作業ではWAVのままの方が手間を減らせました。
配布前にまとめてOgg Vorbisへ変換し、容量、音質、ループを確認します。プロジェクトの規模や対象端末によって適した形式は異なります。
8. まとめ
今回学んだポイントは次の通りです。
- GodotはWAV、Ogg Vorbis、MP3に対応している
- FFmpegで使えるエンコーダは
ffmpeg -encodersで確認する - 私の環境では
libvorbisがなく、内蔵vorbisを使った - 使用したバージョンではExperimentalエラーに
-strict -2が必要だった - 変換後はFFmpegだけでなくGodotでも再生、音質、ループを確認する
ゲーム制作では「変換するだけ」と思っていた工程でも、実際にやってみると意外とハマるポイントがありました。
同じエラーで困っている方の参考になれば幸いです。
