<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Sore on Wilson Wu</title><link>https://wilsonwu.me/zh/tags/sore/</link><description>Recent content in Sore on Wilson Wu</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Mon, 10 Nov 2025 00:00:00 -0500</lastBuildDate><atom:link href="https://wilsonwu.me/zh/tags/sore/index.xml" rel="self" type="application/rss+xml"/><item><title>玩转大语言模型：轻松使用 Azure AI Foundry 提供的 Sora 2 生成视频</title><link>https://wilsonwu.me/zh/blog/2025/azure-ai-foundry-sora-2/</link><pubDate>Mon, 10 Nov 2025 00:00:00 -0500</pubDate><guid>https://wilsonwu.me/zh/blog/2025/azure-ai-foundry-sora-2/</guid><description>&lt;p&gt;随着 Azure AI Foundry 开放对 &lt;strong&gt;Sora 2（OpenAI 生成式视频模型）&lt;/strong&gt;的支持，开发者现在可以在企业级合规、可管控的环境中使用顶尖的视频生成能力。本教程将带你从零开始，通过 &lt;strong&gt;Playground&lt;/strong&gt; 和 &lt;strong&gt;Python SDK&lt;/strong&gt; 两种方式调用 Sora 2，完成「文本生成视频」的流程。&lt;/p&gt;</description><content:encoded><![CDATA[<p>随着 Azure AI Foundry 开放对 <strong>Sora 2（OpenAI 生成式视频模型）</strong>的支持，开发者现在可以在企业级合规、可管控的环境中使用顶尖的视频生成能力。本教程将带你从零开始，通过 <strong>Playground</strong> 和 <strong>Python SDK</strong> 两种方式调用 Sora 2，完成「文本生成视频」的流程。</p>
<h2 id="准备工作">准备工作</h2>
<p>在开始之前，你需要：</p>
<h3 id="获取-azure-订阅">获取 Azure 订阅</h3>
<p>拥有一个 <strong>Azure 订阅</strong>，如果您不清楚如何获取 Azure 订阅，可以参考<a href="/zh/blog/2024/build-own-chatgpt-on-azure/#%E5%85%88%E5%86%B3%E6%9D%A1%E4%BB%B6">之前文章中的注册 Azure 订阅内容</a>进行操作。</p>
<h3 id="创建-azure-ai-foundry">创建 Azure AI Foundry</h3>
<p>首先进入您的 Azure 订阅中的 AI Foundry，展开左侧 All Resources，找到 Azure AI Foundry，点击 Create 创建一个 Azure AI Foundry：</p>
<p><img alt="创建 Azure AI Foundry" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/1-azure-ai-foundry.png"></p>
<p>创建时注意区域选择，由于 Sora 2 模型并未在所有 Azure 区域开放预览，这里建议选择 East US 2 区域：</p>
<p><img alt="选择 AI Foundry 区域" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/2-create-ai-foundry.png"></p>
<h3 id="1-创建-azure-ai-foundry-project">1. 创建 Azure AI Foundry Project</h3>
<p>创建完成后进入您的 Azure AI Foundry 在 All Resources 中找到 Projects，点击 New 创建一个新的 Project：</p>
<p><img alt="创建 Project" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/3-azure-ai-foundry-project.png"></p>
<h3 id="2-打开-azure-ai-foundry-protal">2. 打开 Azure AI Foundry Protal</h3>
<p>创建完成 Project 后，打开您的 Project，点击 Go to Azure AI Foundry protal：</p>
<p><img alt="打开 AI Foundry Portal" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/4-go-to-portal.png"></p>
<p>正常情况下 Azure AI Foundry Protal 如下：</p>
<p><img alt="AI Foundry Portal" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/5-ai-foundry-portal.png"></p>
<h3 id="3-启用和部署-sora-2-模型">3. 启用和部署 Sora 2 模型</h3>
<p>又有 Sora 2 模型在本文发布时仍然处于预览状态，所以我们首先需要申请权限，后续开放使用后可调过本步骤，首先点击左侧的 Model catalog，可以看到 Sora 2 模型的标签，点击 Check out model：</p>
<p><img alt="Sora 2 模型" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/6-check-out-sora-2.png"></p>
<p>也可以在下方的模型列表找到想要的模型进行使用。</p>
<p>如果您没有使用 Sora 2 模型的权限，进入 Sora 2 模型介绍界面后将如下所示：</p>
<p><img alt="获取 Sora 2 模型权限" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/7-request-access-sora-2.png"></p>
<p>请点击 Request access 链接进行权限申请。</p>
<p>如您已经拥有 Sora 2 访问权限，可以点击 Use this model 进行模型部署：</p>
<p><img alt="使用 Sora 2 模型" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/8-use-sora-2.png"></p>
<p>部署过程非常简单，默认保持各类选项即可进行创建部署：</p>
<p><img alt="部署 Sora 2 模型" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/9-deploy-sora-2.png"></p>
<p>部署完成后，切换左侧菜单至 Models + endpoints，查看模型列表：</p>
<p><img alt="查看 Sora 2 模型" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/10-models-sora-2.png"></p>
<p>至此您就拥有了属于自己的 Sora 2 模型，可以开始使用！</p>
<h2 id="通过-azure-ai-foundry-playground-使用-sora-2">通过 Azure AI Foundry Playground 使用 Sora 2</h2>
<p>Azure AI Foundry 提供了强大的可视化界面，你可以无需写代码就生成视频。</p>
<h3 id="1-进入-playground">1. 进入 Playground</h3>
<p>打开 Azure AI Foundry 左侧菜单中的 Playgrounds，选择 Video playground：</p>
<p><img alt="Video Playground" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/11-video-playground.png"></p>
<p>进入 Playground 后选择 Sora 2 模型：</p>
<p><img alt="选择 Sora 2 模型" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/12-choose-sora-2.png"></p>
<h3 id="2-填写提示词-prompt">2. 填写提示词 Prompt</h3>
<p>示例 Prompt：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>A high-energy cyberpunk chase in the rain with neon reflections on wet streets. A futuristic motorcycle speeds through, dynamic motion blur capturing its sleek design and vibrant city lights.
</span></span></code></pre></div><p><img alt="输入提示词" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/13-input-prompt.png"></p>
<h3 id="3-设置选项">3. 设置选项</h3>
<p>可调节选项包括：</p>
<table>
	<thead>
			<tr>
					<th>选项</th>
					<th>说明</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>Attach an image</strong></td>
					<td>可以附加图片进行相视频的生成</td>
			</tr>
			<tr>
					<td><strong>Aspect ratio</strong></td>
					<td>视频长宽比，默认为 16:9</td>
			</tr>
			<tr>
					<td><strong>Resolution</strong></td>
					<td>分辨率，当前只提供 720p</td>
			</tr>
			<tr>
					<td><strong>Duration</strong></td>
					<td>输出视频时长（如 5s、10s），默认 8s</td>
			</tr>
	</tbody>
