コンテンツにスキップ
この記事はパブリックドメイン(CC0)です。自由にご利用ください。 CC0 1.0 Universal

ブログ記事のプレゼン動画自動生成

https://youtu.be/vmt_WVBJMj4?si=OZlzEqfEvWjPakYV

ブログの記事から、生成AIを使ってプレゼン動画を自動作成してYouTubeに投稿する仕組みを作りました。

生成AIにプレゼンのストーリーを考えさせるだけでなく、プレゼン資料を作ることも、工夫をすれば可能です。

また、プレゼンで話す内容の原稿を生成させて、その原稿を声で喋る生成AIに読ませれば、音声データも生成できます。

そして、プレゼン資料と音声データを合わせれば、動画ができあがります。

これらの一連の作業を自動化することで、ワンクリックでプレゼン動画を自動生成できるようになりました。

仕組み

1番のポイントは、プレゼン資料を生成する部分です。

生成AIは、画像を生成することは得意ですが、それは写真や絵のようなものに限ります。プレゼン資料のように文字や図形が中心の資料を作ることは、画像を生成するAIでは作成が困難です。

そこで、文字や図形が中心の資料をプログラミング言語のようにテキストで表現できる形式で生成しています。

こうした資料を作成するための形式はいくつかあります。

初めはプレゼン資料の作成用のmarpという形式で試したのですが、できることが限られてしまうため、SVG形式というより一般的な図形描画用の形式を用いることにしました。

こうしたテキストで表現できる形式であれば、通常のチャット型の生成AIに「このブログ記事の内容を紹介するプレゼン資料をSVG形式で作成してください」と依頼すれば、作成できます。

文字のはみ出し問題

ここで問題になるのは、文字が頻繁に資料の外枠や、資料内の図形の枠からはみ出してしまうことです。

人間なら出来上がった資料を見て、すぐにはみ出している箇所に気がつきます。しかし、出来上がった資料の目視確認でなく、SVG形式のテキストの段階では、文字が枠や図形からはみ出していることを気づくことは困難です。

このため、チャット型の生成AIは、頻繁に文字がはみ出しているような資料を生成してしまいます。

もちろん、大部分は上手く生成してくれるので、そうした文字のはみ出しを、私が修正すれば上手くいくのですが、それだと毎回私の手作業が生じてしまいます。

そこで、文字のはみ出さないようにしながらSVG形式の資料を生成させる工夫を加えつつ、生成されたSVGに文字のはみ出しがないことを自動判定する仕組みが必要になりました。

文字がはみ出さないようにする工夫は、生成AIにプレゼン資料を作るように指示する際に、基本的なルール、作業手順、注意点の説明を加えるというアプローチを取りました。

ルールとして、複雑な図形を使わないように指示をしたり、文字のフォントサイズを固定したりします。

その上で、資料内の文に含まれる文字数を数えて、フォントサイズと掛け合わせて横幅と高さを見積もり、枠や図形からはみ出さないことを事前に確認する、という作業手順を指示しています。

この際に、このチェックした過程と結果を、SVGファイル内に事前検討のコメントとして記録していくことを指示しました。

こうした指示を加えると、少しは改善されるのですが、初めから満足できる精度にはなりません。そこで繰り返し何種類も作成させ、ミスをしやすい部分を指示に注意点として加えたり、ルールや指示が守られていなければ、指示の文章の中で繰り返し強調したりしていきました。

この試行錯誤による指示文の改善を繰り返していくと、ある程度まで文字のはみ出しを抑えることができます。

ただしどこまで工夫しても完璧にはできないため、後工程でチェックするようにしました。

この後工程でのチェックに、画像を目視することができる生成AIを使って見たのですが、なかなか上手くはみ出し検出できなかったため、このアプローチは諦めました。

次に、SVGのテキストを再度チャット型の生成AIに入力して、チェックさせるというやり方も試しました。

こちらは画像の目視型の生成AIよりもはみ出しを検出しやすかったのですが、それでも検出精度はそれほど高くありませんでした。ここでも、はみ出しを検出する指示を試行錯誤的に改善することで、ある程度の精度にはできるのですが、完全なレベルにはできません。

そこで、さらに厳密に文字のはみ出しを検出するプログラムを作って検査することにしました。これは、生成AIに指示していたように、プレゼン資料の中の文の長さとフォントサイズから、幅と高さを計算して、資料の枠や中の図形からはみ出していないことをチェックする、というプログラムです。

このプログラムの作成は骨が折れましたが、最終的には上手く判定できるようになりました。

また、文字はみ出し以外にも、複雑な図表を作成しようとして崩れた図表を出力するケースもありましたので、そうした観点はチャット型の生成AIにチェックさせるというアプローチを残しました。

これは、ルールに定めた以上の複雑な図形を作成していたらNGとする、という形でのチェックです。

このプログラムでのはみ出しチェックと、生成AIによるルール違反のチェックの仕組みで、概ね問題は検出することができるようになりました。

以降の処理

こうしたチェックでNGが検出されたら、作成したSVG形式の資料は破棄して、再生成させるようにしています。 問題の箇所を指摘して修正させても、別の問題が引き起こされることが多く、かえって時間がかかるためです。 問題の箇所を指摘して修正させても、別の問題が引き起こされることが多く、却って時間がかかるためです。

こうして、文字のはみ出しがないプレゼン資料が完成したら、あとはこの資料と元のブログ記事を入力して、生成AIにナレーションの文を作成させます。ここには特に工夫は必要ありませんでした。

そして、ナレーションの文を、text to speechと呼ばれる音声で喋る生成AIを使って音声データにします。ここも特に工夫はありません。

最後に、SVG形式のプレゼン資料をPNG形式の画像に変換し、ffmpegというツールを使って音声付きのmp4形式の動画に変換すれば完成です。

SVG形式のスライド作成以降の一連の処理は、生成AIに質問しながら進めれば、簡単に自動化するプログラムを作成することができます。

さいごに

こうしたプレゼン動画の自動生成の仕組みを自作して、上手く使えるものにできたので、先週からYouTubeに実際に動画を公開し始めました。

ただ、ちょうどこの仕組みが完成した直後に、GoogleのnotebookLMというAIツールにも、同じようにテキスト資料を解説する動画を自動生成する機能が追加されました。

このため、今後はこうした仕組みを自作しなくても、AIサービスを手がけている企業が、類似のサービスを出してくることが予想されます。

一方で、こうして自分なりに本格的に生成AIを駆使した実用的なプログラムを開発してみたことで、生成AI活用の勘所をつかむことができたというのは大きな成果でした。