ショート動画の台本生成を自動化する

# 1. はじめに

こんばんは。
MYJLab Advent Calender 2023の15日目、本日の担当は4年の[yoshiki495](https://github.com/yoshiki495)です。

早速本題に入りますが、最近とあるサービスを見つけまして、それがこちらになります。

https://vrew.voyagerx.com/ja/

簡単にまとめると、台本を入力するとAIが映像や画像、字幕などその他ショート動画に必要な要素を全て作成してくれるサービスというわけです。

さて、ここまでできるとあとはChatGPTに台本だけ生成させればショート動画作れる段階まで来たわけですが、自分はこの程度では満足できません。「毎回ChatGPTと対話して台本を生成するなんて面倒くさい！！」と。

ということで、この記事ではそんな自分のための台本生成自動化プログラムを紹介します。

# 2. 作成したプログラム

### プログラムの流れ
1. **タイトルの読み込み**
-> `Titles.txt`からタイトルを読み込み、それぞれに対して処理を行う。
2. **台本の例の読み込み**
-> `Sample.txt`から台本の例を読み込む。
3. **OpenAI APIを使用して台本生成**
-> 読み込んだタイトルを使用して、OpenAI APIにプロンプトを送り、台本を生成する。
4. **生成した台本の保存**
-> 生成した台本を`Script_番号.txt`というファイル名で保存する。

### プログラム
```python
from openai import OpenAI
import os
from dotenv import load_dotenv

load_dotenv()

# OpenAI APIクライアントの設定
client = OpenAI(
    api_key=os.environ.get("OPENAI_API_KEY")
)

# 'Category.txt'からカテゴリを読み込む
with open('Category.txt', 'r', encoding='utf-8') as file:
    category = file.read()

# 'Titles.txt'からタイトルを読み込む
with open('Titles.txt', 'r', encoding='utf-8') as file:
    titles = file.readlines()

# 'Sample.txt'からサンプル台本を読み込む
with open('Sample.txt', 'r', encoding='utf-8') as file:
    sample_script = file.read()

# 各タイトルに対して台本を生成
for title in titles:
    # タイトルを整形
    title_cleaned = title.strip().split('. ')[1]

    # OpenAI APIに送るプロンプトを作成
    prompt = f"YouTube Shortsに{category}に関する知識の動画を投稿するために、タイトル「{title_cleaned}」に合った台本を必ず300字以内で作成してほしいです。この時、より多くの人に動画を閲覧してもらうために、「日本人向け・日常生活に役立つ・相手を惹きつける」ような台本を作成してください。最後に、絵文字は使わないでください。\n\n以下は台本の例になります。\n\n{sample_script}"

    # APIリクエストを送信して台本を生成
    response = client.chat.completions.create(
        model="gpt-4",  # ここに最新のモデル名を入れる
        messages=[
            {"role": "system", "content": "You are an assistant who creates scripts for YouTube Shorts."},
            {"role": "user", "content": prompt}
        ]
    )

    # 新しい台本を取得
    new_script = response.choices[0].message.content

    print(new_script)

    # 新しいファイルに台本を保存
    script_number = title.strip().split('.')[0]
    with open(f'Script_{script_number}.txt', 'w', encoding='utf-8') as new_file:
        new_file.write(new_script)
```

# 3. 環境変数を設定する

このプログラムを実行するためにはOpen APIのAPI KEYを以下のように`.env`に追加する必要があります。

`.env`
```
OPENAI_API_KEY="ご自身のAPI KEYをここに記述してださい"
```

API KEYの取得方法は[こちら](https://book.st-hakky.com/data-science/open-ai-create-api-key/)

# 4. プログラムを使って台本を生成する

では実際にこのプログラムを使って台本を生成してみましょう。

まずはタイトルを用意します。
（今回は3つのみですが、実際にはタイトルの数だけ台本を生成できます。）

1. **感情の色彩心理学** - 色が私たちの気分や感情にどのように影響を与えるかについての説明。
2. **夢の心理学** - 夢が私たちの無意識の願望や恐れをどのように反映しているかを解析。
3. **ストレスとコーピングの戦略** - ストレスに対処するための効果的な方法を紹介。

そしてこのタイトルを`Titles.txt`に追加します。

`Titles.txt`
```
感情の色彩心理学 - 色が私たちの気分や感情にどのように影響を与えるかについての説明。
夢の心理学 - 夢が私たちの無意識の願望や恐れをどのように反映しているかを解析。
ストレスとコーピングの戦略 - ストレスに対処するための効果的な方法を紹介。
```

次に台本の例を`Sample.txt`に追加します。

`Sample.txt`
```
何でこの人に惹かれるの？それ、あなたの“アタッチメントスタイル”が関係してるかも！
恋愛におけるアタッチメントスタイルって何？それは、子どもの頃の親との関係が、大人の恋愛パターンに影響するって心理学で言われてるんです。
安心感をもたらす「安全型」は、恋愛において安定してパートナーと向き合えます。でも一方で、「不安型」は相手の愛を疑いやすく、時にはネガティブな反応を引き起こします。
「回避型」の人は自立心が強いけど、親密さを避けがち。重たいと感じることもあるかも？
あなたのスタイル、分かる？コメントで教えてくださいね。そして、もっと知りたい方は高評価＆フォローをお忘れなく！
```

これにて事前準備は終了です。

あとはプログラムを実行します。

```bash
python main.py
```

# 生成した台本を確認する

それでは生成した台本を確認してみましょう。

`Script_1.txt` - タイトル「**感情の色彩心理学**」
```
皆さん、日々の選択に色が与える影響、意識していますか？今回は「感情の色彩心理学」、色が気分や感情にどう作用するかを紹介します。

赤はエネルギーを高め、意欲をかき立てる色。重要なプレゼン前には赤いものを身に着けてみてはどうでしょう。一方、青は落ち着きをもたらし、集中力を向上させます。デスクワークの時は青を取り入れてみませんか？

黄色は幸福感を、緑はリラックスを促します。友達とのランチには黄色い服で、自然の緑を感じながらの散歩には緑のアクセサリーを。

もっと知りたいですか？このシリーズで色々な色の秘密を解き明かしていきます！気になる色があればコメントしてください。日常生活に心理学を活かす一歩を踏み出しましょう。もちろん、もっと学びたい方は是非チャンネル登録を。次回もお楽しみに！
```

`Script_2.txt` - タイトル「**夢の心理学**」
```
今夜見た不思議な夢…それ、無意識の深いメッセージかもしれません。「夢の心理学」でそれを探りましょう！

なぜ夢を見るの？それは、心の中にある願望や恐れが、シンボルとして現れるから。恋人に会う夢がその気持ちの表れで、追われる夢は不安やストレスのサインなんです。

夢は日々の感情を処理する場所。辛いことがあった日は悪夢を見易く、逆に楽しい出来事があった日は幸せな夢を―これで心理状態を知るヒントが得られるんです。

こんな風に、夢を通じて自分自身をもっと理解することができるんですよ。皆さんの夢の話、あなたの無意識が教えてくれることを、ぜひコメントでシェアしませんか？

夢分析でより良い日常を―興味を持った方は、高評価とチャンネル登録して、次回もお楽しみに！
```

`Script_3.txt` - タイトル「**ストレスとコーピングの戦略**」
```
ストレスが溜まってませんか？毎日の生活で感じるストレス、上手に処理できれば幸せに繋がりますよ！

今日は「ストレスとコーピングの戦略」、簡単で効果的な対処法を紹介します。まずは「運動」。散歩やジョギングでストレスホルモンを減らしましょう。次に「睡眠」。良い睡眠はストレス解消に欠かせません。そして、「日記をつける」。考えを整理して、ストレスを外に出してみてください。

これらの方法でストレスを管理し、日々をもっと快適に！動画が役立ったら、いいねとフォローを忘れずに。次回も見逃さないようにご注目くださいね。
```

# おわりに

いかがでしたか。

今回は3本のみの生成だったのであまり恩恵を感じられなかったかもしれませんが、これが数100~1000本となった場合、かなりの時間が短縮できそうです。

最後に、このプログラムを活用した自分のYouTubeチャンネルを紹介します。まだ始めたばかりのチャンネルですがとりあえず1日2~3本目安に運用していこうかと思います。

https://www.youtube.com/@CHANNEL-ul2dw

ではこれにて。