用 AI + 代码做一条电影混剪榜单视频:完整案例拆解

案例主题:国产动画电影票房 TOP10 混剪
视频方向:高燃、史诗、榜单感、适合社媒平台发布
最终形态:3D 票房神殿开场 + 真实电影预告片段 + 360° 时空环绕转场 + 统一榜单包装 + 声音母带处理


01. 这个视频到底是什么

这条视频不是传统意义上“打开剪辑软件,手动拖素材”的项目。

它更像是一个程序化视频工程

素材下载
→ 素材整理
→ 高光片段裁剪
→ 榜单信息包装
→ 3D 开场制作
→ 360° 转场制作
→ 音频处理
→ 自动拼接成片
→ 抽帧检查
→ 输出社媒平台版本

最终视频结构:

3D 票房神殿开场
→ TOP10 电影片段
→ 360° 时空环绕转场
→ TOP9 电影片段
→ 360° 时空环绕转场
→ ...
→ TOP1 电影片段

这个案例的重点不是“剪了 10 段视频”,而是用 AI 和代码把一条视频做成了一个可复用的榜单视频生产流水线


02. 素材是怎么来的

电影画面素材主要来自 YouTube 上公开的官方预告片、官方宣传片、Trailer。

下载工具用的是:

yt-dlp

典型下载方式:

yt-dlp -f "bv*+ba/b" \
  -o "assets/video_full/%(title)s.%(ext)s" \
  "https://www.youtube.com/watch?v=视频ID"

这里的逻辑是:

  1. 先下载完整预告片,而不是直接剪短片段。
  2. 完整素材方便后面反复挑选高光。
  3. 后续所有剪辑都从本地素材出发,避免每次重新联网找资源。

素材来源表

排名电影来源类型YouTube ID
TOP1哪吒之魔童闹海Official TrailerEBLY_sez_LI
TOP2哪吒之魔童降世Official IMAX Trailer0S7_LgTiHnA
TOP3熊出没·逆转时空预告片fbPVOWxFVdA
TOP4长安三万里Official TrailerBXcNs9G4Klo
TOP5浪浪山小妖怪International Trailer59WTgd35QyQ
TOP6姜子牙Official TrailerM0nkBKV6zvQ
TOP7熊出没·伴我熊芯官方宣传片2Q8dy2I0aaE
TOP8熊出没·重返地球正式预告_ky6Je194x4
TOP9西游记之大圣归来Official Trailerv33o9deALkA
TOP10深海终极预告LuEQReOXuT0

下载后的完整素材目录

assets/video_full/
├── 01_...哪吒之魔童闹海...
├── 02_...Ne Zha 2019...
├── 03_...熊出没-逆转时空...
├── 04_...Chang An...
├── 05_...NOBODY...
├── 06_...JIANG ZI YA...
├── 07_...熊出没·伴我熊芯...
├── 08_...熊出没之重返地球...
├── 09_...Monkey King Hero is Back...
└── 10_...Deep Sea...

注意:如果正式商用发布,最好使用授权素材,或者使用平台允许二创的官方预告片素材。这个案例更偏“技术验证 + 内容样片”。


03. 素材下载后怎么整理

完整预告片下载后,没有直接拿来做最终视频,而是经过多层整理。

项目里大概分了这些目录:

assets/video_full/   下载下来的完整预告片
assets/video/        标准化后的预告片素材
assets/video_edit/   早期剪辑版素材
assets/clips_edit/   第一版短片段
assets/clips_long/   最终版使用的高光长片段

最终 v16 使用的是:

assets/clips_long/top10_deepsea.mp4
assets/clips_long/top09_monkey_king.mp4
assets/clips_long/top08_boonie_earth.mp4
assets/clips_long/top07_boonie_guardian.mp4
assets/clips_long/top06_jiangziya.mp4
assets/clips_long/top05_nobody.mp4
assets/clips_long/top04_changan.mp4
assets/clips_long/top03_boonie_time.mp4
assets/clips_long/top02_nezha1.mp4
assets/clips_long/top01_nezha2.mp4