</table>
<p><img alt="设置生成参数" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/14-settings-sora-2.png"></p>
<h3 id="4-生成视频">4. 生成视频</h3>
<p>设置好后，点击 Generate 进行视频生成，视频生成成功后，你可以在 Generation history 中预览或下载视频：</p>
<p><img alt="生成视频" loading="lazy" src="/zh/blog/2025/azure-ai-foundry-sora-2/15-video.png"></p>
<h2 id="通过-python-调用-sora-2">通过 Python 调用 Sora 2</h2>
<p>Azure 为 OpenAI 模型提供统一的接口，可以直接在你的后端调用。</p>
<h3 id="1-安装-sdk">1. 安装 SDK</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>pip install azure-ai-openai
</span></span><span style="display:flex;"><span>pip install python-dotenv
</span></span></code></pre></div><h3 id="2-配置环境变量">2. 配置环境变量</h3>
<p>创建 <code>.env</code> 文件：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>AZURE_OPENAI_ENDPOINT<span style="color:#f92672">=</span>https://&lt;your-resource-name&gt;.openai.azure.com/
</span></span><span style="display:flex;"><span>AZURE_OPENAI_KEY<span style="color:#f92672">=</span>&lt;your-key&gt;
</span></span><span style="display:flex;"><span>AZURE_OPENAI_API_VERSION<span style="color:#f92672">=</span>2024-10-01-preview
</span></span></code></pre></div><h3 id="3-python-调用示例文生视频">3. Python 调用示例：文生视频</h3>
<p>下面是最简可运行示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> os
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> dotenv <span style="color:#f92672">import</span> load_dotenv
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> azure.ai.openai <span style="color:#f92672">import</span> OpenAIClient
</span></span><span style="display:flex;"><span><span style="color:#f92672">from</span> azure.core.credentials <span style="color:#f92672">import</span> AzureKeyCredential
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>load_dotenv()
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>client <span style="color:#f92672">=</span> OpenAIClient(
</span></span><span style="display:flex;"><span>    endpoint<span style="color:#f92672">=</span>os<span style="color:#f92672">.</span>getenv(<span style="color:#e6db74">&#34;AZURE_OPENAI_ENDPOINT&#34;</span>),
</span></span><span style="display:flex;"><span>    credential<span style="color:#f92672">=</span>AzureKeyCredential(os<span style="color:#f92672">.</span>getenv(<span style="color:#e6db74">&#34;AZURE_OPENAI_KEY&#34;</span>)),
</span></span><span style="display:flex;"><span>    api_version<span style="color:#f92672">=</span>os<span style="color:#f92672">.</span>getenv(<span style="color:#e6db74">&#34;AZURE_OPENAI_API_VERSION&#34;</span>)
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>prompt <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;&#34;&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">A cinematic shot of a spaceship flying through a nebula filled with colorful cosmic clouds.
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;&#34;&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>response <span style="color:#f92672">=</span> client<span style="color:#f92672">.</span>get_video(
</span></span><span style="display:flex;"><span>    model<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;sora-2&#34;</span>,
</span></span><span style="display:flex;"><span>    prompt<span style="color:#f92672">=</span>prompt,
</span></span><span style="display:flex;"><span>    duration<span style="color:#f92672">=</span><span style="color:#ae81ff">5</span>,              <span style="color:#75715e"># seconds</span>
</span></span><span style="display:flex;"><span>    resolution<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;1080p&#34;</span>,
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># 保存视频</span>
</span></span><span style="display:flex;"><span>video_bytes <span style="color:#f92672">=</span> response<span style="color:#f92672">.</span>video
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(<span style="color:#e6db74">&#34;output.mp4&#34;</span>, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> f:
</span></span><span style="display:flex;"><span>    f<span style="color:#f92672">.</span>write(video_bytes)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">&#34;Video generated: output.mp4&#34;</span>)
</span></span></code></pre></div><h3 id="4-使用结构化-payload">4. 使用结构化 payload</h3>
<p>Sora 还支持更多控制，例如镜头、分镜头脚本、环境细节。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-python" data-lang="python"><span style="display:flex;"><span>payload <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;prompt&#34;</span>: <span style="color:#e6db74">&#34;A cute corgi running on a beach during sunset.&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;duration&#34;</span>: <span style="color:#ae81ff">8</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;resolution&#34;</span>: <span style="color:#e6db74">&#34;720p&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;motion&#34;</span>: <span style="color:#e6db74">&#34;medium&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#e6db74">&#34;style&#34;</span>: <span style="color:#e6db74">&#34;realistic&#34;</span>
</span></span><span style="display:flex;"><span>}
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>response <span style="color:#f92672">=</span> client<span style="color:#f92672">.</span>get_video(
</span></span><span style="display:flex;"><span>    model<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;sora-2&#34;</span>,
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">**</span>payload
</span></span><span style="display:flex;"><span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open(<span style="color:#e6db74">&#34;corgi_beach.mp4&#34;</span>, <span style="color:#e6db74">&#34;wb&#34;</span>) <span style="color:#66d9ef">as</span> f:
</span></span><span style="display:flex;"><span>    f<span style="color:#f92672">.</span>write(response<span style="color:#f92672">.</span>video)
</span></span></code></pre></div><h2 id="生成最佳视频的技巧">生成最佳视频的技巧</h2>
<h3 id="1-提示词结构推荐general-prompt-template">1. 提示词结构推荐（General Prompt Template）</h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>[主体对象] + [场景环境] + [动作] + [镜头效果] + [光影] + [风格]
</span></span></code></pre></div><p>示例：</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>A high-energy cyberpunk chase in the rain with neon reflections on wet streets. A futuristic motorcycle speeds through, dynamic motion blur capturing its sleek design and vibrant city lights.
</span></span></code></pre></div><h3 id="2-控制一致性">2. 控制一致性</h3>
<ul>
<li>使用 <strong>seed</strong> 可重复生成风格一致的视频</li>
<li>合理设置 motion level 获得更自然的动作</li>
<li>提供清晰场景描述可减少模型误解</li>
</ul>
<h2 id="常见问题faq">常见问题（FAQ）</h2>
<h3 id="1-我试了但看不到-sora-2">1. 我试了但看不到 Sora 2？</h3>
<p>目前需要访问权限。你需要：</p>
<ul>
<li>联系 Azure 管理员</li>
<li>到模型页面确认已启用</li>
</ul>
<h3 id="2-视频最大时长是多少">2. 视频最大时长是多少？</h3>
<p>具体限制依区域会有不同，通常为 <strong>≤ 10 秒</strong>。</p>
<h3 id="3-python-生成的视频过小或无内容">3. Python 生成的视频过小或无内容？</h3>
<p>确保保存时使用 <code>response.video</code> 而不是错误字段。</p>
<h2 id="总结">总结</h2>
<p>本文介绍了在 <strong>Azure AI Foundry</strong> 中使用 <strong>Sora 2 文生视频模型</strong>的两种方式：</p>
<ul>
<li>使用可视化 <strong>Playground</strong> 快速体验</li>
<li>使用 <strong>Python SDK</strong> 在生产环境自动生成视频</li>
</ul>
<p>Azure 的企业级安全合规能力让 Sora 2 成为企业落地视频生成的重要选择。</p>
]]></content:encoded></item></channel></rss>