OpenAI o3-miniとGoogle TTS使って朝のニュースをポッドキャストにする

# はじめに

今朝 o3-miniが公開されました。

https://openai.com/index/openai-o3-mini/

今回の特徴としてはプログラミングが注目されていますが、個人的にはChatGPTで検索エンジンと組み合わせて使えることが新しいことでした。

今回はこれを使ってニュースをポッドキャスト形式の音声データに変換することを試してみました。

# ステップ1: ニュースをまとめる

ChatGPTのo3-miniに以下のようなプロンプトを投げます。（何回かやったあとにo3-mini自身にプロンプト生成させました）

```
あなたは、ニュースの要約に優れたニュースキャスターです。毎朝、最新の日本および国際ニュースを以下の条件に沿って、指定されたカテゴリごとにまとめ、全体で約3分間のポッドキャスト形式の原稿を作成してください。

【基本条件】

構成
 - 【オープニング】
  ・ 当日の日時（例：「2025年2月○日」）を明記し、本日のニュースの概要と、まとめるカテゴリを簡潔に紹介する。
 - 【カテゴリごとのニュース】
  ・ 各カテゴリ【{カテゴリ1}】【{カテゴリ2}】【{カテゴリ3}】（必要に応じてカテゴリ数を増減可）について、最新のニュースをピックアップし、見出しと簡潔な解説を記述する。
   ※ 各カテゴリには、関連するニュースソース（例：NHK、FNN、朝日新聞など）の情報があれば簡単に出典を示す。
 - 【エンディング】
  ・ 詳細は各公式発表や主要メディアをご確認くださいと促し、リスナーに感謝の意を述べる。
スタイル
 - 聞き取りやすい口語体で、論理的かつ慎重な表現を用いる。
 - 専門用語は必要に応じて平易な表現に置き換える。
 - 各セグメントは短く簡潔にまとめる。
実行時の指示
 - 毎回、まとめるカテゴリを以下のように指定してください。
  【例】
   カテゴリ1：政治
   カテゴリ2：経済
   カテゴリ3：社会

今日のニュースをWebで検索し、【政治】【経済】【社会】【テクノロジー】の3カテゴリで、3分間のポッドキャスト形式にまとめてください。
```

すると、いい感じにピックアップしてくれます。ただし、テクノロジーのRapidusのニュースは11/20のもので最新ではありませんでした。


> 以下は、2025年2月1日（金）の最新ニュースをもとに作成した、約3分間のポッドキャスト原稿です。
> 
> ――――――――――――――――――――――――――――――――――――――――――――――――――
> 【オープニング】
> 
> みなさん、おはようございます。今日は2025年2月1日、金曜日の朝のニュースをお届けします。今回のポッドキャストでは、【政治】【経済】【社会】【テクノロジー】の4つの分野から、国内外の注目ニュースを簡潔にまとめていきます。さっそく、各カテゴリーの見どころをご紹介していきましょう。
> 
> ――――――――――――――――――――――――――――――――――――――――――――――――――
>【政治ニュース】
>
> まずは政治から。本日、アメリカのトランプ政権が、2月1日付でメキシコ、カナダ、そして中国に対して新たな関税措置を開始すると発表しました。具体的には、メキシコとカナダには25％、中国には10％の関税が課される見込みです。ホワイトハウスの報道官は、不法移民や違法薬物の流入を理由に、この措置が必要であると強調しています。今後、国際貿易環境や各国の反発の動きがどのように展開するか、注目が集まっています。 ￼
> 
> ――――――――――――――――――――――――――――――――――――――――――――――――――
> 【経済ニュース】
> 
> 次に経済です。日本政府は、2025年度に向けて、半導体スタートアップ「Rapidus」に約2000億円、すなわち約13億ドルの大規模な投資を行う計画が明らかになりました。この投資は、Rapidusが2027年の商業生産開始を目指すための支援として位置付けられ、国内の先端技術・半導体産業の競争力強化につながると期待されています。国際的なサプライチェーンの再編も背景に、今後の経済成長戦略として大きな注目を浴びています。 ￼
> 
> ――――――――――――――――――――――――――――――――――――――――――――――――――
> 【社会ニュース】
> 
> 続いて、社会分野です。本日、東京都心近郊では中央自動車道で4台の車両が絡む多重事故が発生し、トラック運転手ら12名が軽傷を負ったとの報道がありました。事故の詳細はまだ調査中ですが、現場では迅速な救助活動が行われ、警察も事故原因の究明に向けた捜査を進めています。交通安全への関心が一層高まる中、各自治体や企業が安全対策の見直しを迫られる結果となりそうです。 ￼
> 
> ――――――――――――――――――――――――――――――――――――――――――――――――――
> 【テクノロジーニュース】
> 
> 最後にテクノロジー分野です。世界各国でAI技術の急速な進展が話題となる中、日本国内でも先端技術への注目が集まっています。先ほどご紹介したRapidusへの大規模投資は、半導体分野における国内技術革新の一端を担うものです。また、各国でAIの活用やデジタルトランスフォーメーションに向けた規制緩和の動きが見られる中、企業や研究機関は安全性と倫理面にも配慮しながら、次世代技術の開発に取り組んでいます。これからのテクノロジーは、経済や社会の変革を加速させる重要な鍵となるでしょう。 ￼
> 
> ――――――――――――――――――――――――――――――――――――――――――――――――――
> 【エンディング】
> 
> 以上、本日のニュースを【政治】【経済】【社会】【テクノロジー】の4分野にわたってお伝えしました。詳しい内容や最新の動向は、各公式発表や主要メディアの報道をご確認ください。最後までお聞きいただき、ありがとうございました。次回も引き続き、皆さまに有益な情報をお届けしてまいります。
> 
> ――――――――――――――――――――――――――――――――――――――――――――――――――

