日本語から英語に翻訳して朗読MP3を作る!

プログラミング

Views: 27

Windows × Python × OpenAIで簡単英語学習

英語の発音を耳で確認したり、自分の日本語文を自然な英語で聞きたいと思ったことはありませんか?
今回は、日本語を自動で英語に翻訳し、そのまま自然な英語の音声(MP3)として保存する方法をご紹介します。
使うのは、OpenAIのAPIキー、TTS(Text to Speech)機能とPythonだけです。
Windows 11 Pro 環境で動作確認済みです。
※前提として、OpenAIのAPIキーの料金支払い方法を済ませていることが必要です。これを行っていないとエラーになると思います。
※この手の作業は、お約束ですけれども、自己責任でお願いします。

ステップ1:Pythonをインストール

1. [Python公式サイト](https://www.python.org/downloads/) にアクセス。
2. 「Download Python 3.x.x」をクリックして最新版をダウンロード(例:python-3.14.0-amd64.exe)。
3. 管理者権限で、インストールします。
4. インストール時に「Add Python to PATH」にチェックを入れて「Install Now」。
5. システム環境変数 Path を編集
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python3xx
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python3xx\Scripts
※上記2行を環境変数名の一番上に持ってきておく。
6. インストール後、管理者権限で、コマンドプロンプトを開きなおし、以下を確認します。

python –version

✅ `Python 3.x.x` と表示されればOK!

ステップ2:OpenAIのパッケージをインストール

TTSを使うためのライブラリを入れます。

pip install openai

「Successfully installed openai」と出れば成功です。

ステップ3:OpenAI APIキーを設定

1. https://platform.openai.com/account/api-keys にアクセス。
2. OpenAIアカウントでログイン → 「Create new secret key」 → 表示されたキーをコピー。

ステップ4:スクリプトを作る

メモ帳を開いて以下を貼り付け、「tts_script.py」としてデスクトップに保存します。

from openai import OpenAI
from pathlib import Path

# ✅ ダブルクォーテーションで囲むのが重要!
client = OpenAI(api_key="sk-あなたのAPIキー")

text = (
    "Recently, I was reading a book that an old friend had given me "
    "while listening to a CD from the same friend. Feeling grateful, "
    "I reached out to get back in touch. Today, a new book from that friend "
    "arrived in the mail. I’m truly thankful."
)

out = Path("old_friend_story.mp3")
with client.audio.speech.with_streaming_response.create(
    model="gpt-4o-mini-tts",
    voice="alloy",
    input=text
) as resp:
    resp.stream_to_file(out)

print("✅ Audio saved as:", out)

ステップ5:実践

1. 作業フォルダをデスクトップにする

cd %USERPROFILE%\Desktop

2. 実行

python tts_script.py

3. 結果

✅ Audio saved as: old_friend_story.mp3

と表示されれば成功!
デスクトップに `old_friend_story.mp3` が作成されます。

応用:和文から英訳して一つのMP3を作る

複数の日本語文を一括で英訳+音声化するスクリプトを作ることもできます。
以下のようなCSVを用意(例:`input_ja.csv`)しておきます:

filename,japanese_text
gratitude_01,最近、古い友人からもらったCDを聴きながら、その友人からもらった本を読んでいました。
gratitude_02,今日は、その人からの新しい本が郵便で届きました。本当に感謝しています。
gratitude_03,昔からのつながりを大切にすることの大切さを改めて実感しました。

そして作業フォルダをデスクトップにする

cd %USERPROFILE%\Desktop

次のスクリプト(`batch_translate_tts.py`)を実行すると:

python batch_translate_tts.py

# batch_translate_tts.py
# 日本語CSVを読み込み → 英訳 → 個別MP3 + まとめMP3 を一括生成(会話調)

from openai import OpenAI
from pathlib import Path
import csv
import time

# ★ APIキーの渡し方
# 1) 環境変数 OPENAI_API_KEY を使う: client = OpenAI()
# 2) 直書き: client = OpenAI(api_key="sk-...")  ← ダブルクォーテーション必須
client = OpenAI(api_key="sk-あなたのAPIキー")  # 環境変数方式に変更可能

IN_CSV = Path.home() / "Desktop" / "input_ja.csv"
OUT_DIR = Path.home() / "Desktop" / "mp3_out"
OUT_DIR.mkdir(exist_ok=True)
OUT_LOG = Path.home() / "Desktop" / "output_en.csv"   # 翻訳ログ(英訳テキスト)
COMBINED_MP3 = OUT_DIR / "combined_all.mp3"           # ← まとめMP3のファイル名

def translate_to_en(jp_text: str, retries: int = 3, wait: float = 3.0) -> str:
    """日本語→英語(自然な会話調)。失敗時は簡易リトライ。"""
    prompt = (
        "Translate the following Japanese into natural, conversational English. "
        "Return ONLY the translation text—no quotes, no explanations.\n\n"
        f"Japanese:\n{jp_text.strip()}"
    )
    last_err = None
    for _ in range(retries):
        try:
            resp = client.responses.create(model="gpt-4o-mini", input=prompt)
            en = resp.output_text.strip()
            if en.startswith(("\"", "“", "「", "'")) and en.endswith(("\"", "”", "」", "'")):
                en = en[1:-1].strip()
            return en
        except Exception as e:
            last_err = e
            time.sleep(wait)
    raise RuntimeError(f"Translation failed after retries: {last_err}")

def tts_to_mp3(text_en: str, out_path: Path, retries: int = 3, wait: float = 3.0):
    """英語テキストを会話調でMP3化。失敗時は簡易リトライ。"""
    last_err = None
    for _ in range(retries):
        try:
            with client.audio.speech.with_streaming_response.create(
                model="gpt-4o-mini-tts",
                voice="alloy",  # 日常会話風
                input=text_en,
            ) as response:
                response.stream_to_file(out_path)
            return
        except Exception as e:
            last_err = e
            time.sleep(wait)
    raise RuntimeError(f"TTS failed after retries: {last_err}")

def main():
    if not IN_CSV.exists():
        raise FileNotFoundError(f"Input CSV not found: {IN_CSV}")

    english_list = []  # [(filename, english_text)]
    need_header = not OUT_LOG.exists()

    # 1) 翻訳+個別MP3
    with OUT_LOG.open("a", encoding="utf-8", newline="") as logf:
        writer = csv.writer(logf)
        if need_header:
            writer.writerow(["filename", "english_text"])

        with IN_CSV.open("r", encoding="utf-8", newline="") as f:
            reader = csv.DictReader(f)
            for row in reader:
                name = (row.get("filename") or "").strip()
                jp = (row.get("japanese_text") or "").strip()
                if not name or not jp:
                    print(f"⚠️  Skipped an empty row: {row}")
                    continue

                print(f"→ Translating: {name}")
                en = translate_to_en(jp)
                english_list.append((name, en))

                out_file = OUT_DIR / f"{name}.mp3"
                print(f"   TTS to: {out_file.name}")
                tts_to_mp3(en, out_file)

                writer.writerow([name, en])
                print(f"✅ Done: {out_file}")

    # 2) まとめMP3(順番はCSVの行順)
    if english_list:
        # 文章をそのまま順に連結。段落の間に空行を2つ入れて自然な間を作る。
        combined_text = "\n\n\n".join(en for _, en in english_list)

        print(f"\n→ Creating combined MP3 (no numbers, no instructions): {COMBINED_MP3.name}")
        tts_to_mp3(combined_text, COMBINED_MP3)
        print(f"🎧 Combined MP3 saved: {COMBINED_MP3}")

    print(f"\n🎉 All done! MP3s → {OUT_DIR}")
    print(f"📝 English log → {OUT_LOG}")

if __name__ == "__main__":
    main()

* 各文を英訳+個別MP3を生成
* さらに3つの英文を1本にまとめた `combined_all.mp3` も自動出力
* 翻訳結果は `output_en.csv` に記録

すべてデスクトップで完結します。

完成!

これで、
💬 日本語 → 自然な英語翻訳
🎙️ 英語朗読(会話調MP3)
が自動で生成できるようになりました。

英語のリスニング練習、発音確認、スピーチ原稿のチェックなど、幅広く活用できます!
※この「応用」は、「input_ja.csv」の文章を書き換えることで、何度でも利用することができます。
※「input_ja.csv」は「gratitude_04,・・・」と加えることもできます。

まとめ

| 手順 | 内容 | コマンド |
| — | ————- | —————————— |
| 1 | Pythonを入れる | `python –version` |
| 2 | openaiパッケージ導入 | `pip install openai` |
| 3 | APIキー設定 | `setx OPENAI_API_KEY “sk-…”` |
| 4 | スクリプト作成 | `tts_script.py` |
| 5 | 音声生成 | `python tts_script.py` |

おまけ

* 声の種類:`voice=”alloy”`, `”verse”`, `”sage”`
* 読み上げ速度やトーンも調整可能
* 日本語文から直接、自然な英語発音を学ぶ練習にも最適

タイトルとURLをコピーしました