
给短剧素材换一个视频模型,不该只是改掉配置中的一串名字。我更想先回答:哪些镜头来自哪个渠道、用了什么模型和提示词记录、来源能否追溯、旧端点是否已经停用。这里写一个离线检查器,不生成视频,也不自动切换服务。
Google视频生成文档于2026-10-22更新,明确列出Gemini API中的三个Veo 3.1 Preview端点于当天停用。这个范围是“该渠道的这些端点”,不是所有渠道的Veo都停用。这里保留的是离线状态快照,正式使用前还要核对最新状态。

先定义小而明确的格式
本例每行六列:shot_id、channel、model、prompt_ref、source、endpoint_ref,用竖线分隔。字段内禁止竖线和换行;若要容纳任意提示词,就应改用有转义规则的成熟格式,不能继续拼字符串。prompt_ref指向提示词记录,不在清单里塞完整长提示词。
source要求非空HTTPS引用,但字符串通过不表示链接可访问或具有授权;endpoint_ref也只是记录,不是可调用URL白名单。校验器不会发网络请求,不会读取凭证。
use std::collections::BTreeSet;
fn check(text: &str) -> Vec<(usize,&'static str)> {
let mut errors=Vec::new();let mut ids=BTreeSet::new();
let retired=[
("gemini-api","veo-3.1-generate-preview"),
("gemini-api","veo-3.1-fast-generate-preview"),
("gemini-api","veo-3.1-lite-generate-preview"),
]; // offline snapshot: 2026-10-23, official document updated 2026-10-22
for (i,line) in text.lines().enumerate() {
let f:Vec<_>=line.split('|').collect();
if f.len()!=6 { errors.push((i+1,"schema"));continue; }
if f.iter().any(|v|v.trim().is_empty()) {errors.push((i+1,"missing field"));}
if !f[0].trim().is_empty() && !ids.insert(f[0]) {errors.push((i+1,"duplicate ID"));}
if retired.contains(&(f[1],f[2])) {errors.push((i+1,"retired endpoint"));}
if !f[4].is_empty() && !f[4].starts_with("https://") {
errors.push((i+1,"source must be HTTPS"));
}
}
errors
}
fn main() -> Result<(),Box<dyn std::error::Error>> {
let fixture="s1|local|fixture|p1|https://example.org/source|offline\ns1|gemini-api|veo-3.1-generate-preview|p2||online";
let errors=check(fixture);
assert!(errors.contains(&(2,"duplicate ID")));
assert!(errors.contains(&(2,"missing field")));
assert!(errors.contains(&(2,"retired endpoint")));
assert!(check("broken").contains(&(1,"schema")));
if let Some(path)=std::env::args().nth(1) {
for (line,error) in check(&std::fs::read_to_string(path)?) {
println!("line {line}: {error}");
}
} else { println!("manifest classifier: 4 cases passed; no network requests"); }
Ok(())
}
本地rustc 1.98.0编译通过,四类断言成功。无参数运行内置样例;传入路径时用read_to_string读取本地清单并逐行报错。测试中的example.org只做示例字符串,不是已核实的素材来源。
错误需要不同的处理
缺字段是清单不完整,重复ID可能导致镜头被覆盖,retired endpoint表示离线快照已知失效;三者可以同时出现,不应只报第一个错误。未知模型不等于可用模型,本例没有返回“已确认可调用”的状态。
快照应带访问日期、官方更新日期、渠道和具体模型ID。实际发布前重新检查官方页面;页面不可访问或信息冲突,就保留unknown,不能自动找个相似名字替代。迁移是否兼容角色参考、时长、音频或输出格式,需要另做调用测试,本轮没有验证。
清单不能替代素材审查
能定位来源,只是追溯的起点。肖像、声音、音乐和原始素材的许可要另行核对;模型ID相同也不能证明输出内容正确。这个Rust工具负责把可机械检查的缺口显式报出来,让后续人工检查有入口,而不是替素材盖“可发布”的章。
本文介绍一个用Rust编写的离线校验工具,用于检查短剧素材清单的格式合规性与元数据完整性。重点校验字段缺失、重复ID、失效API端点(如已停用的Veo 3.1 Preview)、非空HTTPS source及endpoint_ref有效性。工具不发起网络请求,仅做静态解析与断言,支持本地文件读取与内置样例运行,强调错误分类上报与人工审查衔接。

284

被折叠的 条评论
为什么被折叠?



