Python 完整示例
基础文生视频
Copy
import openai
import time
# 初始化客户端
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.laozhang.ai/v1"
)
def generate_video(prompt, model="sora_video2"):
"""生成视频"""
try:
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
}
]
}
]
)
return response.choices[0].message.content
except Exception as e:
print(f"错误:{e}")
return None
# 使用示例
prompt = "一只可爱的猫咪在阳光明媚的花园里玩球"
result = generate_video(prompt)
print(result)
流式输出示例
Copy
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.laozhang.ai/v1"
)
def generate_video_stream(prompt, model="sora_video2"):
"""流式生成视频,实时显示进度"""
stream = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
}
]
}
],
stream=True
)
video_url = None
for chunk in stream:
if chunk.choices[0].delta.content:
content = chunk.choices[0].delta.content
print(content, end='', flush=True)
# 提取视频链接
if "https://" in content and ".mp4" in content:
import re
match = re.search(r'https://[^\s\)]+\.mp4', content)
if match:
video_url = match.group(0)
print("\n")
return video_url
# 使用示例
prompt = "一只可爱的猫咪在阳光明媚的花园里玩球"
video_url = generate_video_stream(prompt)
print(f"\n视频链接:{video_url}")
图生视频(URL)
Copy
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.laozhang.ai/v1"
)
def generate_video_from_image(prompt, image_url, model="sora_video2"):
"""从图片生成视频"""
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
},
{
"type": "image_url",
"image_url": {
"url": image_url
}
}
]
}
]
)
return response.choices[0].message.content
# 使用示例
prompt = "生成视频:让这个手办形象从桌子上跳出来,变成活人的一个场景~"
image_url = "https://filesystem.site/cdn/download/20250407/OhFd8JofOAJCsNOCsM1Y794qnkNO3L.png"
result = generate_video_from_image(prompt, image_url)
print(result)
图生视频(Base64)
Copy
import openai
import base64
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.laozhang.ai/v1"
)
def encode_image(image_path):
"""将本地图片编码为 base64"""
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
def generate_video_from_local_image(prompt, image_path, model="sora_video2"):
"""从本地图片生成视频"""
# 编码图片
base64_image = encode_image(image_path)
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
},
{
"type": "image_url",
"image_url": {
"url": f"data:image/png;base64,{base64_image}"
}
}
]
}
]
)
return response.choices[0].message.content
# 使用示例
prompt = "让这个场景动起来,加入更多动态元素"
image_path = "/path/to/your/image.png"
result = generate_video_from_local_image(prompt, image_path)
print(result)
自动下载视频
Copy
import openai
import re
import requests
import os
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.laozhang.ai/v1"
)
def extract_video_url(content):
"""从响应中提取视频链接"""
match = re.search(r'https://[^\s\)]+\.mp4', content)
return match.group(0) if match else None
def download_video(url, save_path):
"""下载视频到本地"""
try:
response = requests.get(url, stream=True)
response.raise_for_status()
with open(save_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"视频已保存到:{save_path}")
return True
except Exception as e:
print(f"下载失败:{e}")
return False
def generate_and_download(prompt, save_dir="./videos", model="sora_video2"):
"""生成视频并自动下载"""
# 创建保存目录
os.makedirs(save_dir, exist_ok=True)
# 生成视频
print("正在生成视频...")
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
}
]
}
]
)
content = response.choices[0].message.content
print(content)
# 提取视频链接
video_url = extract_video_url(content)
if not video_url:
print("未找到视频链接")
return None
# 下载视频
import time
filename = f"sora_{int(time.time())}.mp4"
save_path = os.path.join(save_dir, filename)
if download_video(video_url, save_path):
return save_path
return None
# 使用示例
prompt = "一只可爱的猫咪在阳光明媚的花园里玩球"
video_path = generate_and_download(prompt)
print(f"视频路径:{video_path}")
JavaScript/Node.js 示例
基础文生视频
Copy
const OpenAI = require('openai');
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.laozhang.ai/v1'
});
async function generateVideo(prompt, model = 'sora_video2') {
try {
const response = await client.chat.completions.create({
model: model,
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: prompt
}
]
}
]
});
return response.choices[0].message.content;
} catch (error) {
console.error('错误:', error);
return null;
}
}
// 使用示例
generateVideo('一只可爱的猫咪在阳光明媚的花园里玩球')
.then(result => console.log(result));
流式输出
Copy
const OpenAI = require('openai');
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.laozhang.ai/v1'
});
async function generateVideoStream(prompt, model = 'sora_video2') {
const stream = await client.chat.completions.create({
model: model,
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: prompt
}
]
}
],
stream: true
});
let videoUrl = null;
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) {
process.stdout.write(content);
// 提取视频链接
const match = content.match(/https:\/\/[^\s\)]+\.mp4/);
if (match) {
videoUrl = match[0];
}
}
}
console.log('\n');
return videoUrl;
}
// 使用示例
generateVideoStream('一只可爱的猫咪在阳光明媚的花园里玩球')
.then(url => console.log(`\n视频链接:${url}`));
自动下载视频
Copy
const OpenAI = require('openai');
const fs = require('fs');
const https = require('https');
const path = require('path');
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.laozhang.ai/v1'
});
function downloadVideo(url, savePath) {
return new Promise((resolve, reject) => {
const file = fs.createWriteStream(savePath);
https.get(url, (response) => {
response.pipe(file);
file.on('finish', () => {
file.close();
console.log(`视频已保存到:${savePath}`);
resolve(savePath);
});
}).on('error', (err) => {
fs.unlink(savePath, () => {});
console.error(`下载失败:${err.message}`);
reject(err);
});
});
}
async function generateAndDownload(prompt, saveDir = './videos', model = 'sora_video2') {
// 创建保存目录
if (!fs.existsSync(saveDir)) {
fs.mkdirSync(saveDir, { recursive: true });
}
// 生成视频
console.log('正在生成视频...');
const response = await client.chat.completions.create({
model: model,
messages: [
{
role: 'user',
content: [
{
type: 'text',
text: prompt
}
]
}
]
});
const content = response.choices[0].message.content;
console.log(content);
// 提取视频链接
const match = content.match(/https:\/\/[^\s\)]+\.mp4/);
if (!match) {
console.log('未找到视频链接');
return null;
}
const videoUrl = match[0];
const filename = `sora_${Date.now()}.mp4`;
const savePath = path.join(saveDir, filename);
// 下载视频
await downloadVideo(videoUrl, savePath);
return savePath;
}
// 使用示例
generateAndDownload('一只可爱的猫咪在阳光明媚的花园里玩球')
.then(path => console.log(`视频路径:${path}`));
Cherry Studio 使用场景
Cherry Studio 是一款强大的 AI 对话客户端,支持 Sora 2 视频生成。配置步骤
1
配置 API
在 Cherry Studio 中添加 laozhang.ai 的 API 配置详见:Cherry Studio 配置文档
2
启用视频功能
在模型设置中找到 
sora_video2
,打开视频生成功能
3
文生视频
直接输入文字描述即可生成视频

