Gemini は URL を渡すだけで YouTube の動画を読み込んでくれる
YouTube の動画を生成AIに渡す最も手軽な方法
生成AIに動画や写真や音声を渡してマルチモーダルな処理を行ってもらう、みたいなことが当たり前になって久しいですね。
Gemini はそんなマルチモーダルに対応した生成AIの一つですが、 Gemini に対して YouTube の動画を渡したいときは URL を渡すだけでいいって知ってました?
2024年11月20日現在、 日本語の公式ドキュメント「動画理解 | Generative AI on Vertex AI | Google Cloud」には記載がないのですが、
英語版の公式ドキュメント「Vide undesrstanding | Generative AI on Vertex AI | Google Cloud」にはちゃんと記載があります(RESTだけですが…)
YouTube video URL:The YouTube video must be either owned by the account that you used to sign in to the Google Cloud console or is public. Only one YouTube video URL is supported per request.
ということで、一つのリクエストにつき一つのYouTube動画URLを渡すことができます!
とりあえず GUI から使ってみる
早速試します。とりあえずVertex AI StudioからGUIベースで触ります。
「メディアを挿入」のところにたしかに「YouTube 動画リンク」の項目があります。
試しに、ABCテレビの「真夜中の関西国際空港」の動画を渡してみます。尺長は13分8秒です。
真夜中の定点観測というシリーズで、面白いのでとりあえず普通に見てください。
見終わったら、とりあえず、生成AIならでは感のあるタスクというところで、タイムコードとサマリを生成して貰います。
だいたい50秒ほど待つと、レスポンスが返ってきました。
モデルは gemini-1.5-flash-001
です。
適当なプロンプト過ぎてアウトプットは微妙ですが、まあ、とりあえずちゃんと映像・音声をもとにレスポンスを返してくれています。
次に、ちゃんとしたサマリを生成して貰います。
すると、下記のようなレスポンスが得られました。
この動画は、関空で働く人々の仕事内容やプライベートを垣間見れる動画です。 動画制作者は、空港は旅行へ出発する人や到着する人にとって特別な場所であると共に、多くの人の努力によって成り立っている場所であることを伝えたいと思いました。 具体的には、
・夜の関空で働く人々(グランドスタッフ、整備士、パイロットなど)の仕事内容を具体的に紹介することで、彼らの仕事への誇りや責任感を視聴者に理解してもらいたいと考えています。
・旅客だけでなく、空港で働く人々にもそれぞれの人生があり、家族や友人との時間を大切にしていることを紹介することで、彼らの仕事に対するモチベーションや人生観を視聴者に理解してもらいたいと考えています。
さらに、空港で働く人々は、旅客の安全や快適な旅のために尽力していること、そして、その裏側には様々な努力や苦労があることを視聴者に気づかせたいという意図も感じられます。
いいこと言いますね。
この生成にも45秒程度でした。(こちらも gemini-1.5-flash-001
を利用しています。)
APIから同様のリクエストを投げる
実際のユースケースではスクリプト等から利用することのほうが多いでしょう。そこで、 Python で叩いてみます。
先ほどの公式ドキュメントに、Pythonではこのようにする、という記載がなかったのですが… まあなんとなく普通に考えるとこれでいけるやろ、という感じの方法 でいってみます。
前準備として、 google-cloud-aiplatform
パッケージを入れておきます。
そして、 gcloud auth application-default login
しておいてから、下記のようなコードで同様の処理が可能です。
import vertexai from vertexai.generative_models import GenerativeModel, Part PROJECT_ID = "[Google CloudのプロジェクトID]" LOCATION = "[Geminiのロケーション]" def get_youtube_part(video_id: str) -> Part: return Part.from_uri(f"https://www.youtube.com/watch?v={video_id}", mime_type="video/mp4") def generate_summary_for_youtube_video(video_id: str) -> str: vertexai.init(project=PROJECT_ID, location=LOCATION) model = GenerativeModel("gemini-1.5-flash") youtube_part = get_youtube_part(video_id) question = "この動画の感想を教えて" response = model.generate_content([youtube_part, question]) return response.text if __name__ == "__main__": summary = generate_summary_for_youtube_video("UKzQtfqfTdI") print(summary)
ポイントとしては、 get_youtube_part
の関数のところが全てです。(ここでは動画IDを引数にとる方式にしています)
PROJECT_ID
および LOCATION
の指定が必要なのと、 question
に入れている内容をプロンプトとして投げていることに注意が必要です。
ちゃんと設定した上で実行すると、バッチリ出力されました。
この動画は、関西国際空港の夜の様子を捉えたものです。空港で働く人々の姿や、旅に出る人々の様子、そして海外から来た人の様子など、様々な場面が映し出されています。空港という場所で、たくさんの人々のドラマが生まれていることを感じられる、温かい動画です。
特に印象に残ったのは、若いチェロ奏者のコディくんの姿です。まだチェロを始めて3年しか経っていないにもかかわらず、空港で堂々と演奏している姿は、見ている私たちに感動を与えてくれます。彼の夢は音楽家になること。将来、彼がどんな素晴らしい音楽を奏でるのか、今から楽しみです。
また、動画の中では、空港で働く人々の丁寧な仕事ぶりも印象的でした。大きな荷物も軽々と運び、笑顔で対応する姿は、見ている私たちに安心感を与えてくれます。彼らは、私たちが安全に旅ができるように、陰ながら支えてくれている存在です。彼らの仕事ぶりから、プロ意識の高さを感じることができました。
この動画を通して、私たちは、空港という場所が、単なる乗り継ぎの場所ではなく、人々の夢や希望、そして人生のドラマが交差する場所であることを改めて認識させられました。
相変わらず、いいこと言いますね。
生成に掛かった時間はやはりちょうど45秒でした。
まとめ
今回は Gemini に対して URLによって YouTube の動画を渡す方法についてまとめてみました。
YouTube 上にたくさんコンテンツを保有している場合はカテゴリ整理であるとかにも使えるかもしれません。
都度アップロード元の動画をわざわざ引っ張ってきたりする必要が無いのは非常に便利だと思います。
また、 YouTube Data API や YouTube Analytics and Reporting APIs などと組み合わせてみても面白いのではないでしょうか。
数値系の分析と、コンテンツそのものの分析を低コストで掛け合わせることが出来るように思います。