每段最终片段长度

排名电影最终片段长度
TOP10深海9 秒
TOP9西游记之大圣归来9 秒
TOP8熊出没·重返地球9 秒
TOP7熊出没·伴我熊芯9 秒
TOP6姜子牙9 秒
TOP5浪浪山小妖怪9 秒
TOP4长安三万里9 秒
TOP3熊出没·逆转时空16 秒
TOP2哪吒之魔童降世18 秒
TOP1哪吒之魔童闹海24 秒

这个时长设计有一个节奏逻辑:

前半段:快节奏扫榜
中段:逐渐加重
TOP3 之后:明显压轴
TOP1:给最长展示时间

04. 榜单信息包装怎么做

电影画面不是裸放,而是叠加了一套统一的榜单包装。

包装素材在:

renders/overlays_v4/
├── top10.png
├── top9.png
├── top8.png
├── top7.png
├── top6.png
├── top5.png
├── top4.png
├── top3.png
├── top2.png
└── top1.png

每张 PNG 都是透明背景,里面包含:

  • TOP 排名
  • 电影中文名
  • 票房数字
  • 底部半透明黑色信息条
  • 金色 / 象牙白字体

这层包装解决了什么问题

技术手段作用
透明 PNG 覆盖层保证每段电影信息统一
半透明底条复杂电影画面上仍然能看清文字
金色数字和标题强化“票房”“神殿”“史诗”的视觉主题
左右信息布局左边看排名和片名,右边看票房
TOP3 以后字号加大强化压轴感

最终合成时,用 FFmpeg 把 PNG 叠到视频上:

ffmpeg -i 原电影片段.mp4 \
  -loop 1 -i 榜单覆盖层.png \
  -filter_complex "[0:v][1:v]overlay=0:0" \
  输出片段.mp4

05. 开场:3D 票房神殿

开场不是普通模板,而是单独做了一个 Three.js 3D 场景。

核心文件:

opening-three-temple/src/three-opening.js

输出文件:

renders/opening-three-temple-v2-into-deepsea.mp4

开场概念

票房神殿开门
→ 金光冲出
→ 多个国产动画电影屏幕悬浮
→ 镜头快速推进
→ 冲入第一部电影《深海》

用到的技术

技术实现功能
Three.js搭建真正的 3D 空间
WebGLRenderer渲染 3D 画面
PerspectiveCamera制造电影透视和镜头推进
FogExp2给神殿空间加雾,增加纵深
SpotLight顶部主光,制造神圣感
PointLight红色和金色边缘光
MeshStandardMaterial铜、金属、红色材质质感
BoxGeometry墙体、台阶、大门
CylinderGeometry神殿柱子
VideoTexture把真实电影片段贴到 3D 银幕上
CanvasTexture把中文标题和数字变成 3D 贴图
GSAP Timeline控制开门、光束、镜头推进

开场为什么有效

普通榜单视频很容易像“素材堆叠”。
这个开场的作用是先建立世界观:

观众不是在看一个榜单,而是在进入一个“国产动画票房神殿”。

这会让视频从一开始就有案例感、仪式感和高级感。


06. 转场:360° 时空环绕影片

最终版最重要的升级,是每两部电影之间的 360° 时空环绕转场。

核心文件:

spacetime-orbit-transition-reel/index.html

输出文件:

renders/spacetime-orbit-transition-reel-v1.mp4

转场概念

每一部电影都被做成一个“影片传送门”,10 部电影围成一个 360° 圆环。

切换时的视觉逻辑:

当前电影结束
→ 当前画面缩回空间
→ 镜头进入时空环形电影宇宙
→ 多个电影银幕从身边掠过
→ 锁定下一部电影
→ 白闪冲进下一段

关键实现

核心变量:

const radius = 1020;
const step = 360 / movies.length;

每个电影屏幕的空间位置:

