はじめに
YouTubeの動画の文字起こしからブログ記事を作成するスクリプトをChatGPTに作ってもらいました。実行するにはAPIを使用するAPIのプランが必要です。YouTubeの解説を作るのに便利かも。ブログの記事はマークダウンでファイル出力されます。
ライブラリ・環境
以下ライブラリが必要となる
pip install openai youtube-transcript-api markdown2
OpenAIのAPIキーは環境変数で設定する
export OPENAI_API_KEY=your_openai_api_key
実行スクリプト(Generated by ChatGPT4o)
途中まで動くところは確認したがAPIの有料プランに申し込んでないので、プロンプトで記事が作成されるところは未検証。適宜修正してください。ChatGPTが提案してくるコードはちょっと古いAPIで、最新ライブラリへのマイグレーションが必要だった。以下は修正済みのコード。
import os
import sys
import openai
from openai import OpenAI
import markdown2
from youtube_transcript_api import YouTubeTranscriptApi
# YouTubeのURLから動画IDを抽出する関数
def extract_video_id(url):
import re
match = re.search(r'(?:v=|\/)([0-9A-Za-z_-]{11}).*', url)
if match:
return match.group(1)
return None
# YouTubeの動画IDから文字起こしを取得する関数
def get_transcript(video_id):
transcript_list = YouTubeTranscriptApi.get_transcript(video_id)
transcript = " ".join([t['text'] for t in transcript_list])
return transcript
# OpenAIのAPIを使って記事を生成する関数
def generate_article(transcript, youtube_url, client):
prompt = f"以下の文字起こしに基づいて、2000字程度の日本語の記事を作成してください。各項目には見出しをつけ、タイトルも作成してください。記事の先頭にはYouTube動画へのURLのリンクを埋め込み形式で記載してください。\n\n{transcript}"
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
],
max_tokens=2048
)
return response.choices[0].message['content'].strip()
# 生成された記事をMarkdownファイルに書き込む関数
def write_to_markdown(article, filename):
with open(filename, 'w', encoding='utf-8') as f:
f.write(markdown2.markdown(article))
# メイン処理
def main():
if len(sys.argv) < 2:
print("使用法: python script.py <YouTubeのURL>")
return
youtube_url = sys.argv[1]
openai_api_key = os.getenv('OPENAI_API_KEY')
if not openai_api_key:
print("OPENAI_API_KEYが設定されていません。")
return
client = OpenAI(api_key=openai_api_key)
output_filename = "article.md"
video_id = extract_video_id(youtube_url)
if not video_id:
print("無効なYouTube URLです。")
return
transcript = get_transcript(video_id)
article = generate_article(transcript, youtube_url, client)
write_to_markdown(article, output_filename)
print(f"記事が {output_filename} に保存されました。")
# メイン処理を実行
if __name__ == "__main__":
main()
以下のように実行することで、YouTube動画からブログ記事が作成される。
python script.py <YouTubeのURL>
まとめ
どの言語でも解説が作成できるので、英語の動画見てわからないな、と思ったら記事を作ってついでにブログに載せたりしてもいいんじゃないでしょうか。プロンプトのところを適当に修正すれば、もっと詳しい内容とかも書けるのかも。自動投稿とかしてもいいのかもしれない。そうすると、ブログってなんなんだろね、ってことにはなりそうだけど。