Sora2 でAPIを使うまでの、必要な設定とエラー解決方法
全体の流れ
APIキー設定だけではなく、事前に色々な設定が必要でした。まとめると、この順番です。
- OpenAI PlatformでAPIキーを作成する。
- 5ドル課金してTier 1にする。
- Organization Verification(本人確認)をする。
- プログラムからAPIを叩く。
※クレジットカード、スマホ、身分証明書が必要です。
※「Tier 1」「Organization Verification」は独自用語です、各章で解説します。
※Sora2のAPIは0.1ドル/秒かかります。
1. OpenAI PlatformでAPIキーを作成する。
このページからAPIキーを作成できます。
APIキーは1回しか表示されないので注意しましょう。
そして、私は動画生成プログラムを実行したのですが、色々エラーが出ました。2と3で解説します。
2. 5ドル課金してTier 1にする。
私の場合はまず、下記のようなエラーが出ました。
openai.BadRequestError: Error code: 400 - {'error': {'message': 'Billing hard limit has been reached.', 'type': 'billing_limit_user_error', 'param': None, 'code': 'billing_hard_limit_reached'}}
この原因は、OpenAI APIの課金額の扱いで「Free Tier」(未課金)だったことでした。Sora2のAPIは、課金している「Tier 1」以上のユーザのみに提供されているようです。
下記ページの「Edit Budget」から5ドル課金すれば、「Free Tier」から「Tier 1」へ格上げされます。
3. Organization Verification(本人確認)をする。
次に、下記のようなエラーが出ました。
openai.PermissionDeniedError: Error code: 403 - {'error': {'message': 'Your organization must be verified to use the model `sora-2`. Please go to: https://platform.openai.com/settings/organization/general and click on Verify Organization. If you just verified, it can take up to 15 minutes for access to propagate.', 'type': 'invalid_request_error', 'param': None, 'code': None}}
この原因は、OpenAI Platform上で本人確認が未完了だったためでした。
下記のページから本人確認できます。
スマホと身分証明書を準備して、「Verify Organization」のボタンから画面遷移し、指示に従って身分証明書と顔を撮影しましょう。(本人確認の別ページがスマホで開きます)
うまくいくと、下記画像のようにステータスが変化します。
4. プログラムからAPIを叩く。
下記のPythonプログラムをローカルに保存し、APIキーを指定して実行してみましょう。
OpenAIのSora2のAPIを叩き、生成中はログを出し、生成が終わったらローカルに保存するという挙動をします。
うまくいけば動画が、プログラムと同じディレクトリ配下に出てくれます。
(ダメだったらChatGPTにエラーログを入れて聞いてみましょう。)
import time
from openai import OpenAI
API_KEY = "sk-XXXXXXXXXXXXXXXXX" # ✅ 自身のAPIキーを指定
PROMPT = "夜にアメ車をドライブするファンキーな猫の動画" # ✅ プロンプトを設定
OUTPUT_FILE = "sora_output.mp4"
client = OpenAI(api_key=API_KEY)
# 1️⃣ 生成
print(f"🎬 動画生成開始: {PROMPT}")
video = client.videos.create(
model="sora-2",
prompt=PROMPT,
size="1280x720", # ✅ 横向き16:9を指定
seconds="4" # ✅ 数字ではなく文字列で指定(例: "4" / "8" / "12")
)
video_id = video.id
print("🆔 Video ID:", video_id)
# 2️⃣ ステータス監視
while True:
result = client.videos.retrieve(video_id)
print("📡 状態:", result.status)
if result.status == "completed":
print("✅ 動画生成が完了しました!")
break
elif result.status == "failed":
print("❌ 生成に失敗:", result.error)
exit(1)
time.sleep(10)
# 3️⃣ ダウンロード(新仕様)
print("💾 ダウンロード中...")
video_data = client.videos.download_content(video_id)
with open(OUTPUT_FILE, "wb") as f:
f.write(video_data.read())
print(f"🎉 保存完了: {OUTPUT_FILE}")
うまくいくと、このような正常に生成開始したログが出て、今いるディレクトリに動画ファイルが生成・保存されます。
🎬 動画生成開始: 夜にアメ車をドライブするファンキーな猫の動画
🆔 Video ID: video_XXXXXXXXXXXXXXXXXXX
📡 状態: in_progress
📡 状態: queued
📡 状態: queued
📡 状態: in_progress
📡 状態: in_progress
📡 状態: in_progress
📡 状態: completed
✅ 動画生成が完了しました!
💾 ダウンロード中...
🎉 保存完了: sora_output.mp4
生成結果
ウォーターマークなしで綺麗に出てくれていますね。ファンキーな猫です。
皆さんも良きSora2 APIライフを!
Discussion