孩子看绘本时,常常会盯着一幅画看很久。树叶是不是在动?小狐狸手里的罐子装着什么?那只萤火虫后来找到家了吗?
如果让画里的耳朵轻轻抖一下,让月光慢慢落进罐子,再配上一句温柔的旁白,故事就多了一种讲法。
这样的动画画报,可以用来做睡前故事、课堂里的短篇故事展示,也适合拿来试做儿童动画的分镜。它不一定要有复杂的动作。画面舒服,角色前后对得上,孩子能跟着看懂,就已经是一个不错的开始。
这次,我们用 Ace Data Cloud Studio 和 GPT Image 2.6,来做一个小故事——《小狐狸借月光》。先画出故事,再让画面动起来,最后配上声音,做成一段可以播放的视频。

¶ 故事不用长,先把它讲清楚
一个有月光的晚上,小狐狸遇见了一只迷路的小萤火虫。森林太暗,小萤火虫找不到回家的路。小狐狸抬起玻璃罐,向月亮借了一点光,陪它穿过树林,回到伙伴身边。临走前,小狐狸挥挥手,也没忘记抬头向月亮道谢。
这个故事短,但有相遇、有帮忙,也有告别。拿来做四格画报,刚好能把事情讲完整。
我们打开 Ace Data Cloud Studio,在对话里写下想做的内容。除了故事本身,也把画风、角色和道具说清楚。

可以这样描述:
请用 GPT Image 2.6 创作《小狐狸借月光》的四格故事画报,阅读顺序为左上、右上、左下、右下,分别表现相遇、借光、同行、回家。采用温柔的手绘水彩风格,保留纸张纹理。小狐狸的外形、围巾颜色和玻璃罐在四幅画里保持一致。森林以柔和的深蓝和灰绿色为主,月光与罐子里的光用暖金色表现,不要刺眼。画面不出现文字、对白框和水印。
这里有个很实用的小习惯:先把角色和画风定下来,再安排每一格发生什么。否则,单张看着都不错,放在一起却像四个不同的故事。
¶ 先做四格,看一遍故事是否顺畅
这次是演示,我们先用简单的四宫格。画面不多,比较容易检查:小狐狸是不是同一个样子,围巾有没有变色,玻璃罐有没有忽大忽小,四格连起来能不能看懂。

如果要做更长的故事,可以把“同行”拆开。比如先走过小溪,再经过树根,最后看见树洞里的点点亮光。每幅画只讲一个动作,后面做动画和配音时也更好安排。
下面是为本文新制作的四格画报。留出一点纸白,让森林里的颜色和月光透出来,不必把每个角落都画满。

下面这张是原演示使用的四格画报。本文后面的 GIF 和合成脚本沿用这组演示素材,方便直接复现;上面的新配图用于展示故事,不要把两组素材混着当成同一套动画原画。

¶ 让画面动一点,就够了
原画准备好后,我们继续让 Studio 为四个片段写动态 Prompt。
画报的动作不用太多。耳朵微动、草叶轻晃、罐子里的光慢慢起伏,这些小变化就能让画面活起来。反而是大幅跑动、频繁切换镜头,容易打乱原本安静的感觉。
下面这版提示词补全了“回家”片段,也把每幅原画与对应动画的关系写清楚了:
四段 GIF 的动态 Prompt
通用约束:沿用对应原画的人物、围巾、玻璃罐和水彩纸纹;固定镜头,只做小幅动作,不新增角色,不出现文字,首尾尽量衔接。每段只使用指定的一格原画,并扩展为单幅画面,不要把整张四宫格一起做成动画。
相遇
选取左上格并扩展为单幅画面。狐狸轻轻低头,耳朵微动;叶片上的萤火虫缓慢明灭,周围草叶轻晃。保持狐狸身体比例与背景构图稳定。
借光
选取右上格并扩展为单幅画面。狐狸保持举罐姿势,细柔月光缓缓流入玻璃罐,罐内金光轻柔起伏。玻璃罐的形状保持不变,光线柔和,不出现强烈闪烁。
同行
选取左下格并扩展为单幅画面。狐狸小步行走,围巾与尾巴轻摆,提罐略微晃动;萤火虫在罐旁漂浮,背景保持稳定。动作幅度小,尽量形成自然循环。
回家
选取右下格并扩展为单幅画面。狐狸缓缓挥手,树洞旁已有的萤火虫小范围盘旋,地面的月光轻柔起伏,草叶微微摇动。保持树洞、玻璃罐和狐狸的位置基本稳定,结尾自然回到接近开头的姿态。
接下来,在 Studio 中明确提出:使用 GPT Image 2.6 的 GIF 动画功能,分别生成这四个片段,并返回各自的 GIF 文件。
这里做的是短小的循环动画,不是直接生成一段完整的长视频。等任务完成后,我们拿到四张会动的图片,再把它们与旁白一起拼成视频。
下面是原演示生成的四段 GIF。
相遇

借光

同行

回家

