你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本快速入门中,你将使用 Azure OpenAI 服务生成视频剪辑。 该示例使用 Sora 模型,该模型是一个视频生成模型,该模型根据文本说明和/或图像或视频输入创建真实和富有想象力的视频场景。 本指南介绍如何创建视频生成作业、轮询其状态以及检索生成的视频。
有关视频生成的详细信息,请参阅 视频生成概念。
先决条件
- 一份 Azure 订阅。 免费创建一个。
- 在受支持的区域中创建的 Azure OpenAI 资源。 请参阅区域可用性。 有关详细信息,请参阅使用 Azure OpenAI 创建资源和部署模型。
转到 Azure AI Foundry 门户
浏览到 Azure AI Foundry 门户,并使用与 Azure OpenAI 资源关联的凭据登录。 在登录工作流之中和之后,选择适当的目录、Azure 订阅和 Azure OpenAI 资源。
在 Azure AI Foundry 登陆页中,创建或选择一个新项目。 在左侧导航栏上导航到“模型 + 终结点”页。 选择“部署模型”,然后从列表中选择 Sora 视频生成模型。 完成部署过程。
在模型页面,选择“在操场中打开”。
试用视频生成
开始通过视频操场采用无代码方法探索 Sora 视频生成。 在文本框中输入提示,然后选择“生成”。 AI 生成的视频准备就绪后,会显示在页面上。
注释
内容生成 API 附带内容审核筛选器。 如果 Azure OpenAI 将提示识别为有害内容,则不会返回生成的视频。 有关详细信息,请参阅 内容筛选。
在视频操场中,还可以查看根据设置预填充的 Python 和 cURL 代码示例。 选择视频播放窗格顶部的代码按钮。 可以使用此代码编写完成相同任务的应用程序。
先决条件
- 一份 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-identitypip 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 和状态。
{
"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