参考までに同じプロンプトをGPT-4oに投げた場合は以下のようになります。

> おはようございます。今日は2025年2月1日、土曜日です。本日のニュースを、政治、経済、社会、テクノロジーの各カテゴリに分けてお伝えします。
> 
> 【政治】
> 
> 米国の多様性推進プログラムに変化の兆し
> 
> 1月20日にトランプ米大統領が就任し、連邦政府機関での多様性、公平性、包摂性（DEI）プログラムを廃止する大統領令に署名しました。これに先立ち、メタやウォルマートなどの大企業もDEIプログラムの縮小や廃止を進めており、企業の優先順位に変化が見られます。  ￼
> 
> 【経済】
> 
> 世界の政治・経済日程（2025年2～4月）
> 
> 日本貿易振興機構（JETRO）は、2025年2月から4月にかけての世界の政治・経済日程を発表しました。2月3日にインドネシアの1月消費者物価指数（CPI）の発表、2月5日にタイの1月CPI発表、2月5日から7日にかけてインド準備銀行の金融政策決定会合が予定されています。  ￼
> 
> 【テクノロジー】
> 
> 2025年VivaTech信頼度バロメーター発表
> 
> VivaTechは、アメリカとヨーロッパにおけるテクノロジーとイノベーションに対する信頼度を測る「VivaTech信頼度バロメーター」の第2版を発表しました。この調査は、フランス、ドイツ、イギリス、スペイン、イタリアなどのヨーロッパ諸国と、アメリカ合衆国、カナダを対象としています。  ￼
> 
> 【エンディング】
> 
> 以上、本日のニュースをお伝えしました。詳細は各公式発表や主要メディアをご確認ください。ご視聴いただき、ありがとうございました。

ピックアップされているニュースがちょっとイマイチです。

# Step2. 読み上げスクリプトを作る

このまま読み上げさせても良いのですが、ChatGPTの日本語読み上げはカタコトだったり、不要な装飾部分も読んでしまって、イマイチなので、Google TTSを使って読み上げさせてみます。そのためのSSML形式のスクリプトをo3-miniに以下のプロンプトで書かせます。

```
Google TTSで読み上げたいのでSSML形式のスクリプトを書いて、英語の名詞はカタカナで表現して。
```

すると以下のような読み上げスクリプトを作成されます。

