你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本快速入门中,你将使用 Azure OpenAI 服务生成视频剪辑。 该示例使用 Sora 模型,该模型是一个视频生成模型,它基于文本说明创建真实和富有想象力的视频场景。 本指南介绍如何创建视频生成作业、轮询其状态以及检索生成的视频。
有关视频生成的详细信息,请参阅 视频生成概念。
先决条件
- 一份 Azure 订阅。 免费创建一个。
- Python 3.8 或更高版本。 建议使用 Python 3.10 或更高版本,但至少需要 Python 3.8。 如果未安装合适的 Python 版本,则可以按照 VS Code Python 教程中的说明操作,这是在操作系统上安装 Python 的最简单方法。
- 在受支持的区域之一中创建的 Azure OpenAI 资源。 有关区域可用性的详细信息,请参阅模型和版本文档。
- 然后,你需要使用 Azure OpenAI 资源部署
sora
模型。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
Microsoft Entra ID 先决条件
若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,你需要:
- 安装使用 Microsoft Entra ID 进行无密钥身份验证所需的 Azure CLI。
- 将
Cognitive Services User
角色分配给用户帐户。 你可以在 Azure 门户的“访问控制(IAM)”“添加角色分配”下分配角色。>
设置
创建新文件夹
video-generation-quickstart
,并使用以下命令转到快速入门文件夹:mkdir video-generation-quickstart && cd video-generation-quickstart
创建虚拟环境。 如果已安装 Python 3.10 或更高版本,则可以使用以下命令创建虚拟环境:
py -3 -m venv .venv .venv\scripts\activate
激活 Python 环境意味着当通过命令行运行
python
或pip
时,你将使用应用程序的.venv
文件夹中包含的 Python 解释器。 可以使用deactivate
命令退出 python 虚拟环境,并在需要时重新激活它。小窍门
建议你创建并激活一个新的 Python 环境,用于安装本教程所需的包。 请勿将包安装到你的全局 Python 安装中。 安装 Python 包时,请务必使用虚拟或 Conda 环境,否则可能会中断 Python 的全局安装。
若要使用 Microsoft Entra ID 进行推荐的无密钥身份验证,请使用以下命令安装 包:
azure-identity
pip install azure-identity
检索资源信息
需要检索以下信息才能使用 Azure OpenAI 资源对应用程序进行身份验证:
变量名称 | 价值 |
---|---|
AZURE_OPENAI_ENDPOINT |
从 Azure 门户检查资源时,可在“密钥和终结点”部分中找到此值。 |
AZURE_OPENAI_DEPLOYMENT_NAME |
此值将对应于在部署模型时为部署选择的自定义名称。 Azure 门户中的“资源管理”“模型部署”下提供了此值。> |
OPENAI_API_VERSION |
详细了解 API 版本。 可以在代码中更改版本或使用环境变量。 |
使用 Sora 生成视频
可以使用 Sora 模型生成视频,方法是创建视频生成作业、轮询其状态以及检索生成的视频。 以下代码演示如何使用 Python 通过 REST API 执行此作。
使用以下代码创建
sora-quickstart.py
文件:import requests import base64 import os from azure.identity import DefaultAzureCredential # Set environment variables or edit the corresponding values here. endpoint = os.environ['AZURE_OPENAI_ENDPOINT'] # Keyless authentication credential = DefaultAzureCredential() token = credential.get_token("https://cognitiveservices.azure.com/.default") api_version = 'preview' headers= { "Authorization": f"Bearer {token.token}", "Content-Type": "application/json" } # 1. Create a video generation job create_url = f"{endpoint}/openai/v1/video/generations/jobs?api-version={api_version}" body = { "prompt": "A cat playing piano in a jazz bar.", "width": 480, "height": 480, "n_seconds": 5, "model": "sora" } response = requests.post(create_url, headers=headers, json=body) response.raise_for_status() print("Full response JSON:", response.json()) job_id = response.json()["id"] print(f"Job created: {job_id}") # 2. Poll for job status status_url = f"{endpoint}/openai/v1/video/generations/jobs/{job_id}?api-version={api_version}" status=None while status not in ("succeeded", "failed", "cancelled"): time.sleep(5) # Wait before polling again status_response = requests.get(status_url, headers=headers).json() status = status_response.get("status") print(f"Job status: {status}") # 3. Retrieve generated video if status == "succeeded": generations = status_response.get("generations", []) if generations: print(f"✅ Video generation succeeded.") generation_id = generations[0].get("id") video_url = f"{endpoint}/openai/v1/video/generations/{generation_id}/content/video?api-version={api_version}" video_response = requests.get(video_url, headers=headers) if video_response.ok: output_filename = "output.mp4" with open(output_filename, "wb") as file: file.write(video_response.content) print(f'Generated video saved as "{output_filename}"') else: raise Exception("No generations found in job result.") else: raise Exception(f"Job didn't succeed. Status: {status}")
运行该 Python 文件。
python sora-quickstart.py
片刻之后即可获得响应。
输出
输出将显示视频生成作业创建请求的完整响应 JSON,包括作业 ID 和状态。
```json
{
"object": "video.generation.job",
"id": "task_01jwcet0eje35tc5jy54yjax5q",
"status": "queued",
"created_at": 1748469875,
"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,
"failure_reason": null
}
生成的视频将另存为 output.mp4
当前目录中。
Job created: task_01jwcet0eje35tc5jy54yjax5q
Job status: preprocessing
Job status: running
Job status: processing
Job status: succeeded
✅ Video generation succeeded.
Generated video saved as "output.mp4"
清理资源
如果你想要清理和移除 Azure OpenAI 资源,可以删除该资源。 在删除资源之前,必须先删除所有已部署的模型。
- Azure 门户
- Azure CLI