rotateY(angle) translateZ(radius)

也就是说,10 个电影不是平面排列,而是围绕观众形成一个环形空间。

每次切换时:

const fromAngle = -(i * step);
const toAngle = -((i + 1) * step) - 360;

这会让镜头不是简单滑到下一张,而是绕一圈,再冲进下一张。

转场里的视觉层

元素功能
.starfield星点背景,制造宇宙空间
.warp径向时空扭曲光纹
.scene3d3D 舞台容器
.orbit影片环形轨道
.portal每部电影的传送门屏幕
.from-shadow当前画面退场时的残影
.rank-chip转场中提示下一部 TOP 排名和片名
.flash冲进下一部电影前的白闪

为什么不用上一版画廊转场

上一版出现了一个问题:

第一部电影结束
→ 第二部电影已经先播了一两秒
→ 画廊转场才出现

原因是上一版从旧成片里裁片段,而旧成片的交界处已经混进了下一部画面。

最终 v16 的解决方式是:

不用旧成片裁切
直接从原始电影片段重新合成
转场单独作为独立片段插在两部电影中间

所以最终时间线变成:

电影 A
→ 转场
→ 电影 B

而不是:

电影 A
→ 电影 B 开始
→ 转场
→ 电影 B 继续

这个结构性调整,比单纯调时间点更可靠。


07. 声音是怎么处理的

声音分为三层。

第一层:电影原声

每个电影片段保留自己的原始声音。

这样做的好处:

  • 真实感强
  • 不像纯素材拼贴
  • 每部电影都有自己的情绪
  • 观众更容易相信这是“真实高光片段”

第二层:开场人声

开场用了 AI 配音。

测试过的音色文件在:

assets/audio/voice_tests/

包括:

host_announcer_happy.mp3
host_radio_bright.mp3
host_radio_warm.mp3
reliable_executive.mp3
reliable_exec_new_intense.mp3
...

最后选择的是更接近“主持人、有情绪、但不短剧”的方向。

开场文案是:

请欣赏十部国产动画天花板

第三层:转场音效

转场音效不是随便找的音效包,而是程序生成的。

使用的元素:

声音元素作用
pink noise空气撕裂、穿梭感
highpass去掉低频浑浊
lowpass控制高频刺耳
sine 低频增加冲击和压迫感
fade in/out避免声音硬切
amix混合 whoosh 和低频

逻辑类似:

anoisesrc=color=pink
 highpass
 lowpass
 fade in/out
 叠加低频 sine
 输出转场音效

最终音频母带

最后整条视频又做了一次响度统一。

用到:

处理作用
acompressor压缩动态,减少忽大忽小
loudnorm统一整体响度
alimiter防止爆音

这一步解决的是社媒平台很常见的问题:

开场声音大
电影片段声音小
转场突然炸
下一部又听不清

08. 最终合成逻辑

最终版不是在剪映里手动拖出来的,而是通过程序化时间线拼接。

最终拼接顺序:

opening.mp4
seg01.mp4
trans01.mp4
seg02.mp4
trans02.mp4
seg03.mp4
trans03.mp4
seg04.mp4
trans04.mp4
seg05.mp4
trans05.mp4
seg06.mp4
trans06.mp4
seg07.mp4
trans07.mp4
seg08.mp4
trans08.mp4
seg09.mp4
trans09.mp4
seg10.mp4

对应体验:

开场
→ TOP10
→ 转场
→ TOP9
→ 转场
→ ...
→ TOP1

最终输出:

renders/china-animation-top10-montage-v16-spacetime-orbit-final.mp4

视频规格:

参数
分辨率1920 × 1080
画幅16:9
时长约 142.6 秒
视频编码H.264
音频编码AAC
音频采样率48kHz
文件大小约 62MB

为了适合平台播放,最终还加了:

-movflags +faststart

它的作用是让 MP4 更适合在线播放和社媒平台上传。


09. 验证动作

