⭐️

【GitHub Codespaces】.NET8とAzure AI FoundryのSoraで試す動画生成

に公開

この記事で伝えたいこと(ポイント)

  • GitHub CodespacesでSoraの動画生成を試しているよ
  • 申請通ったらSora 2をAzure AI Foundryで使う予定だよ

はじめに

この記事はGitHub Codespacesの環境でSoraによる動作生成を実行する方法について書いています。

主な内容としてはセットアップや使い方を中心に書きます。(忘れやすいことなど)
誤りなどがあれば修正していく想定です。

ハンズオンで使ったサンプルコードは以下のリポジトリにあります。

Azure AI FoundryにSora 2がきた

ブログによると動画生成AIのSora 2がAzure AI Foundryで利用できるようになったようです。

まだ私のAzure AI Foundryの環境にはSora 2が来ていないのですが、申請しているのでそのうち使えるようになると思います。
今回は準備段階としてSoraをによる動画生成を試してみます。

ハンズオン環境

とりあえず、動かしてみましょう。
今回のハンズオン環境は以下の通りです。

  • GitHub Codespaces
    • GitHub SecretsにAzure OpenAIの情報を登録して利用
  • .NET 8
  • Azure AI Foundryプロジェクト
    • SoraのモデルがSoraという名前でデプロイされていることを前提とします
  • 認証
    • Cognitive Services OpenAI UserあるいはCognitive Services OpenAI Contributorのロールが必要です

プログラム上ではAzureDefaultCredentialを使ってAzure OpenAI(Azure AI Foundry)に接続します。
なお、Azure AI FoundryのAPI利用例を見る限りではまだSDKが提供されていないようなので、REST APIを直接呼び出す形で実装します。

GitHub Codespacesで動かしてみる

以下のリンクをクリックしてGitHub Codespacesを開きます。

Open in GitHub Codespaces

Azure CLIのインストールとログイン

Codespacesが起動したら、Azure CLIをインストールします。

curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

続いて、Azure CLIでログインします。

az login

ブラウザが起動するので、指示に従ってログインします。

Azure AI Foundryのセットアップ

Azure AI Foundryプロジェクトの概要からAzure AIサービスをクリックします。
Azure AIサービスAzure AI サービスエンドポイント(環境変数ではAZURE_OPENAI_ENDPOINTとなるもの)をコピーして控えておきます。

上記のエンドポイントを.envに設定します。なお、リポジトリには.env.exampleがあるので、.envとしてコピーして編集します。

cp .env.example .env

.envを開いて以下のように編集します。

AZURE_OPENAI_ENDPOINT=<Azure AI サービスエンドポイント>

※AZURE_OPENAI_ENDPOINTはhttps://{your-custom-endpoint}.cognitiveservices.azure.com/のような形式になっています。

AZURE_OPENAI_DEPLOYMENT_NAMEですが、プログラム上でSoraという名前にしてあります。それ以外のデプロイ名では動作しないので注意してください。

なお、APIキーを使った認証にも対応しています。その場合はUSE_API_KEYを1に設定して環境変数AZURE_OPENAI_API_KEYにAPIキーを設定します。

USE_API_KEY=1
AZURE_OPENAI_API_KEY=your_api_key_here

GitHub Secretsの設定

次にGitHub SecretsにAzure OpenAIの情報を登録します。

今回はGitHub CLIを使って登録します。GitHub CLIは.envを指定することで自動的に読み込み、シークレットとして登録できます。
以下のコマンドを実行します。

gh secret set --app codespaces -f .env

具体的にはAZURE_OPENAI_ENDPOINTAZURE_OPENAI_API_KEYが環境変数で利用可能になります。
APIキーを使う場合はAZURE_OPENAI_API_KEYも登録されます。

コンソールアプリの実行

コンソールアプリを実行します。

dotnet run

実行後、以下のようなメッセージが表示されます。

--- 1. ジョブを作成中 ---
エンドポイント: {AZURE_OPENAI_ENDPOINT}
ジョブが作成されました: task_XXXX
レスポンスJSON: {
  "object": "video.generation.job",
  "id": "task_XXXX",
  "status": "preprocessing",
  "created_at": 1760622507,
  "finished_at": null,
  "expires_at": null,
  "generations": [],
  "prompt": "A cat playing piano in a jazz bar.",
  "model": "sora",
  "n_variants": 1,
  "n_seconds": 5,
  "height": 480,
  "width": 480,
  "inpaint_items": null,
  "failure_reason": null
}

--- 2. ステータスを確認中 (5秒ごとにポーリング) ---
ジョブステータス: queued
ジョブステータス: queued
ジョブステータス: queued
ジョブステータス: running
ジョブステータス: processing
ジョブステータス: processing
ジョブステータス: succeeded
✅ ビデオ生成が成功しました。
ビデオコンテンツをダウンロード中...
生成されたビデオは「output.mp4」として保存されました。

出力されたレスポンスにはprompt(プロンプト)が含まれています。今回はA cat playing piano in a jazz bar.(ジャズバーでピアノを弾く猫)としています。

実行結果

実行結果は以下の通りです。お手元にoutput.mp4の動画が保存されているはずです。

https://youtube.com/shorts/ZPG5khZsyD4?feature=share

まとめ

今回はGitHub Codespacesと.NET8でSoraによる動画生成を試してみました。
まだSDKが対応していないということもあってREST APIを直接呼び出す形になりましたが、今後SDKが提供されればより簡単に利用できるようになると思います。
※個人的にはREST APIでも簡単に実行できるような印象を受けました。

Discussion