【GitHub Codespaces】.NET8とAzure AI FoundryのSoraで試す動画生成
この記事で伝えたいこと(ポイント)
- GitHub CodespacesでSoraの動画生成を試しているよ
- 申請通ったらSora 2をAzure AI Foundryで使う予定だよ
はじめに
この記事はGitHub Codespacesの環境でSoraによる動作生成を実行する方法について書いています。
- 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という名前でデプロイされていることを前提とします
- 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を開きます。
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_ENDPOINTとAZURE_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の動画が保存されているはずです。
まとめ
今回はGitHub Codespacesと.NET8でSoraによる動画生成を試してみました。
まだSDKが対応していないということもあってREST APIを直接呼び出す形になりましたが、今後SDKが提供されればより簡単に利用できるようになると思います。
※個人的にはREST APIでも簡単に実行できるような印象を受けました。
Discussion