这类程序化视频最容易出问题的地方有三个:

  1. 画面是否错位。
  2. 声音是否忽大忽小。
  3. 转场是否插在正确位置。

所以最后做了几类检查。

检查视频参数

ffprobe 检查:

ffprobe -v error \
  -show_entries format=duration \
  -show_streams \
  -of json \
  renders/china-animation-top10-montage-v16-spacetime-orbit-final.mp4

确认:

  • 16:9
  • 1920 × 1080
  • 30fps 左右
  • AAC 音频
  • 48kHz 采样率

抽帧检查转场

比如第一处交界:

17.3s:仍然是 TOP10
18.2s:进入时空转场
19.4s:才开始 TOP9

这说明:

TOP9 没有提前出现
转场正好卡在两部电影中间

这一步非常重要。因为视频看起来“怪”,很多时候不是动效不够,而是时间线结构有错。


10. 这套方法为什么有价值

这个案例可以总结成一句话:

用代码把“电影混剪榜单”从一次性剪辑,升级成可复用的视频生成系统。

它的优势:

优势说明
可复用换一批电影、游戏、人物,也能用同一套结构
可批量10 个榜单段可以程序化生成
可控转场时间、字幕位置、音量都能精确控制
可迭代开场、转场、声音可以单独升级
稳定不依赖手动拖时间线,不容易误差
适合社媒输出就是标准 MP4,方便上传

11. 如果继续升级,可以怎么做

升级 1:素材质量

现在素材主要来自公开预告片。
如果想更燃,可以进一步:

  • 找更高码率的官方预告片
  • 找 B 站官方账号素材
  • 找更强动作场面的片段
  • 按“镜头强度”重新筛选高光

升级 2:转场做成真正 Three.js

现在 360° 转场是 CSS 3D + GSAP。
下一步可以做成真正 Three.js:

  • 真实 3D 相机
  • 屏幕反射
  • 粒子流
  • 空间光轨
  • 景深
  • 运动模糊
  • 镜头畸变

这样会更接近电影级转场。

升级 3:加入节奏识别

可以分析音乐 beat,让转场卡点:

鼓点
→ 白闪
→ 进入下一部电影

这会让视频更“高燃”。

升级 4:做成模板系统

把榜单数据变成一个 JSON:

[
  {
    "rank": "TOP10",
    "title": "深海",
    "gross": "9.19亿",
    "clip": "top10_deepsea.mp4"
  }
]

以后只需要改 JSON,就能自动生成新视频。


12. 可复用工作流模板

以后做类似视频,可以直接套这个流程:

1. 明确榜单主题
   例:国产动画票房 TOP10
 
2. 收集榜单数据
   排名、片名、票房、年份、主视觉
 
3. 搜索公开视频素材
   YouTube / B站 / 官方预告 / 宣传片
 
4. 用 yt-dlp 下载完整素材
   保存到 assets/video_full/
 
5. 裁剪高光段
   保存到 assets/clips_long/
 
6. 生成榜单包装层
   TOP 排名、片名、票房、统一视觉
 
7. 制作开场
   先建立世界观和主题
 
8. 制作转场
   让每段之间不是硬切,而是有叙事连接
 
9. 合成整条视频
   opening → seg → trans → seg → trans
 
10. 统一音量
    压缩、响度标准化、防爆音
 
11. 抽帧检查
    检查交界处是否错位
 
12. 输出平台版
    H.264 / AAC / 1080p / 16:9

13. 这条视频的底层思路

这条视频真正值得学习的地方,不是某一个动效。

而是它把一个普通需求:

做一个国产动画电影票房榜 TOP10 混剪

拆成了几个工程模块:

素材模块
榜单数据模块
视觉包装模块
3D 开场模块
转场模块
音频模块
合成模块
验证模块

每个模块都可以单独改、单独升级、单独复用。

这就是 AI 代码视频最有价值的地方:

不是只让 AI 帮你剪一条视频,而是让 AI 帮你搭出一条可以反复生产视频的流水线。