【Aegisub】使用VSFilterMod插件插入GIF图
凋沼
2020年04月08日 13:25

Aegisub本不支持插入外部图片,在有了VSFilterMod插件之后,我们有了在Aegisub字幕文件插入png图片作为底色填充的能力

插入GIF的原理也相似,先将GIF转化为png图片序列,再由Aegisub的自动化功能连续播放图片,即可达到GIF动图的效果;有了这个例子,之后便可利用Aegisub在ass内插入任意动态效果甚至视频

本文参考[简书作者小Hshan的文章](https://www.jianshu.com/p/b0a88e9b478a)

示例在windows环境进行,需要准备的工具有

  • Aegisub 3.2.2

  • VSFilterMod x86

  • FFmpeg Windows EXE Files 

  • GifCam

  • 新版小丸工具箱

以上工具都能在官网下载(VSFilterMod在GitHub),这里同样将将其整合为压缩包

链接:https://pan.baidu.com/s/1xhmaMOuiYPZyjmGLxdjh3w 提取码:q07g 


  首先在Aeg中配置VSFilterMod插件

  将VSFilterMod x86的dll文件移入安装Aegisub路径中的csri文件夹

打开Aegisub,在工具栏依次点击[查看]>[选项](也可Alt+O)>[高级]>[视频],在字幕来自中选择

点击应用或确认,保存退出Aegisub,插件的配置完成

查看GIF图的对应帧延迟

在imageready中同样可以查看帧延迟,这里使用的是GifCam

点开Rec下拉菜单>[Open],打开需要使用的图片,点击Edit

进入这个界面后需要记住的参数值有总帧数(最后一帧Frame对应的值),帧延迟(Delay 即每帧的持续时间),如果图片的帧延迟不等,需要在应用模板后手动调整时间

在这个界面同样可以对每帧动画进行编辑,比如右键[Add Text]添加文本,右键[Resize]调整图片大小,这里选择删除最后延迟不等的一帧

编辑好之后选择[Save]到目标目录即可

有了处理好的GIF图之后便可使用ffmpeg将其分解为png图片序列

这里使用的是ffmpeg.exe来分解GIF,同样PhotoShop或GifSplitter等软件也可以完成本步

先创建一个文件夹用于存放导出的png图片序列

[Win+R]输入cmd打开命令行窗口,使用cd命令进入刚刚创建文件夹的路径

输入命令:"ffmpeg.exe路径" -r 1 -i &#​34;所使用GIF的路径" -f image2 输出名%d.png

(注意每个参数间均有空格,路径之间的参数是数字1并非小写L,输出名后的%d不能漏)

比如我将ffmpeg与GIF都放在"D:\VS\&#​34;路径下

ffmpeg是一款很强大的多媒体处理工具,可以轻松完成视频的提取、转码

这时就可以看到在新建文件夹中的png提取了,共19帧、19张png

最后在Aegisub中对图片应用ok轴模板即可

ok轴代码如下,参考小Hshan的代码,将其复制粘贴在空白ass文件的字幕行即可

(如需阅读特效详解,可移步原作者文档)

Comment: 0,0:00:00.00,0:00:05.00,GIF,,0,0,0,code once,png_file_name = "D:\\VS\\ImageOutput\\AssFight"; png_width = 144; png_height = 108; frames_count = 19; frame_delay = 50; pos_x = 200; pos_y = 200; Comment: 0,0:00:00.00,0:00:05.00,GIF,,0,0,0,template line loop 57,!retime("line&#​34;, (j-1)*frame_delay, ((j-1)*frame_delay)+frame_delay-line.duration)!{\an7}{\pos(!pos_x!, !pos_y!)}{\1img(!png_file_name!!((j+frames_count-1)%frames_count)+1!.png)}{\p1}m 0 0 l !png_width! 0 l !png_width! !png_height! l 0 !png_height! | 0 0 Comment: 0,0:00:00.00,0:00:20.00,GIF,,0,0,0,karaoke,

这里将图片填充为一个矢量的图形,事实上图片可以填充到任何需要填充颜色的地方,例如文字的主要颜色、边框颜色等等

每行需要修改的属性值如下:

  • code once行png_file_name:上一步导出的png序列路径(不包含png后缀与序列数字编号),可使用绝对路径或相对路径,比如这里使用绝对路径"D:\\VS\\ImageOutput\\AssFight"(注意双反斜杠)png_width与png_height:图片的宽高,可在图片属性查看

      frames_count:GIF的总帧数,即导出png序列的总张数

      frame_delay:每帧持续时间(毫秒)code

      pos_x与pos_y :图片的x y轴坐标(aeg中以左上角为(0,0)点)

  • template line loop ** 行将**改为png序列总张数的整数倍即可,比如序列有19张、这里填写57,即将GIF循环3遍

  • karaoke行填写起始时间与结束时间即可,实际持续时间受template line loop **与code once的frame_delay控制

创建一个空白视频,应用卡拉ok模板即可查看效果

如果需要修改ok轴信息,记得每次保存后重新应用模板

如需用动图填充字幕文字颜色,则把template line loop的 {\p1}m 0 0 l !png_width! 0 l !png_width! !png_height! l 0 !png_height! | 0 0 删除,改为文字即可

比如我们使用刚才的图片填充到文字中

!retime("line&#​34;, (j-1)*frame_delay, ((j-1)*frame_delay)+frame_delay-line.duration)!{\an7}{\pos(!pos_x!, !pos_y!)}{\1img(!png_file_name!!((j+frames_count-1)%frames_count)+1!.png)}{\pos(328,240)}填充文字底色

因为使用了VSFilterMod插件,所以在压制视频的时候,同样需要加载VSFilterMod插件,才能渲染出Aegisub中预览的效果

将解压好的x86版VSFilterMod .dll文件放置在小丸工具箱安装目录的tools\avs\plugins文件夹中

打开小丸工具箱,配置如下

勾选压制视频,点击压制即可