视频 · Claude Opus
卡通动物冷知识短视频
制作一支节奏明快的动物科普短片,以夸张卡通角色、动态字幕和趣味比喻讲解事实。
Prompt
<inputs>
请先问我想要哪种动物,或提出3个各有一个惊人真相的动物。再问我有哪种图像模型(任何接受参考图的模型都可以),并问我想用付费语音(ElevenLabs)还是免费语音(Kokoro)。然后撰写30–35秒的脚本和分镜计划,并在生成或花费任何费用之前把两者都给我看。
</inputs>
<direction>
一段1080x1920的卡通动物知识短视频。画风为平面2D卡通:粗深棕色轮廓线,平涂色彩配简单的赛璐璐阴影,大而富有表现力的眼睛,矢量风格。角色是抠图,在插画背景上移动,场景每隔2–3秒切换一次。
字幕为白色药丸形,居中于y 1470:字体 Luckiest Guy 66px,墨色文字#1f1418,药丸高度为字号的1.55倍,墨色描边7px,每组2–3个词。每组中有一个关键词为黄色#ffd21f,其墨色描边为字号的0.14倍。每组字幕以0.82倍缩放弹入,耗时0.13秒,带回弹缓动。
大标题词位于y 430,字体为Luckiest Guy,104–170px。墨色描边为字号的0.22倍,其下方有一层较深的副本,尺寸为0.09倍。配色组合:黄色#ffd21f/#c27a10,红色#ff4a3d/#8e1a14,粉色#ff7ab8/#a8336d,白色#ffffff/#9aa6b4。它们以弹簧效果弹入,缩放为1 - 0.6·e^(-9t)·cos(20t),然后摆动±1.4°。
标注为红色马克笔圆圈(20px墨色描边 + 11px #ff3b30,倾斜-7°)以及弯曲红色箭头(26px墨色描边 + 13px红色)。命中效果为黄白色星爆,配白色速度线。每个水下或空中场景都有飘动的光点,每个场景都有柔和的暗角。
禁止:任何1秒内没有任何运动的画面,对静止画面的缓慢推近,角色被烘焙进背景,写实渲染,文字渐变,表情符号,标题中的句号。
</direction>
<structure>
时长:由配音决定,30–35秒,语速约每秒3.5词,每句一个事实,每个事实配一个幽默比喻。
0秒处的开场钩子提问“为什么这种动物要做[weirdest fact]?”,同时角色在屏幕上亲自做出这一动作。红圈在指代该主体的词上围绕主体绘制,命中效果落在动词上,伴随星爆、标题词和抖动 → 名称卡:动物带着速度线入场,其名称以标题形式猛然砸入 → 在新背景上出现对比段落(怪物、巨人、致命),关键词上伴随1.1倍的变焦冲击和抖动 → 现实世界的大小对比(一个指尖、一部手机、一辆公交车),配弯曲红色箭头和测量数字 → 每个后续事实都有自己的比喻场景(空荡的夜店对应“罕见”,婚礼对应“许多伴侣”,保安对应“防御”,清单卡对应“它失去的东西”,数字用计数器从1弹跳到N)。每个事实都要有新背景或新构图,关键词处有姿势切换,一个标题词和一个音效。最令人作呕或最震惊的事实获得最大的标题,并配悲伤长号 → 最后一句把开场钩子翻转为妙语,以一个大的收尾动作(巨型爱心、爆炸)结束,并让标题保持到最后。每1.5–3秒切一次镜头;镜头内部,每0.5–1秒就要有新的事情发生。
</structure>
<build>
1. 工具:Python、带Chromium的Playwright、FFmpeg、faster-whisper、OpenCV、Pillow。缺什么就安装什么,并告诉我你装了哪些。
2. 美术,仅使用2张图片:
- 姿势表:一张1:1图,分辨率2K,提示词为“一个3×3的姿势表,9个独立姿势位于纯白底上,留白充足,互不接触,无网格线,无文字,无地面阴影”。
- 9个姿势:中性、张嘴大喊、震惊、脸红尴尬、心形眼的恋爱状、冒汗担忧、攻击、用于收尾的破败或干瘪版本,以及一个配角。所有姿势朝同一方向;用代码翻转。
- 图像模型常常在每个格子里只画一个角色。若出现这种情况,就用代码生成第二个角色:在Lab色彩空间中重新上色,并裁切或添加特征。
- 背景网格:一张9:16图,分辨率4K,以姿势表作为风格参考,提示词为“一个3×3的网格,包含9个等高面板,由细白色间距隔开,每个都是空场景,无角色,无文字,保持下方中间区域空白”。
- 沿白色间距切分(最小通道均值超过232的行和列),向内裁切4px,用Lanczos缩放到1080x1920,然后以半径2、强度60%进行USM锐化。
3. 抠图:
- 从边界开始对白色做漫水填充,每个通道的浮动范围为7;这也会去除柔和的光晕。对被鳍或肢体包围的白色区域手动添加种子点。
- 在每个形状外侧生成一条3px柔和的alpha带,按(250 - 最小通道值) / 150计算,然后从边缘像素中去除白色混合。
- 按网格单元对连通域分组,裁切并保存为PNG。
- 若某个姿势触及图表边缘,则通过模板匹配,从另一个姿势移植缺失部分。
4. 配音:ElevenLabs eleven_v4(单次录制)或 Kokoro。
- 将超过0.2秒的每个停顿缩短至0.13秒,且仅在10毫秒窗口内响度低于-40 dB的位置。
- 用 ffmpeg atempo 加速(约1.14倍),直到时长落在30–33秒之间。
- 对最终文件运行带词级时间戳的 faster-whisper small.en,并写入 words.js。每个切点、姿势切换、标题和音效都从真实单词的开始时间开始。
5. 制作:使用一个 HTML canvas,每一帧都是时间的纯函数。暴露 window.seek(t)、字体和图片加载完成后的 window.READY、window.END,以及包含每个音效事件时间的 window.EV。
- 角色:用位置、缩放、旋转和翻转绘制每个抠图。
- 游动或行走时,将其切成28条垂直切片绘制,每条按sin(8t - 4.5u) × 10px(快速冲刺时为14px)偏移,并按((u - 0.3) / 0.7)^1.5 向尾部加权。
- 待机起伏幅度为10px,频率为2.7 rad/s,另加±0.035 rad的倾斜。
- 姿势切换是瞬时换图,并带有挤压效果1 + 0.18·e^(-10t)·cos(22t)。
- 入场以三次方缓出,历时0.3–0.5秒,伴随5条白色速度线,宽度9px,相距34px。
- 击中效果是24角的黄白色星爆(半径不超过105px,绝不覆盖面部),在0.45秒内出现10条飞散线,并伴随镜头抖动22–34px,以e^(-7t)衰减。
- 附着于角色的任何元素都放置在该角色的局部坐标系中,因此会随之移动。绘制顺序决定前后与内外关系。
- 摄影机:用 setTransform 设置缩放和焦点。关键词上使用1.1倍的变焦冲击,并在2秒内做1到1.4倍的推近。当摄影机推向背景元素时,在世界坐标中绘制该背景,使其不会滑动。
- 背景:铺满式适配,每秒缓慢漂移1–2%的缩放。添加40个光点(2–6.5px,透明度0.45,每秒上升14–50px)以及0.35–0.55的暗角。
- 代码中的道具:红圈(0.28秒内绘制完成)、弯曲箭头、带红色X印章的清单卡片、从1弹跳计数到N的计数器、上升的爱心、用于变形的烟团云,以及DNA、风滚草或带流动细胞的容器等简单图形。
6. 渲染:
- 使用 Playwright Chromium,每一帧调用--allow-file-access-from-files calls seek,以60 fps渲染,在半帧时长内生成6个运动模糊子帧,并以 globalAlpha 1/(i+1) 混合。
- 将JPEG帧通过管道输入ffmpeg libx264,CRF为16。
- 在完整渲染之前,先给我看12–15帧的接触表,并修复被遮挡、移出画面或未运动的任何元素。
7. 声音:
- 音乐:一首轻快的卡通配乐(Pixabay免费素材),每个乐句都比人声低7–10 dB。
- 音效:每个事件使用一个从Mixkit下载的音效。入场用呼啸声,击中用咀嚼声或撞击声,标题用爆裂声,落地用弹跳声,爱心用亲吻声,恶心事实用悲伤长号,被拒用失败蜂鸣声,变形用噗声,水下场景用气泡声。
- 混音至约-14 LUFS,然后以CRF 21重新编码以便上传。
</build>
<gotchas>
图像模型往往会忽略“两个不同的角色”这一要求,因此从一开始就要规划重新上色。不要把绘制函数命名为 frame,因为渲染器的抓帧钩子可能会使用 window.frame。Whisper 会拆分复合名称("angler fish");匹配字幕之前先将其合并,并检查字幕词数是否与转录词数相等。静止姿势超过1秒就会显得像 AI 粗制滥造,因此屏幕上的所有内容都要每帧起伏、摇摆或产生反应。
</gotchas>
<start>
请先问我要哪种动物,或提出3个备选,然后把脚本和分镜计划给我看。
</start><inputs>
Ask me which animal I want, or pitch 3 animals that each have one insane true fact. Ask which image model I have (any model that takes a reference image works) and whether I want a paid voice (ElevenLabs) or a free one (Kokoro). Then write a 30-35 s script and a shot plan, and show me both before you generate or spend anything.
</inputs>
<direction>
A 1080x1920 cartoon animal-facts short. The art is flat 2D cartoon: thick dark brown outlines, flat colours with simple cel shading, big expressive eyes, vector look. Characters are cutouts that move over illustrated backgrounds, and the place changes every 2-3 s.
Captions are a white pill centred at y 1470: Luckiest Guy 66px, ink text #1f1418, pill height 1.55x the font size, a 7px ink outline, 2-3 words per chunk. One key word per chunk is yellow #ffd21f with an ink stroke 0.14x the font size. Each chunk pops in from 0.82 scale in 0.13 s with a back ease.
Big title words sit at y 430 in Luckiest Guy 104-170px. The ink stroke is 0.22x the size, with a darker copy 0.09x the size underneath. Pairs: yellow #ffd21f/#c27a10, red #ff4a3d/#8e1a14, pink #ff7ab8/#a8336d, white #ffffff/#9aa6b4. They spring in, scale 1 - 0.6·e^(-9t)·cos(20t), then wobble ±1.4°.
Annotations are a red marker ring (20px ink + 11px #ff3b30, tilted -7°) and a curved red arrow (26px ink + 13px red). Hits are a yellow and white starburst with white speed lines. Every water or air scene has drifting specks, and every scene has a soft vignette.
Banned: any frame where nothing moves for 1 s, slow push-ins on a still, characters baked into backgrounds, realistic rendering, gradients on text, emoji, full stops in titles.
</direction>
<structure>
Length: the voice decides, 30-35 s at about 3.5 words per second, one fact per sentence, with a joke metaphor for each fact.
0 s the hook asks "why does this animal do [weirdest fact]?" while the character does it on screen. The red ring draws around the subject on the word that names it, and the hit lands on the verb with a starburst, a title word and a shake → the name card: the animal enters with speed lines and its name slams in as a title → a contrast beat (monster, giant, deadly) on a new background, with a 1.1 zoom punch and a shake on the key word → a real-world size comparison (a fingertip, a phone, a bus) with a curved red arrow and the measured number → each next fact gets its own metaphor scene (an empty nightclub for "rare", a wedding for "many partners", a bouncer for "defences", a checklist card for "what it loses", a counter popping 1 to N for numbers). Every fact gets a new background or framing, a pose swap on its key word, one title word and one sound → the grossest or most shocking fact gets the biggest title and a sad trombone → the last line flips the hook into a punchline, with one big final move (a giant heart, an explosion) and the title held to the end. Cut every 1.5-3 s; inside a shot, something new happens every 0.5-1 s.
</structure>
<build>
1. Tools: Python, Playwright with Chromium, FFmpeg, faster-whisper, OpenCV, Pillow. Install what's missing and tell me what you installed.
2. Art, only 2 images:
- Pose sheet: one 1:1 image at 2K, "a 3 by 3 pose sheet, 9 separate poses on plain pure white, plenty of white space, nothing touching, no grid lines, no text, no ground shadows".
- The 9 poses: neutral, yelling with the mouth open, shocked, embarrassed with a blush, in love with heart eyes, worried with a sweat drop, attacking, a ruined or shrivelled version for the payoff, and one side character. All face the same way; flip them in code.
- Image models often draw one character in every cell. If that happens, make the second character in code: recolour it in Lab space and cut or add features.
- Background grid: one 9:16 image at 4K, with the pose sheet as the style reference, "a 3 by 3 grid of 9 equal tall panels separated by thin white gutters, each an EMPTY scene, no characters, no text, keep the lower middle open".
- Split it on the white gutters (rows and columns whose min-channel mean is over 232), crop 4px in, Lanczos to 1080x1920, then unsharp at radius 2, 60%.
3. Cutouts:
- Flood the white from the border with a floating range of 7 per channel; this also removes soft glows. Add manual seeds for white pockets enclosed by fins or limbs.
- Make a 3px soft alpha band outside each shape at (250 - min channel) / 150, then un-mix the white from the edge pixels.
- Group connected components by grid cell, crop and save PNGs.
- If a pose touches the sheet edge, graft the missing part from another pose with a template match.
4. Voice: ElevenLabs eleven_v4 (one take) or Kokoro.
- Cut every pause over 0.2 s down to 0.13 s, only where loudness is under -40 dB in 10 ms windows.
- Speed it up with ffmpeg atempo (about 1.14) until it lands at 30-33 s.
- Run faster-whisper small.en with word timestamps on the FINAL file and write words.js. Every cut, pose swap, title and sound starts on a real word's start time.
5. Film: one HTML canvas where every frame is a pure function of time. Expose window .seek(t), window.READY once fonts and images have loaded, window.END, and window.EV with the event times for every sound.
- Characters: draw each cutout with position, scale, rotation and flip.
- Swim or walk by drawing it in 28 vertical slices, each offset by sin(8t - 4.5u) times 10px (14px while darting), weighted ((u - 0.3) / 0.7)^1.5 toward the tail.
- Idle bob is 10px at 2.7 rad/s plus a ±0.035 rad tilt.
- A pose swap is an instant image swap with a squash of 1 + 0.18·e^(-10t)·cos(22t).
- Entrances ease out (cubic) over 0.3-0.5 s, with 5 white speed lines, 9px wide, 34px apart.
- A hit is a 24-point yellow and white starburst (radius 105px or less, never over a face), 10 flying lines over 0.45 s, and a camera shake of 22-34px decaying at e^(-7t).
- Anything attached to a character is placed in that character's local space, so it moves with it. Draw order decides behind and inside.
- Camera: setTransform with a zoom and a focus point. Use 1.1 zoom punches on key words and 1 to 1.4 push-ins over 2 s. When the camera zooms onto a background feature, draw that background in world space so it doesn't slide.
- Backgrounds: cover-fit, drifting 1-2% zoom per second. Add 40 specks (2-6.5px, alpha 0.45, rising 14-50px/s) and a 0.35-0.55 vignette.
- Props in code: the red ring (draws on in 0.28 s), the curved arrow, a checklist card with red X stamps, counters popping 1 to N, rising hearts, a puff cloud for transformations, and simple shapes like DNA, a tumbleweed, or a vessel with flowing cells.
6. Render:
- Playwright Chromium with --allow-file-access-from-files calls seek for every frame at 60 fps, with 6 motion-blur subframes over half a frame, blended at globalAlpha 1/(i+1).
- Pipe JPEG frames into ffmpeg libx264 at CRF 16.
- Before the full render, show me a contact sheet of 12-15 frames and fix anything covered, off-frame or not moving.
7. Sound:
- Music: one bouncy cartoon track (free on Pixabay), sitting 7-10 dB under the voice in every phrase.
- SFX: one downloaded Mixkit sound per event. Whoosh on entrances, chomp or impact on hits, pop on titles, boing on landings, kiss on hearts, sad trombone on the gross fact, fail buzzer on rejections, poof on transformations, bubbles in water scenes.
- Mix to about -14 LUFS, then re-encode at CRF 21 for upload.
</build>
<gotchas>
Image models ignore "two different characters" more often than not, so plan the recolour from the start. Don't name your draw function frame, because the renderer's capture hook may use window.frame. Whisper splits compound names ("angler fish"); merge them before you match captions, and check that the caption word count equals the transcript's. A still pose for over 1 s reads as AI slop, so everything on screen bobs, wiggles or reacts every frame.
</gotchas>
<start>
Ask me for the animal, or pitch 3, then show me the script and the shot plan.
</start>
使用建议
先选一种动物或从三个冷知识选题中挑一个,再指定参考图模型和配音方案。




