URLからYouTubeショート動画を全自動で作成・アップロードするプログラムを作ってみた
この記事の内容
- 任意のURLを指定するだけで、スクレイピング・要約・音声合成・動画生成・アップロードまでをPythonで全自動化するプログラムを紹介します
- ChatGPT(GPT-4)とAzure Text-to-Speechを活用して、日本語ナレーション付きのショート動画を自動生成します
- ffmpegでキャラクターや字幕を合成し、YouTube Data APIで自動アップロードします
- Azure更新情報をターゲットに実際のデモを行い、2本の動画を自動生成・公開するまでの流れを確認します
- AIによるコンテンツ自動生成が拡大する中での著作権・倫理面の課題についても触れます
プログラムの概要
今回は、任意のURLを渡すだけでYouTubeショート動画を全自動で作成し、アップロードまで完了するPythonプログラムを紹介します。趣味で作ったプログラムの紹介という位置づけですが、実際のデモを交えながら仕組みを説明していきます。
実行方法はシンプルで、main.py に対象URLを引数として渡すだけです。
python main.py <対象URL>
この1コマンドで、スクレイピングから動画アップロードまでのすべての処理が自動的に走ります。
処理の流れ
1. スクレイピングと要約
まず、指定したURLのウェブページをスクレイピングして記事本文を取得します。取得した内容はChatGPTに渡し、「日本語で要約してください」とプロンプトを投げます。ChatGPTから要約テキストが返ってきたら、それを動画の台本として使用します。
2. スクリーンショットの取得
台本の生成と並行して、ChromeのDevToolsエンジンを使って対象のウェブサイトにアクセスし、スクリーンショットを取得します。このスクリーンショットは後の動画合成で使用します。
3. 音声合成と字幕生成(Azure Text-to-Speech)
台本をいくつかのセグメントに分割し、各セグメントに対して以下の処理を実行します。
- Azure Text-to-Speech で音声ファイル(
.wav)を生成 - 音声ファイルの長さ(秒数)を計測
- 計測した長さをもとに SRTファイル(字幕ファイル) を生成
4. 動画の合成(ffmpeg)
各セグメントについて、以下の素材をffmpegで合成して短い動画クリップを作成します。
- バックグラウンド画像
- キャラクター画像
- スクリーンショット
- 字幕ファイル(SRT)
- 音声ファイル
5. 動画の結合と時間調整
セグメントごとに生成した動画クリップをリスト化し、ffmpegで一本に結合します。結合後の動画が1分を超える場合は、自動的に早送りして1分以内に収まるよう短縮します。YouTubeショートは60秒以内という制約があるためです。
6. YouTubeへの自動アップロード
完成した動画はYouTube Data APIを使って自動アップロードします。初回はOAuth認証が必要ですが、認証情報をローカルファイルにキャッシュするため、2回目以降は完全無人で処理が完了します。
アップロード完了後は、万が一失敗した場合に備えて以下の情報もファイルに出力します。
- 動画ファイル名
- タイトル
- 情報ソースURL
- 概要欄に記載する内容
実際のデモ
デモ1:Azure FilesのSMB REST APIサポート記事
AzureのアップデートブログからAzure FilesのSMB REST APIがAzure ADをサポートしたという記事のURLを渡して実行しました。
生成された動画では以下の内容が日本語で紹介されました。
Azure Files SMBシェアーズ REST APIのAzure ADサポートのプレビュー版について、REST APIを通じてユーザー・グループおよびManaged IDが共有レベルの読み取り・書き込みアクセスを可能にします。Azure ADサポートによりアプリケーションは認証情報を格納または管理することなくAzureファイル共有に安全にアクセスできます。
多少の誤りはあったものの(「ランチブログ」など)、概要を把握する用途としては許容範囲の品質でした。
デモ2:Application GatewayのPrivate Linkサポート記事
2本目は Application GatewayがPrivate Linkをサポートしたという記事を対象に実行しました。1回目の認証情報がキャッシュされているため、今回は完全自動でアップロードまで完了しました。
生成された動画では、2023年6月6日にAzure Application GatewayでPrivate Link機能が一般提供開始となった旨が紹介され、異なるAzure ADテナントや別のAzureサブスクリプションから安全にトラフィックを送信できる機能について説明されていました。
ChatGPTを活用した開発プロセス
今回のプログラム自体も、ChatGPTを活用して開発しました。具体的な進め方は以下のとおりです。
- ChatGPTに「こういうものを作って」と大まかに依頼してベースコードを生成
- 生成されたコードを実際に動かして動作確認
- エラーが出たら「こう直して」とChatGPTに伝えて修正
- テストコードもChatGPTに生成させて検証
クラスやメソッドの設計を自分で行いつつ、内部実装はAIに任せることで、インプットとアウトプットの整合性だけを自分で管理するという進め方が効果的でした。サンプルコードをインターネットで探して理解するというステップを大幅に省略できるため、日曜プログラマーレベルでもかなりの規模のプログラムが実現できます。
AIによるコンテンツ自動生成の可能性と課題
このプログラムはAzureの更新情報を対象にしていますが、URLさえ指定すればどのサイトでも動作します。応用例としては以下のようなものが考えられます。
- 任意のウェブサイトの内容を動画化
- 記事の内容をテキストでまとめる
- AI画像生成でサムネイルを自動作成
一方で、AIが自動生成したコンテンツがインターネット上に大量に流通することへの懸念も率直に述べていました。著作権法の適用やガイドラインの整備がAI技術の進展に追いついていない現状があり、社会的なルール作りが求められます。
ウェブサイトの解説記事や動画を人間が作ることは問題ないため、それをAIが行うことも許容されると考えているものの、全自動で大量生成するケースについては慎重に捉えているとのことでした。
まとめ
今回紹介したプログラムは、URLを1つ渡すだけでスクレイピング・ChatGPTによる日本語要約・Azure Text-to-Speechによる音声合成・ffmpegによる動画合成・YouTube自動アップロードまでを一気通貫で実行します。
Azure更新情報を追いかけるという用途で作成されたこのツールは、情報収集を動画ベースで効率化するという目的にも合致しており、実際に公開済みのショート動画と同等品質のコンテンツを数分で生成できることが確認できました。
ChatGPTを使った開発支援によって、複雑なプログラムであっても短期間で実装できる時代になっています。「自分でもこんなことをやってみたい」というアイデアがあれば、ぜひ挑戦してみてください。