```xml
<speak>
  <p>
    
皆さん、おはようございます。今日は2025年2月1日、金曜日の朝のニュースをお届けします。

    
今回のポッドキャストでは、政治、経済、社会、テクノロジーの四分野から、国内外の注目ニュースを簡潔にまとめていきます。

    
早速、各分類の見どころをご紹介していきましょう。

  </p>
  <break time="500ms"/>
  <p>
    
【政治ニュース】

    
まずは政治から。本日、米国のトランプ政権が、2月1日付でメキシコ、カナダ、そして中国に対して新たな関税措置を開始すると発表しました。

    
具体的には、メキシコとカナダには25％、そして中国には10％の関税が課される見込みです。

    
ホワイトハウスの報道官は、不法移民や違法薬物の流入を理由に、この措置が必要であると強調しています。

    
今後、国際貿易環境や各国の反発の動向がどのように展開するか、注目が集まっています。

  </p>
  <break time="500ms"/>
  <p>
    
【経済ニュース】

    
次に経済です。日本政府は、2025年度に向けて、半導体スタートアップ「ラピダス」に約2000億円、すなわち約13億ドルの大規模な投資を行う計画が明らかになりました。

    
この投資は、ラピダスが2027年の商業生産開始を目指すための支援として位置付けられ、国内の先端技術・半導体産業の競争力強化につながると期待されています。

    
国際的なサプライチェーンの再編も背景に、今後の経済成長戦略として大きな注目を浴びています。

  </p>
  <break time="500ms"/>
  <p>
    
【社会ニュース】

    
続いて、社会分野です。本日、東京都心近郊では中央自動車道において、四台の車両が絡む多重事故が発生し、トラック運転手ら十二名が軽傷を負いました。

    
事故の詳細はまだ調査中ですが、現場では迅速な救助活動が行われ、警察も事故原因の究明に向けた捜査を進めています。

    
交通安全への関心が一層高まる中、各自治体や企業が安全対策の見直しを迫られる結果となりそうです。

  </p>
  <break time="500ms"/>
  <p>
    
【テクノロジーニュース】

    
最後に、テクノロジー分野です。世界各国でAI技術の急速な進展が話題となる中、日本国内でも先端技術への注目が集まっています。

    
先ほどご紹介したラピダスへの大規模投資は、半導体分野における国内技術革新の一端を担うものです。

    
また、各国でAIの活用やデジタルトランスフォーメーションに向けた規制緩和の動向が見られる中、企業や研究機関は安全性と倫理面にも配慮しながら、次世代技術の開発に取り組んでいます。

    
これからのテクノロジーは、経済や社会の変革を加速させる重要な鍵となるでしょう。

  </p>
  <break time="500ms"/>
  <p>
    
【エンディング】

    
以上、本日のニュースを政治、経済、社会、テクノロジーの四分野にわたってお伝えしました。

    
詳しい内容や最新の動向は、各公式発表や主要メディアの報道をご確認ください。

    
最後までお聞きいただき、ありがとうございました。次回も引き続き、皆様に有益な情報をお届けしてまいります。

  </p>
</speak>
```

# Step3. Google TTS APIを使ってmp3に変換する

最後に音声データを生成します。以下のようなスクリプトを（GitHub Copilot Editに）書かせて実行するとmp3ファイルが出力されます。

注: 実行にはGoogle Cloudのプロジェクトが必要です。

```python
"""
ニュース読み上げツール

GoogleのTTS APIを使用して、SSML形式のXMLファイルからmp3ファイルを生成するツール
"""

import os
from google.cloud import texttospeech


def synthesize_speech(ssml_text, output_file):
    client = texttospeech.TextToSpeechClient()
    input_text = texttospeech.SynthesisInput(ssml=ssml_text)
    voice = texttospeech.VoiceSelectionParams(
        language_code="ja-JP", ssml_gender=texttospeech.SsmlVoiceGender.NEUTRAL
    )
    audio_config = texttospeech.AudioConfig(
        audio_encoding=texttospeech.AudioEncoding.MP3
    )
    response = client.synthesize_speech(
        input=input_text, voice=voice, audio_config=audio_config
    )
    with open(output_file, "wb") as out:
        out.write(response.audio_content)
    print(f'Audio content written to "{output_file}"')


def main():
    input_file = "script.xml"
    output_file = "output.mp3"
    if not os.path.exists(input_file):
        print(f'Input file "{input_file}" does not exist.')
        return
    with open(input_file, "r", encoding="utf-8") as file:
        ssml_text = file.read()
    synthesize_speech(ssml_text, output_file)


if __name__ == "__main__":
    main()
```

生成された音声

https://drive.google.com/file/d/1UpiCaectGAXAq8em3fPinU6nGHTYuDVA/view?usp=sharing

聞き取りやすく、これなら通勤時間や散歩の途中にも聞くことができそうです。

皆さんも試してみてください。