我前后调整了很多轮,才把这条三十多秒的古诗视频做成现在的样子。

它看起来只是四幅中国画、四段诗句和一首背景音乐,但真正困难的地方并不是“生成一张漂亮古画”,而是同时解决下面几件事:

  • 一首诗的不同句子应该有不同颜色和不同画法,不能全部套一张泛黄古绢模板。
  • 动态必须来自画里的水、鸟、马、柳枝和衣袍,不能用后期推镜假装图生视频。
  • 画面要动,但寺庙不能重建、鸟不能越动越多、马不能多腿、树枝不能凭空生长。
  • 白色模型星标需要处理,但传统红色方印必须保留。
  • 两句诗要像题跋一样从右到左逐字出现。
  • 每段 AI 视频自带的风、水、鸟鸣和马蹄声不能丢,BGM 也要连续播放。
  • 场景之间需要自然溶解,不能黑一下,也不能把环境声突然切断。
    这篇文章以《钱塘湖春行》为例,把这套真实工作流完整拆开。

零、这条视频用了哪些工具

这不是靠一个软件完成的,而是一条由 Codex 串起来的本地媒体流水线。

我用 Codex+ Gemini,几分钱成本,把《钱塘湖春行》做成了一条会呼吸的中国画视频 第1张图片

Codex 在这里不是绘图模型,也不是视频模型。它更像整条流水线的导演和质检员:

古诗 → 意象与情绪 → 分镜 → 静帧提示词
→ AI 生图 → Docker I2V → 抽帧验收
→ 星标处理 → 毛笔字字幕 → 原声与 BGM 混音
→ 交叉溶解 → 最终 MP4 QA

一、先承认一个问题:古诗视频不等于“统一古绢色”

最初的画面都比较像:泛黄纸张、左边一棵树、右边留白、远处淡山。单张看没有问题,连续看就像同一个模板反复换主体。

《钱塘湖春行》本身不是单一情绪。它从湖寺与低云开始,转向早莺与新燕,再进入乱花浅草和骑马游春,最后落在绿杨白堤。四个段落的视觉任务不同,色调当然也不应该完全一致。

所以我最后只统一三件事:

  1. 中国画的文化可信度和笔触质量。
  2. 唐代人物、建筑、马具和自然物象的时代合理性。
  3. 低饱和、克制颜料和竖屏题字区域。
    其他部分允许变化:

我用 Codex+ Gemini,几分钱成本,把《钱塘湖春行》做成了一条会呼吸的中国画视频 第2张图片

统一的是“系列 DNA”,不是统一色卡。

二、长诗默认两句一景,不要把整首诗塞进第一张图

《钱塘湖春行》有八句。我把连续两句合成一景,共四景:

孤山寺北贾亭西,水面初平云脚低。
几处早莺争暖树,谁家新燕啄春泥。
乱花渐欲迷人眼,浅草才能没马蹄。
最爱湖东行不足,绿杨阴里白沙堤。

每景只承担自己的意象。第一景不能提前出现莺燕和马,第二景不能把白沙堤也画进去。

我会为每景先写一张小型清单:

  • 诗句中的明确名词。
  • 一个主动作。
  • 前景、中景、远景和天空。
  • 这一景在整首诗里的情绪作用。
  • 属于其他场景、必须禁止出现的物象。
    这一步看起来慢,实际能减少大量重生。图像模型最容易犯的错误,就是觉得“既然是《钱塘湖春行》,那就把花、鸟、马、柳树和白堤全部放进每张图”。

三、静帧提示词要让诗推动画面,而不是让参考图支配诗

最终四张静帧通过用户指定的兼容图像 API 并行生成,早期样片则用内置 ImageGen 验证。为了让 Skill 能在 Codex 中直接复用,开源版本默认使用内置 image_gen,但分镜、提示词和验收规则不绑定某一家图像服务。

参考图只应该锚定材质、笔触和细节质量,不能复制它的构图。

每张静帧提示词至少要包含:

完整诗歌背景
当前两句原文
本景允许出现的明确物象
一个主视觉事件
前景 / 中景 / 远景 / 天空
本景独立的画法、色调和光线
右侧两列题字安全区
禁止生成文字、水印和现代物品
禁止泄漏其他场景的物象

真正重要的是“一景一条风格通道”。第二景的工笔鸟羽和第一景的淡墨水气可以不同,但它们的颜料克制、时代细节和中国画质感必须属于同一部片。

四、用户的一句纠正,改变了整个图生视频提示词

最开始的动态方案里有慢速推近。用户很快指出:

不对,不是推移。我是指你的图生视频提示词可以琢磨一下。

