特效制作杂记
写在前面的话:
本人有幸结识师傅@yusuble,并与师傅学习特效字幕的制作,作为一名入门的小白,斗胆将自己学习、摸索过程中遇到的一些小问题写出来与各位特效字幕制作的大佬们,或同与我入门、感兴趣的朋友们分享,如有错误或更方便的解决方式,欢迎大家相互讨论探讨,由于本人时间有限,本杂记也会逐步完善、配图,在此献丑了!
—— @Giraffe47 2026年3月22日 凌晨
一、Aegisub Trim设置
在Aegisub Trim的使用中,一般仅需设置输出目录、编码方式(ffmpeg/x264,通常使用ffmpeg导出序列图)以及编码器的路径,而最后一项输入指令通常不填写,使用默认即可。
以一个名为test.mp4的视频,导出第1-20帧的序列:
在Trim的默认设置中,其生成文件的格式为:test[1-20]-00001.jpg至test[1-20]-00020.jpg,此时将该序列导入AE,则会生成一个名为test[1-20]-[00001-00020].jpg的资源组,用该资源组建立合成时,AE会默认将合成名设定为test[1-20]-,该名称的默认生成方式目前无法修改,只能在生成合成后,手动进行重命名,且在生成渲染任务时,默认保存路径也会新建一个名为test[1-20]-的文件夹。
为规范整体命名结构,减少后期手动重命名,需要导出序列时,文件名为:test[1-20]00001.jpg至test[1-20]00020.jpg(去除了中间的"-"),此时导入AE后,生成的资源组名称则为test[1-20][00001-00020].jpg,以该资源组建立的合成默认名称为test[1-20],同时渲染任务保存的文件夹也为test[1-20]。
为实现以上需求,则需要在Trim Settings的最后一栏输入指令中,填入以下代码:
"#{encbin}" -ss #{startt} -sn -i "#{inpath}/#{input}" -vframes #{lenf} -q:v 1 -vsync 0 "#{prefix}/#{output}[#{startf}-#{endf}]%05d.jpg"视频帧同步机制 -vsync 指令解析:
在ffmpeg中,该指令控制视频帧同步方式,如不加 -vsync 0 (或 -vsync passthrough)指令,则默认使用视频帧同步,这可能导致输出的帧序列与原视频帧对比,出现重复帧、丢帧的现象。
ffmpeg在输出时,默认会根据输入文件的帧率去使用一个恒定帧率输出(如:一段30帧的视频,ffmpeg在输出时默认会以30fps的恒定帧率输出),如果该视频本身为可变帧率VFR或帧时间戳存在抖动,那么ffmpeg在输出时就会自动插入重复帧或丢弃部分帧,使得输出帧完全符合恒定帧率。
-vsync 0的作用则是关闭视频帧同步机制,即将每一个输入帧按照解码后原封不动的输出,不进行任何的帧率、时间戳的调整,这对特效字幕的制作来说是必要设置。
二、跟踪贴边回缩
Mocha跟踪过程中,跟踪框线如果紧贴被跟踪源边缘,在执行逐帧跟踪时,极可能会逐渐回缩至跟踪源内部,导致跟踪结果不稳定。
因此在跟踪过程中,跟踪框线应与被跟踪源边缘相隔几个像素点。
三、整句逐字拆分跟踪
针对视频中某一句话的特效字幕制作,通常会将该句话对应的特效字幕做成一个整句,如果存在该整句两端与中间运动不同(如:纸张边缘与纸张中心变化不一致),此时对整句话做跟踪可能会导致特效字幕发飘。
可将字幕按照运动区域进行划分,逐块进行跟踪,必要时可拆开整句话,逐字做对应的跟踪。
四、相邻帧跳动跟踪
在使用Mocha进行特效跟踪时,会遇到A、B两帧之间运动过大的情况,使用默认设置通常会无法跟踪,出现错误提示。
在搜索区域中,取消水平(垂直)的勾选,根据画面运动幅度适当调整搜索范围的大小,一般可以解决该问题。
扩大搜索区域会导致跟踪运算时,计算到比较相似的范围,而不是指定的目标范围,因此该搜索值不能盲目扩大。如果对搜索范围进行不断调整仍无法获得满意的跟踪数据时,可在A、B两帧跟踪后,手动调整B帧的跟踪框,然后再对B帧后的画面继续跟踪,在将这组数据导入AE并应用后,会出现特效字幕运动到B帧时出现跳动,可使用AE中的位置关键帧,在A帧处打关键帧,但不做调整,然后预览B帧,将字幕调整至目标位置,此时整段特效便会完整适配画面内容。
五、预合成应用跟踪(轨道遮罩等)信息
在进行特效字幕制作时,会遇到如:
对文字做了纹理,但将跟踪数据同时应用于文字层与纹理层时,文字层的变化与纹理层的变化不一致,导致文字的纹理无法固定,乱动。
对文字做完特效后,需要限制文字的出现位置,应用轨道遮罩时,无论如何都不起效(渐变、发光、描边等破坏图层原透明通道的特效,或3D、边角定位、旋转等多个特效叠加后的复杂情况)。
这一类问题都可以通过预合成解决,预合成相当于用一个组,将这些需要操作的一个或者多个图层套在一起,然后对这个组再进行操作。预合成就是一个新的图层,对该层的部分操作与其内部所包含的数据无关。