guanghulab/video-ai-system/tools/run-qinshan-batch.js
冰朔 e8cf2e78f3
Some checks failed
自动更新代码和重启 / update-and-restart (push) Has been cancelled
CI检查 + 自动部署 / check (push) Has been cancelled
CI检查 + 自动部署 / deploy (push) Has been cancelled
D133: 镜1主角+镜2牌匾尺寸双重修复 · ENV-002物理尺寸约束
2026-06-15 18:06:14 +08:00

51 lines
2.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 光湖视频AI · 秦山号 · 批量生成镜2-镜7
* D131 · 铸渊 ICE-GL-ZY001
*/
const path = require('path');
const { generateVideo } = require('../engines/video-api-adapter');
const SHOTS = [
{ id: 'shot02', prompt: '33岁亚洲男性双手特写粗糙老茧黑色机油嵌入指甲缝昏暗灯光下一双劳动者的手真人科幻短剧写实质感低饱和度冷色调', duration: '5' },
{ id: 'shot03', prompt: '船舱剧烈震动33岁亚洲男人身着深蓝工装从床铺猛地坐起抓住床头铁杆特写铁杆上金属铭牌标记秦山号紧张氛围真人科幻写实风格', duration: '5' },
{ id: 'shot04', prompt: '布满灰尘的圆形舷窗观察窗一道非人黑影极速掠过33岁男人猛转头警觉惊悚氛围真人科幻写实风格低饱和度冷色调', duration: '5' },
{ id: 'shot05', prompt: '破旧工具包打开特写金属工牌编号000768姓名林昊岗位模糊不清照片上人脸部位被利器划烂隐约可见年轻帅气轮廓暗光悬疑真人科幻写实风格', duration: '5' },
{ id: 'shot06', prompt: '33岁亚洲男人身着深蓝工装背起硕大黑色工具包手持半米长金属管钳走向锈蚀舱门逆光剪影侧身轮廓决然姿态真人科幻写实风格电影级光影', duration: '5' },
{ id: 'shot07', prompt: '管钳砸向舱门下液压凸起装置白色蒸汽猛烈喷射33岁男人咬紧牙关用力门把手缓缓转动紧张氛围真人科幻写实风格', duration: '5' },
];
async function runShot(shot) {
const outputPath = path.resolve(__dirname, `../outputs/shots/qinshan-ep01-${shot.id}.mp4`);
console.log(`\n🎬 ${shot.id} · ${shot.prompt.substring(0, 40)}...`);
try {
const result = await generateVideo({ ...shot, resolution: '1080p', outputPath });
console.log(`${shot.id} 完成 · ${result.taskId}`);
return { ok: true, ...result };
} catch (err) {
console.error(`${shot.id} 失败: ${err.message}`);
return { ok: false, error: err.message };
}
}
async function main() {
console.log('='.repeat(60));
console.log('🎬 秦山号 · 批量生成镜2-镜7');
console.log(' 共6镜 · 每镜5秒 · Seedance 2.0 真人写实');
console.log('='.repeat(60));
const results = [];
for (const shot of SHOTS) {
results.push(await runShot(shot));
}
console.log('\n' + '='.repeat(60));
const ok = results.filter(r => r.ok).length;
const fail = results.filter(r => !r.ok).length;
console.log(`${ok}成功 ❌ ${fail}失败 / 共${SHOTS.length}`);
if (fail > 0) {
results.filter(r => !r.ok).forEach(r => console.log(`${r.error}`));
}
console.log('='.repeat(60));
}
main();