这句话非常关键。

很多所谓“动态古画”,其实只是静态 PNG 在后期从 100% 放大到 104%。画面确实动了,但水没有流、鸟没有叫、柳枝没有风、马也没有呼吸。

真正的图生视频应该让画中存在的原因产生画中存在的结果:

  • 鸟鸣对应鸟喙张合和注意姿态。
  • 水声对应接触点扩散的水纹。
  • 风声对应芦苇、柳枝和衣袍摆动。
  • 马蹄声对应一次可读的抬蹄与落地。
    镜头因此改为默认完全锁定:

LOCKED CAMERA
no zoom, push, pan, tilt, roll, reframing, parallax or crop change

动态来自画中物象,而不是摄影机。

五、图生视频提示词最终拆成四个部分

1. 静态锚点

明确告诉模型,哪些东西绝对不能动、不能重画:

寺庙屋顶、亭台、山体轮廓、树干、主枝、岸线、人物躯干、马体、红印、题字留白区

2. 局部动作区

每景只设置一个主动作,再加一到两个小动作:

主动作:两圈水纹从现有芦苇接触点扩散
辅助动作:芦苇一起弯曲一次;倒影只闪动几个像素

动作越多,模型越容易把整张图重新画一遍。

3. 稳定收尾

每段最后约一秒让残余动作慢慢停下。这样下一景做交叉溶解时,不会一边剧烈挥动、一边突然透明。

4. 反幻觉禁令

不同场景需要不同禁令:

禁止新增主体
禁止改变鸟数
禁止树枝生长
禁止柳叶脱落
禁止云雾变成描边祥云
禁止建筑重建
禁止多腿、融合关节和身体替换
禁止生成文字与额外印章

提示词不再只是“让画面动起来”,而是“只允许指定区域以指定方式动起来”。

六、真实失败一:低云变成了祥云,寺庙也被重新搭建

第一景最初要求低云移动、薄雾绕过寺庙。模型把“云雾运动”理解成了重新设计天空,中段出现大量描边祥云,寺庙层数和位置也发生变化。

我后来彻底取消了天空动画,只让前景水纹和芦苇承担动态:

Everything above the foreground waterline is completely frozen.
Sky, clouds, mist, mountains, trees, temple and pavilion do not move.

结果反而更自然。画面不需要所有区域都动,只要观众能看到水面正在发生事情,就已经不是静态壁纸。

七、真实失败二:莺越飞越多,树枝越长越

第二景的静帧里有三只莺、两只燕。最初让一只飞行中的莺落到树枝上,模型在运动过程中复制了鸟,还补画了新的垂枝。

问题在于“落到树枝”包含了较长距离移动、身体姿态变化和落点重构。

修正版不再让鸟跨画面飞行:

  • 飞行中的莺围绕原身体中心振翅一次,位移不超过画面高度的 3%。
  • 栖枝莺只转头和张嘴。
  • 燕子只在原泥点完成低头、啄泥、抬头。
  • 整棵树完全冻结,不允许摆动、生长或新增枝条。
    不是动作越大越好,而是动作越可控越好。

八、真实失败三:柳树一动,叶子就飞满天空

第四景原本要求柳枝两次风动、马匹向前走一步、水面出现流光。模型把“柳枝风动”扩展成了大量脱落叶片。

修正版增加了非常具体的连接关系:

Each leaf remains connected to its original twig.
No leaf, twig, petal or debris may detach or fly through the air.

图生视频最有效的限制,往往不是抽象的“不要变形”,而是写清楚物体必须继续连接到哪里。

九、只清白色星标,红色方印必须留下

视频右下角会出现白色星形或菱形标记,而静帧左下角有传统红色方印。

这两个东西在视觉上都像“标记”,但语义完全不同:

  • 白色星标是需要按用户要求处理的模型覆盖层。
  • 红色方印是中国画构图的一部分。
    清理脚本因此只锁定右下角白色菱形区域,不能做全画面自动抹除。处理后还要重新抽取右下角和左下角画面:白色星标消失,红印仍然存在,才算通过。

十、毛笔字不是一次出现,而是像题跋一样写出来

字幕使用 Ma Shan Zheng。两句诗分别放在两列:

  • 第一句在右列。
  • 第二句在左列。
  • 标点不显示。
  • 每个字间隔约 0.42 秒出现。
  • 每景末尾一起淡出,给转场留出空间。
    这里使用 ASS,而不是把文字直接生成进图片。原因很简单:绘图模型生成汉字不可靠,后期字幕才能保证每个字正确、位置一致并可修改。

