「毎日のニュースをテーマにした、英語トレーニング用のラジオ」を自動生成するアプリを作りました。まだβ版。
作成動機
英語力を伸ばしたい。ついでに世界情勢もインプットしておきたい。でも英語でニュースを見るとなると、少し腰が重い。
ということで、今回のアプリを思い立ちました。あとAI使った何かしらを作りたかったというのもあります。
アプリ概要
zenncastを参考にしました。メイン部分はPythonで書いています。
ニュースを取得し、そのデータを元にラジオの台本を作成(ChatGPT)→音声合成(OpenAI Text To Speech)→ 音声結合&動画生成(ffmpeg)→ YouTubeに投稿という流れ。
バッチ処理にはGithub Actionsのschedule機能を使っています。
使用技術
News API
ニュース記事を取得できるAPIです。無料枠でも1000回/月の呼び出しが可能。
肝心のニュースの本文部分は取得できないので、別途スクレイピングする必要があります(robots.txtと利用規約は要確認)
ChatGPT API
ニュースデータからラジオの台本を生成するためにChatGPT-4oを使いました。
json形式で台本を出力するようプロンプトを与えています。
入力されたニュース記事のスクレイピングデータを基に、日本人高校生キャラクター「Erika」と留学生キャラクター「Sam」が意見や感想を言い合う形式の動画の台本を作成してください。
二人が取り上げる英語の単語や熟語は、日本人高校生が学ぶような汎用的なものであることが望ましいです。
出力は以下のようなJSON形式にします。
{
"scenes": [
{
"scene_name": "",
"speeches": [
{
"name": "",
"text": ""
}
]
},
...
]
}
[Example]
{
"scenes": [
{
"scene_name": "Opening",
"speeches": [
{
"name": "Erika",
"text": "視聴者のみなさん、おはようございます!今日は[YYYY年M月D日W曜日(入力値)]です。"
},
...
OpenAI Text To Speech API
ラジオではキャラクター同士が対話しているようにしたかったので、セリフごとに音声合成のリクエストを投げ、最後に音声を結合するようにしました。
OpenAIのTTSの良いところは、英語と日本語が混じった文章でもそれぞれ正しく発音できることです。
他の読み上げでは、英単語をアルファベット読みしてしまう問題があり、いちいち手作業で直す必要があったのでとてもありがたい。
英語なまりがありますが、むしろ英会話ラジオの雰囲気が出て良かったです。
YouTube Data API (v3)
動画の自動投稿にはYouTubeのAPI使っています。
zennに作業記録を残してあるのですが、1日6回までの投稿制限があり、(マストではないが)API利用のための審査が必要だったので少々面倒でした。
厳格な審査があるからこそ、YouTubeのクリーンさが保たれているのでしょうね。
Github Actions
バッチ処理はGithub Actionsのschedule (cron) を無料枠内で使うことでサーバ代を浮かせています。
最近よく思います。もう全部Github Actionsでいいんじゃないか。
タイムゾーンに注意が必要で、cronの時刻の指定はUTCで行い、アプリケーションのタイムゾーンはローカル(Asia/Tokyo)に指定します。
name: Run main.py on every morning at 8 AM JST
on:
schedule:
- cron: "0 23 * * *" # JSTの8時はUTCの23時
# 略
- name: Run main.py
env:
TZ: "Asia/Tokyo"
料金
1回のラジオ(5分)の生成にかかるお金は、OpenAIのAPI料金のみで、だいたい$0.15くらいでした。
内訳は音声合成に$0.05、ChatGPTに$0.10です。
モデルを4oから3.5turboに変更すればもっと安くなるのですが、やはり安定したクオリティが得られないので、しばらくは最上位モデルを使い続けることになりそうです。
今後の課題・展望
もっと面白いものにしたい
作った本人が言うのもあれですが、シンプルにラジオの内容がつまらないです。
人間っぽさを出すために、ニュースに対してキャラクターが感想を言う流れをプロンプトに組み込んだのですが、下手くそなニュースの要約と、小学生並みの感想が一言添えられるだけになってしまいました。
これなら普通にニュース聴いてたほうがいいなって感じ。
単純に毎日聴き続けるだけのインセンティブがないので、もっと英語学習に重点を置いて、ゲーミフィケーション要素を取り入れた内容にシフトしていきたいです。
ChatGPTへの不安
プロンプトをどんどん改良していきたいのですが、最近どうにもChatGPTが生成する文章のクオリティが下がっている気がします。
すでにコード生成ではChatGPT使わずClaudeを選ぶ流れになっていますし、今後次第で別の生成モデルに切り替えるつもりです。
Text To Speechがどもる
OpenAIのText To Speechは英語・日本語が混在した文章の読み上げが可能な一方、まれにどもって、音声が聞き取れない部分が発生します。
これに関しては、デベロッパー側がどうこうできる問題ではないので、現状許容するしかないのですが、他の読み上げ系ツールの調査は継続的に行っていきます。
字幕がほしい
動画に字幕をつけたい。方法は考え中。
案外簡単に自動で動画(静止画ですが)を生成できたので、しばらくはこれをどんどん改良していきたいと思います。ついでに英語力も…