【AI学习记录】用 AI 制作高中同学会回顾视频 —— 从零到《二十年》的全过程记录
制作全程纪实 · 2026年3月
用 AI 制作一部
二十年同学会回顾电影
从一个模糊的想法,到 304 秒的完整电影——记录与 AI 协作完成视频制作的全过程
第一章
一个二十年后的约定
2024年底,一群阔别二十年的高中同学重聚在曾经读书的校园。岁月改变了每个人的容颜,但笑声依然熟悉。在那次聚会结束后,有人提议:把这次相聚做成一部视频留念。
素材是现成的——251 张照片、50 个视频文件,零散地存放在一个文件夹里。但没有专业的剪辑团队,没有 Premiere 或 Final Cut 的使用经验。于是,他们选择了另一条路:与 AI 协作完成这部影片。
这篇文章,记录的正是这个从无到有的完整过程——从第一句需求描述,到最终 124.9 MB 的 .mp4 文件落盘,期间经历的每一次对话、每一次报错、每一次迭代。
第二章
需求从模糊到具体的对话过程
整个项目的起点,是一段非常口语化的需求描述。用户并没有给出精确的技术规格,而是像向朋友描述想法一样,把期望逐步说清楚。
"制作高中同学20年集会的回顾视频……格式为16:9的电影版本……视频时长在9分钟……当在教室中的场景的时候,每一个人物都需要出现在视频中,如果人物没有视频,则使用图片。"
——用户的原始需求描述(节选)
从这段描述中,AI 需要理解并拆解出以下关键信息:
格式规格
16:9 横版,分辨率 1920×1080,30fps,总时长约 9 分钟(实际按素材密度调整为 5 分钟)
场景结构
10 个明确场景:片头→清晨→见面→午间→下午→个人寄语→晚宴→大合照→欢声笑语→告别→片尾
人物覆盖
19 位同学全部出现,其中 16 人有个人视频,3 人(宋东岳、马理平、李仁应)仅有照片,需用 Ken Burns 动效替代
电影质感
胶片感片头、Ken Burns 缓慢推移、暖色调、底部节奏条、文字入场动效等视觉细节
BGM 要求
背景音乐贯穿全片,末尾淡出,确保情绪连贯
值得注意的是,用户最初描述的时长是"9分钟",但在实际制作中,受制于可用素材的数量和密度,最终成片定格在 5分03秒。这是一个典型的"需求与现实碰撞后的务实妥协"——不强行拉伸素材,而是在有限素材内做到最精炼。
第三章
扫描 301 个文件,摸清家底
在动手制作之前,第一步是全量扫描素材目录,建立完整的素材清单。AI 编写了一个 Python 脚本 scan_assets.py,对素材目录进行分类统计。
扫描结果令人满意:
| 类别 | 数量 | 备注 |
|---|---|---|
| 照片(JPG) | 251 张 | 包含 mmexport 抓屏截图、合照、个人照 |
| 视频(MP4/MOV) | 50 个 | 含 mmexport 视频、个人寄语视频 |
| 个人视频匹配 | 16/19 人 | 冉金雨、刘鑫、卢布等 16 人找到对应视频 |
| 仅有照片人员 | 3 人 | 宋东岳、马理平、李仁应,使用 Ken Burns 动效 |
19 位同学全部找到了对应素材,这为后续"个人寄语"场景的全员覆盖奠定了基础。
金色标签:有个人视频 | 蓝色标签:仅照片,使用 Ken Burns 动效
第四章
11 个场景的分镜设计
在素材清单确认后,AI 与用户共同确定了影片的分镜结构。整部影片被拆解为 11 个场景,每个场景都有明确的情绪定位和视觉风格:
片头
"二十年"大字胶片感入场,金色文字,复古颗粒特效,黑底渐入
清晨见面
早晨照片轮播,暖阳色调,叠化转场,温柔开场
见面瞬间
合照 Ken Burns 缓慢推进,"好久不见"文字渐入,情绪积累
午间相聚
mmexport 午间照片快切,暖橙渐变滤镜,活泼节奏
下午时光
大图蒙太奇,8帧溶解过渡,悠闲午后感
个人寄语
全部 19 人出场,16 段视频 + 3 张 Ken Burns 照片,每人附名字卡片,是全片情绪高峰
晚宴时刻
"把酒言欢"文字渐入,夜间暖光氛围,晚宴照片流
大合照
合照 Ken Burns 缓慢放大,"我们仍是少年"文字叠加
欢声笑语
27 段 mmexport 视频混剪,快节奏拼接,底部节奏条动效
告别时刻
傍晚照片淡出序列,"珍重,下次见"文字,情绪收束
片尾
"致青春"逐字显现,暖色光点收尾,BGM 末尾淡出
场景设计遵循了经典纪录片的情绪弧线:暖场开场 → 相遇高峰 → 情感深化(个人寄语) → 欢乐释放 → 温情收尾,既有叙事逻辑,也照顾到了不同情绪段落的节奏对比。
第五章
最难的不是写代码,是找到那个 Bug
在整个制作过程中,遇到了一个反复出现、几乎让项目搁浅的问题:生成的视频片段文件大小为 0KB。
问题现象
ffmpeg 命令执行后返回码为 1(失败),生成的 .mp4 文件存在但大小为 0 字节。错误信息指向:width not divisible by 2
根本原因
使用 scale=1920:1080:force_original_aspect_ratio=decrease 时,若原图宽高比特殊,计算出的输出尺寸可能为奇数(如 1919×1078),而 libx264 编码器要求宽高必须是 2 的倍数。
修复方案
在 scale 之后追加 pad=1920:1080:(ow-iw)/2:(oh-ih)/2,先将图像缩放到不超过目标尺寸,再用黑边填充至标准 1920×1080,完全规避奇数尺寸问题。
在正式运行大批量制作前,编写了独立的 test_scale.py 脚本对这个修复方案进行验证,确认生成的测试文件大小正常后,才将该参数写入主脚本。
除此之外,还遇到了另一个 Windows 特有的问题:
Windows GBK 编码问题
Python 脚本中的中文输出(如 ✓ ✗)在 Windows 默认的 GBK 终端下出现乱码,甚至导致脚本崩溃。
解决方案
将所有中文符号替换为 ASCII 等价表示(如 [Y]/[N]),并使用 python -X utf8 强制 UTF-8 模式运行脚本,彻底规避编码问题。
第六章
主脚本 reunion_v2.py 的核心技术
在问题排查完成后,正式编写了制作主脚本 reunion_v2.py。整个脚本约 600 行,涵盖了所有场景的生成逻辑。以下是几个关键技术点:
技术点 1:Ken Burns 动效实现
Ken Burns 效果(图片缓慢推移/缩放)通过 ffmpeg 的 zoompan 滤镜实现。将静态照片转化为有生命感的运动镜头:
技术点 2:名字卡片叠加
在个人寄语场景中,每位同学的视频下方都叠加了带名字的半透明卡片。通过 drawbox + drawtext 滤镜组合实现,无需外部字体文件:
技术点 3:全局 concat 合并
所有场景生成后,使用 ffmpeg concat demuxer 将 11 个片段无缝拼接,最后混入 BGM 并做末尾淡出处理:
整个制作流程高度自动化:脚本启动后,依次处理每个场景,全程无需人工干预,约 9 分钟后自动输出最终文件。
需求分析与脚本规划
解析用户需求,确定分镜结构、人员清单、素材分配策略,约 5 分钟
素材扫描与人名匹配
运行 scan_assets.py,完成 251 张照片 + 50 个视频的分类,约 2 分钟
Bug 排查与修复验证
发现并修复 scale 奇数尺寸问题,用 test_scale.py 验证,约 10 分钟
主脚本编写
编写 reunion_v2.py,覆盖全部 11 个场景,约 15 分钟
渲染输出
执行主脚本,ffmpeg 逐场景渲染,全程约 9 分钟,自动完成
第七章
304 秒,124.9 MB,一部真实的电影
脚本运行完毕后,最终文件落盘:
| 场景 | 内容摘要 | 时长 | 技术亮点 |
|---|---|---|---|
| 0 片头 | "二十年"金字胶片感入场 | 12s | 孔洞边框 + 金色渐变文字 |
| 1 清晨见面 | 9张清晨照片轮播 | 18s | 叠化转场,暖色滤镜 |
| 2 见面瞬间 | 合照 Ken Burns + "好久不见" | 23s | zoompan 缓推 |
| 3 午间相聚 | 午间照片快切 | 20s | 暖橙渐变叠加 |
| 4 下午时光 | 下午大图蒙太奇 | 18s | 8帧溶解过渡 |
| 5 个人寄语 ⭐ | 全部19人出场 | 78s | 16段视频 + 3张Ken Burns照片 + 名字卡片 |
| 6 晚宴时刻 | "把酒言欢" + 晚宴照片 | 24s | 暖光呼吸效果 |
| 7 大合照 | 合照 Ken Burns + "我们仍是少年" | 17s | 缓慢平移推进 |
| 8 欢声笑语 | 27段视频快节奏混剪 | 60s | 底部节奏条动效 |
| 9 告别时刻 | 傍晚照片淡出 + "珍重,下次见" | 22s | 情绪渐弱淡出 |
| 10 片尾 | "致青春"逐字显现 | 12s | BGM 末尾 6s 淡出 |
个人寄语场景是整部影片的情感核心,时长 78 秒,占全片时长的 26%。19 位同学全部出场,没有一个人缺席——这也是用户最在意的一点。
第八章
复盘:这次合作我们学到了什么
回顾整个制作过程,有几点值得记录:
先扫描,再设计
不要在不了解素材情况下就开始写制作脚本。先运行扫描脚本,摸清家底,才能做出真正可执行的分镜设计。
单元测试是必须的
在批量生成前,用 test_scale.py 验证单个片段的生成逻辑,可以提前发现并修复问题,避免 50 个任务全部失败的灾难性后果。
Windows 的编码陷阱
在中文 Windows 系统上做视频处理时,文件名、路径、终端输出都可能遇到 GBK/UTF-8 编码冲突,需要全程使用 python -X utf8 和 errors='replace' 进行防护。
务实胜于完美
用户期望 9 分钟,但素材质量和数量决定了 5 分钟是更合理的选择。不强行拉伸素材,而是在有限素材内做到精炼,是专业态度。
ffmpeg 的表达力
整个项目没有使用任何商业视频软件,仅靠 ffmpeg 的 filter_complex 体系,实现了 Ken Burns、字幕叠加、淡入淡出、音频混合等全部效果。工具本身的能力远比我们以为的强大。
关于"AI 辅助视频制作"的一些思考
这次制作过程展示了一种新的工作模式:用户负责提供素材、描述需求和作出审美判断,AI 负责将模糊的需求转化为可执行的技术方案,并处理所有底层的编码细节。
这不是"AI 替代了创作者",而是"AI 消除了技术门槛"——让没有专业视频制作背景的普通人,也能制作出具有电影质感的纪念视频。
二十年后的重聚,值得一部认真做的影片。
致那些仍是少年的人们
251 张照片、50 个视频、19 位同学、11 个场景、9 分钟制作——最终凝缩成 5 分 04 秒的影像记忆。
技术只是手段,留住的,是二十年后那些真实的笑脸。
— 完 —
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

浙公网安备 33010602011771号