我用 Codex+ Gemini,几分钱成本,把《钱塘湖春行》做成了一条会呼吸的中国画视频 第3张图片

十一、AI 原环境声不能丢,BGM 也不能每景重启

每段 I2V 视频都带有自己的环境声:湖水、风、鸟鸣、翅膀、草叶、衣袍和马蹄。

最初拼接时最容易犯两个错误:

  1. 烧录字幕时只保留画面,把模型原声丢掉。
  2. 每个场景都重新播放一次 BGM,导致音乐在转场处反复从头开始。
    最后的音频结构是:

场景 1 原声 ─┐
场景 2 原声 ─┼─ acrossfade ─┐
场景 3 原声 ─┤ ├─ amix ─ limiter
场景 4 原声 ─┘ │
连续 BGM ────────────────────┘

BGM 可以低音量铺底,也可以按用户要求 100% 原始增益与环境声并行。两种模式都不能做逐句抽吸,也不能在每景重新开始。

十二、自然渐变不只是画面,也包括环境声

四景之间使用 1.2 秒交叉溶解:

  • 画面:xfade=transition=fade
  • 原环境声:acrossfade
  • BGM:全片连续播放
    实际编码时还遇到一个 FFmpeg 细节:xfade 会把输出提升成 4:4:4 色彩格式,而 H.264 High Profile 不接受默认的 4:4:4 输入。

最终在交叉溶解之后显式增加:

format=yuv420p

这个错误很典型:所有素材都已经是 yuv420p,但滤镜链中间仍可能改变像素格式。必须检查最终编码,不要根据输入文件推断输出一定正确。

十三、最终验收看的不是提示词,而是编码后的 MP4

最终视频是:

  • 1080×1920
  • 30fps
  • H.264 + AAC
  • 32.44 秒
  • 四个场景
  • 三个 1.2 秒转场
    我从最终 MP4 重新抽取:

我用 Codex+ Gemini,几分钱成本,把《钱塘湖春行》做成了一条会呼吸的中国画视频 第4张图片

  • 每景主画面。

  • 三个转场中点。

  • 马匹与人物高风险帧。

  • 最后一帧。

  • 每景右下角星标区域。

  • 左下角红印区域。
    同时检查:

  • 寺庙有没有复制或重构。

  • 鸟数是否始终正确。

  • 马是否保持四腿并接触同一地面。

  • 右侧题字区域是否干净。

  • 白色星标是否消失。

  • 红印是否保留。

  • 有没有黑帧、损坏末帧和长静音。

  • 视频与音频编码是否符合发布规格。
    自动命令通过,只能说明文件能播放;视觉关系通过,才说明视频能交付。

十四、把一次项目改成 Skill,真正固化的是什么

这个项目最后被整理成了 classical-poem-silk-video Agent Skill。

它固化的不是《钱塘湖春行》四张图,而是下面这些可复用判断:

  • 四句以内逐句成景,长诗默认两句一景。
  • 风格统一不等于色调完全一致。
  • 图生视频默认锁定镜头。
  • 每景一个主动作,局部动作优先于长距离移动。
  • 静态锚点必须具体到建筑、树干、岸线和身体中心。
  • 每景最后一秒收稳,方便自然转场。
  • 星标和红印必须区别处理。
  • 毛笔字字幕后期生成,不交给绘图模型。
  • 模型原环境声必须保留。
  • BGM 全片连续,不随场景重启。
  • 最终 MP4 必须重新抽帧验收。
    Skill 的价值,就是把“这次终于改对了”变成“下一次默认不会再错”。

十五、完整工作流总结

读取整首诗
→ 识别时代、地点、季节、意象和情绪弧线
→ 逐句或两句一景
→ 为每景选择独立中国画风格通道
→ AI 生图并行生成无字静帧
→ 写静态锚点 + 局部动作提示词
→ Docker I2V 生成带环境声的视频
→ 抽取早、中、晚、收尾帧验收
→ 只重做不合格镜头
→ 按需处理白色星标,保留红印
→ 生成两列毛笔字逐字字幕
→ 烧录字幕并保留原声
→ 画面和环境声交叉溶解
→ 连续混入 BGM
→ 对最终编码 MP4 做视觉与媒体 QA

这套方法不只适合唐诗。宋词、元曲、山水散文、古文名句,只要能够拆成明确意象,都可以用同一套流程制作。

真正让古画“活起来”的,不是让整幅画一直动,而是让最应该动的那一小部分,按照诗句的原因自然地动。

开源 Skill:https://github.com/Mr-funny/hbg-classical-poem-silk-video


来源:@Hamburgerai · 发布于 2026-08-03 18:14:46 · 原文链接