如果某一段的围巾、罐子或角色外形变了,先改这一段,不用把整套素材推倒重来。等画面确认好了,再往下做配音。
¶ 配音像讲睡前故事,不用念得太满
画面动起来之后,我们继续在 Studio 中输入配音需求。把四段旁白分开生成,后面更容易和各自的画面对应。

可以这样说:
请为《小狐狸借月光》生成四段独立的中文旁白,分别返回音频链接。使用温柔、自然的女声,像给孩子讲睡前故事,不要播音腔,也不要刻意卖萌。四段保持同一音色,语速舒缓,句尾留一点停顿。先生成纯旁白,不加背景音乐。
相遇:月光下,小狐狸遇见了一只迷路的小萤火虫。
借光:小狐狸向月亮借来了一盏温柔的光。
同行:他提着月光,陪小萤火虫一起穿过了森林。
回家:萤火虫回到了伙伴身边,小狐狸也向月亮道谢。
四句话就能讲完,不必再加一大段说明。让画面也说一点话,听起来会更舒服。
配音生成后,最好逐段听一遍。有没有读错字,停顿自然不自然,每段能不能在预留时间里讲完,都在这里确认。下面的演示脚本使用已有的四段音频链接;如果重新生成了配音,记得换成自己的链接。
¶ 最后,在本地把画报合成视频
素材齐了,我们让 Studio 整理一段 FFmpeg 合成脚本,再拿到本地电脑运行。
这段脚本会做一个横向的双页画报:左侧是章节标题和故事文字,右侧播放 GIF。四页按故事顺序接起来,配上各自的旁白。
运行前,需要安装 FFmpeg,并把 FONT 改成电脑上实际存在的中文字体路径。FFmpeg 还需要支持脚本用到的 drawtext 滤镜、H.264 编码和 AAC 编码。脚本适合在 Linux、macOS 或 Windows 的 WSL 环境里使用 Bash 运行,不要直接粘贴到 PowerShell。
下面保留了演示素材链接,并把输出文件名和书页标题统一为《小狐狸借月光》。这是一份供本地运行的脚本,本文没有代替读者在本地执行。
bash <<'BASH'
set -euo pipefail
# ===== 只需修改这里 =====
GIF1="https://cdn.acedata2.cloud/gpt-image/d8d0bdffeb50f57fa700e3b0e973541e62361c1bce243f795c66b12c27a79ada.gif"
GIF2="https://cdn.acedata2.cloud/gpt-image/2361e32502087a5d14a1030ec26c94bade43ad7abddff7f51294ae70cffabd03.gif"
GIF3="https://cdn.acedata2.cloud/gpt-image/c9091c98a64df06baecc7be2e5bb4b7521deff9caa3a0f67bca46c5409b92133.gif"
GIF4="https://cdn.acedata2.cloud/gpt-image/e6f322e1dea87af933a00e6053166cd5ce2f9a7ab59358c37f7b79d3b0126885.gif"
# 中文字体路径,请根据实际情况修改:
# Linux 示例:/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc
# macOS 示例:/System/Library/Fonts/PingFang.ttc
FONT="/usr/share/fonts/opentype/noto/NotoSerifCJK-Regular.ttc"
OUTPUT="小狐狸借月光.mp4"
# ===== 四段已有配音 =====
AUDIO1="https://platform2.cdn.acedata.cloud/fish/bb9140fc-c0c5-4397-995c-5a4eba813ef6.mp3"
AUDIO2="https://platform2.cdn.acedata.cloud/fish/ffe157ea-7fc4-422c-b153-e3bdb7db59ad.mp3"
AUDIO3="https://platform2.cdn.acedata.cloud/fish/2eb05b03-e833-48b9-9373-38b4c6a6456c.mp3"
AUDIO4="https://platform2.cdn.acedata.cloud/fish/429392ee-4012-4775-b1d9-fec7b88ddf1f.mp3"
command -v ffmpeg >/dev/null || {
echo "请先安装 FFmpeg"
exit 1
}
[[ -f "$FONT" ]] || {
echo "找不到中文字体,请修改 FONT:$FONT"
exit 1
}
gifs=("$GIF1" "$GIF2" "$GIF3" "$GIF4")
audios=("$AUDIO1" "$AUDIO2" "$AUDIO3" "$AUDIO4")
titles=("相遇" "借光" "同行" "回家")
lines1=(
"月光下,小狐狸遇见了"
"小狐狸向月亮借来了"
"他提着月光,陪小萤火虫"
"萤火虫回到了伙伴身边"
)
lines2=(
"一只迷路的小萤火虫。"
"一盏温柔的光。"
"一起穿过了森林。"
"小狐狸也向月亮道谢。"
)
# 每章固定时长;旁白结束后的剩余部分保持安静。
# 总时长:19 秒。超出章节时长的旁白会被截断。
durations=("5" "4.5" "4.5" "5")
inputs=()
filters=""
for i in 0 1 2 3; do
vi=$((i * 2))
ai=$((vi + 1))
page=$((i + 1))
d="${durations[$i]}"
# 禁用 GIF 内部循环标记,统一由 stream_loop 无限循环。
inputs+=(
-stream_loop -1 -ignore_loop 1 -i "${gifs[$i]}"
-i "${audios[$i]}"
)
# 书本底图:暖色桌面、双页纸张、书脊与左侧文字。
filters+="
color=c=0xD6C7B3:s=1920x1080:r=30:d=${d},
drawbox=x=72:y=64:w=1788:h=972:color=0xB6A38C:t=fill,
drawbox=x=60:y=50:w=900:h=970:color=0xFFF9EE:t=fill,
drawbox=x=960:y=50:w=900:h=970:color=0xFFF9EE:t=fill,
drawbox=x=940:y=50:w=20:h=970:color=0xE2D6C3:t=fill,
drawbox=x=960:y=50:w=12:h=970:color=0xEFE5D5:t=fill,
drawbox=x=150:y=320:w=110:h=4:color=0xB28A60:t=fill,
drawtext=fontfile='${FONT}':text='小狐狸借月光':x=150:y=155:fontsize=28:fontcolor=0x927A60,
drawtext=fontfile='${FONT}':text='${titles[$i]}':x=150:y=235:fontsize=64:fontcolor=0x493A2C,
drawtext=fontfile='${FONT}':text='${lines1[$i]}':x=150:y=400:fontsize=36:fontcolor=0x685846,
drawtext=fontfile='${FONT}':text='${lines2[$i]}':x=150:y=465:fontsize=36:fontcolor=0x685846,
drawtext=fontfile='${FONT}':text='${page} / 4':x=150:y=910:fontsize=24:fontcolor=0xA28D76
[book${i}];
[${vi}:v]
setpts=PTS-STARTPTS,
fps=30,
scale=780:800:force_original_aspect_ratio=decrease:force_divisible_by=2,
setsar=1,
format=rgba
[gif${i}];
[book${i}][gif${i}]
overlay=x='1020+(780-overlay_w)/2':y='130+(800-overlay_h)/2':shortest=1,
trim=duration=${d},
setpts=PTS-STARTPTS,
format=yuv420p
[v${i}];
[${ai}:a]
asetpts=PTS-STARTPTS,
aresample=48000,
aformat=sample_fmts=fltp:channel_layouts=stereo,
apad,
atrim=duration=${d},
asetpts=PTS-STARTPTS
[a${i}];
"
done
filters+="
[v0][a0][v1][a1][v2][a2][v3][a3]
concat=n=4:v=1:a=1[vout][aout]
"
# 一次执行:合成全部书页、动画和配音。
ffmpeg -hide_banner -y \
"${inputs[@]}" \
-filter_complex "$filters" \
-map "[vout]" \
-map "[aout]" \
-c:v libx264 \
-preset medium \
-crf 18 \
-pix_fmt yuv420p \
-c:a aac \
-b:a 192k \
-ar 48000 \
-movflags +faststart \
"$OUTPUT"
printf '\n已生成:%s\n' "$OUTPUT"
BASH
这份脚本把四页时长设为 5 秒、4.5 秒、4.5 秒和 5 秒,总共 19 秒。GIF 会循环到这一页结束,旁白较短时,后面的空余部分保持安静。
要特别留意:如果旁白比这一页更长,脚本会把超出的部分截掉。重新生成配音时,先听完再决定是否加长 durations,别为了凑 19 秒,让故事说到一半就翻页。
运行时需要联网读取素材。如果遇到链接无法访问,可以先把 GIF 和 MP3 下载到本地,再将相应变量改为文件路径。脚本中的 -y 会覆盖同名输出文件,已有成片的话,先换一个文件名。
按演示提供的记录,这个小样的素材生成积分约为 1 分左右。这个数值只作本次演示参考,不是固定套餐,也不代表任意 19 秒视频都只需 1 分。模型版本、画面尺寸、质量、配音长度和重试次数都会影响实际消耗,以 Studio 显示的扣费为准。最后这一步是在本地使用 FFmpeg 合成,不是再次调用云端视频生成服务。
¶ 把整个流程放在一张图里
回头看,事情并不复杂:先想好故事,画出四格,让每一格动一点,再配上旁白,最后在本地合成。
Studio 负责帮我们准备故事、原画、GIF 和配音素材;FFmpeg 负责把素材排成书页、接好声音,输出 MP4。把这两部分分开,哪一页不满意,就改哪一页。

¶ 一点月光,就能讲完一个故事
《小狐狸借月光》没有很多角色,也没有热闹的大场面。它只是让一只小狐狸,陪一只迷路的萤火虫走了一段路。
做这样的故事画报,值得花时间的地方,往往也是这些小细节:四幅画里的狐狸是不是同一个样子,罐子里的光是不是足够柔和,旁白能不能让人安心地听下去。
如果你也想试试,可以先从一个四格小故事开始。在 Ace Data Cloud Studio 里把画风和角色说清楚,检查好原画,再慢慢加上动作和声音。先把短故事做好,比一开始就铺开很长的篇幅,更容易找到自己喜欢的感觉。
等画面和声音都合适了,再多翻几页。一本会动的小画报,就这样慢慢做出来了。