4
图生视频
上传图片 + 提示词生成视频

使用示例
文生视频
在 Cherry Studio 对话框中直接输入:Copy
一只可爱的橘猫在阳光下打瞌睡,突然被一只蝴蝶惊醒,开始追逐蝴蝶
- 显示提示词优化结果
- 展示生成进度(队列状态、百分比)
- 提供视频播放链接
图生视频
- 点击上传图片按钮,选择参考图片
- 输入提示词:
Copy
生成视频:让这个场景动起来,加入微风吹过、树叶摇曳的效果
批量生成示例
Python 批量生成
Copy
import openai
import time
import concurrent.futures
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.laozhang.ai/v1"
)
def generate_single_video(prompt, model="sora_video2"):
"""生成单个视频"""
try:
response = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
}
]
}
]
)
return {
"prompt": prompt,
"result": response.choices[0].message.content,
"success": True
}
except Exception as e:
return {
"prompt": prompt,
"error": str(e),
"success": False
}
def batch_generate(prompts, max_workers=3, model="sora_video2"):
"""批量生成视频"""
results = []
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = [
executor.submit(generate_single_video, prompt, model)
for prompt in prompts
]
for future in concurrent.futures.as_completed(futures):
result = future.result()
results.append(result)
if result['success']:
print(f"✓ 成功:{result['prompt'][:30]}...")
else:
print(f"✗ 失败:{result['prompt'][:30]}... - {result['error']}")
return results
# 使用示例
prompts = [
"一只猫咪在花园里玩球",
"日落时分的海滩,海浪轻拍沙滩",
"繁忙的城市街道,车水马龙",
"森林中的小溪,阳光透过树叶洒下",
]
results = batch_generate(prompts, max_workers=2)
# 统计结果
success_count = sum(1 for r in results if r['success'])
print(f"\n生成完成:成功 {success_count}/{len(prompts)}")
最佳实践
提示词优化
提示词优化
- 描述具体场景和动作
- 包含光线、氛围等细节
- 使用
@sama
等授权真人ID - 避免描述真实人脸(会被拒绝)
错误处理
错误处理
- 设置合理的超时时间(建议 5 分钟)
- 添加重试逻辑
- 记录失败原因
- 使用流式输出监控进度
视频下载
视频下载
- 生成后立即下载(有效期 1 天)
- 使用流式下载大文件
- 保存到本地或云存储
- 做好备份
成本优化
成本优化
- 优先使用稳定性高的模型
- 根据需求选择 10s/15s
- 批量生成时控制并发数
- 失败不计费