はじめに

ゲーム開発を始めて、VOICEVOXによる音声作成をする機会が増え個別にmp3へ変換してたのですが、手間がかかるのでAIに一括変換スクリプトを作成してもらいました。

尚且つ、mp3より、OGGの方が良いとの事で、その詳細も聞いてみました。

MP3とOGGの違い(比較)

user icon
「mp3」より「ogg」の方が軽いのでしょうか?
VOICEVOXで音声の書き出しは、wavのみなので、軽量のogg出力スクリプト作成して欲しいです。

ai icon

はい、素晴らしい視点です!

✅ MP3とOGGの違い:ざっくり比較

項目 MP3 OGG(Vorbis)
対応環境 ほぼ全ブラウザで対応 ほとんどの主要ブラウザ対応(iOS Safari除く場合あり)
音質 中音質向け(標準) 同ビットレートでMP3より高音質になる場合が多い
ファイルサイズ 同じ音質ならMP3より小さくできる 非常に高効率な圧縮(特に音声や効果音向き)
特徴 古くからの定番 フリー・オープンな規格で高音質、軽量

つまり:
・ゲーム用途の効果音や短い台詞なら、OGGの方が軽くて高音質になる可能性大!
・Safari(特にiOS)でOGGが鳴らないケースがあるので、互換用にMP3も持っておくと完璧。

(WAV)→ OGG変換スクリプト

以下は、VOICEVOXで書き出したWAVファイルを .ogg に一括変換するスクリプトです:

🔧 準備:ffmpegがインストールされている必要があります(パスが通っていればOK)

 🔁 convert_to_ogg.py

import os
import subprocess

input_folder = "input_wav"    # WAVファイルを入れるフォルダ
output_folder = "output_ogg"  # 出力先フォルダ

os.makedirs(output_folder, exist_ok=True)

for filename in os.listdir(input_folder):
    if filename.endswith(".wav"):
        wav_path = os.path.join(input_folder, filename)
        ogg_filename = os.path.splitext(filename)[0] + ".ogg"
        ogg_path = os.path.join(output_folder, ogg_filename)

        cmd = [
            "ffmpeg", "-i", wav_path,
            "-c:a", "libvorbis", "-q:a", "4",  # -q:a 4は中音質(0〜10で調整可)
            ogg_path
        ]
        subprocess.run(cmd)
        print(f"✅ Converted: {ogg_filename}")

使い方

  1. VOICEVOXで .wav を保存(例:input_wav/option.wav)
  2. このスクリプトを実行(convert_to_ogg.py)
  3. output_ogg/ フォルダに .ogg が出力されます!

その他の変換設定

  • 低音質にしたい → “-q:a”, “2”(更にサイズ削減)
  • 音質優先 → “-q:a”, “6” など調整可能

このスクリプト、今後何度も使い回せますし、ゲーム開発のワークフローにも組み込めます!

必要なら .bat ファイル化してダブルクリックで変換できるようにもできますよ。

他にも「MP3とOGGを同時に生成」や「VOICEVOXから直接自動変換」の拡張も可能です。

ドラッグアンドドロップに対応

user icon
ありがとうございます。
ドラッグアンドドロップで変換できるようにしてもらえますか?

ai icon
もちろんです!
VOICEVOXで書き出した .wav ファイルを ドラッグ&ドロップで .ogg に一括変換できるスクリプトを用意しました。

✅ 機能概要

  • Windows用の Python スクリプト(.py)
  • .wav ファイルをスクリプトにドラッグ&ドロップするだけで .ogg に変換
  • 元ファイルと同じフォルダに .ogg を出力(拡張子だけ変わる)

 スクリプトファイル:wav_to_ogg_dragdrop.py

import sys
import os
import subprocess

def convert_wav_to_ogg(wav_path):
    if not wav_path.lower().endswith(".wav"):
        print(f"❌ 対象外のファイル: {wav_path}")
        return

    output_path = os.path.splitext(wav_path)[0] + ".ogg"

    cmd = [
        "ffmpeg", "-i", wav_path,
        "-c:a", "libvorbis", "-q:a", "4",  # 音質指定(0~10:4は中程度)
        output_path
    ]
    try:
        subprocess.run(cmd, check=True)
        print(f"✅ 変換完了: {output_path}")
    except subprocess.CalledProcessError as e:
        print(f"❌ エラー: {e}")

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("⚠️ WAVファイルをこのスクリプトにドラッグ&ドロップしてください。")
    else:
        for wav_file in sys.argv[1:]:
            convert_wav_to_ogg(wav_file)

関連リンク