gif分解工具_Aegisub中插入GIF动图完全指南!

7739be31306e5d94f708abf2a271be82.png

190d18fcfcd93f21bcc38ea4e1fef4a1.gif

cda23e7837b8e849d5245c81f6592999.gif

Aegisub中本不支持插入图片,但是使用插件VSFilterMod后,可以在ass字幕中以png图片作为颜色填充。

即便这样,仍不能在ass中插入gif动图。不过可以将gif转变为png图片序列,再由aegisub自带的自动化功能连续播放图片,即可模仿gif动图的效果。

有了可以插入gif的方法,我们就可以利用aegisub在ass内插入任意动态效果甚至视频的能力。

本文由小Hshan编辑,保留原作者信息可自由转载。


在此处下载示例压缩包,除Aegisub本体外,另外三款软件均已附带:链接:https://pan.baidu.com/s/1lvNR2R7giV0K0P9RiN1FGQ 提取码:scci

本文必要软件:

Aegisub高级字幕编辑器3.2.2 :http://www.aegisub.org/

VSFilterMod x86版本 :https://github.com/sorayuki/VSFilterMod/releases/tag/r5.2.1

本文推荐软件:

FFmpeg Windows EXE Files :https://www.ffmpeg.org/download.html

GifCam :http://blog.bahraniapps.com/gifcam/


步骤1 配置VSFilterMod

下载GitHub上的VSFilterMod发布版本,选择x86版本进行解压,得到VSFilterMod.dll

将此dll文件放入Aegisub的安装文件夹的csri文件夹中

046a8ab2e4df9eacac97c94144efdfae.png

然后启动aegisub,在工具栏-查看-选项-高级-视频-字幕来自中选择CSRI/vsfiltermod textsub

1130c07921f66bfec8f646d762f6b17e.png

点击确认,VSFilterMod配置完毕。


步骤2 查看gif图片帧延迟和编辑gif图片

使用GifCam软件,打开你的gif图片。

988e21dab628d27b806db8afa05a2ced.png

打开后点击Edit 编辑按钮,打开编辑窗口。

68d14fbb438587d8bfe2e20bb229eda2.png

你可以在这个编辑窗口看到帧延迟(每一帧的持续时间),记住这个值,在后面会用到。值得注意的是,gif允许每帧的帧延迟不相等,但是本文提供的方法插入的gif图片的每一帧的延迟均是相等的。如果一定要不相等的时间,可以在应用卡拉ok模板后,手动调整应用后自动生成的字幕行的时间。

你还可以在这个窗口右键帧,然后对gif图片进行删除某帧、调整大小、添加文字等等操作。

编辑完成后关闭编辑窗口,点击Save按钮保存。

198f353e1aee014be81776909b1a3e12.png

c61d8fee97931b53ec0764d7d31dbce1.png

步骤3 将gif动图分解为png图片序列

此处将利用ffmpeg作为示范。

下载并解压ffmpeg Windows EXE 版本,得到ffmpeg.exe文件。

新建一文件夹用于存放输出的png图片。

打开新建的文件夹,在工具栏中输入cmd,回车,打开以当前目录为工作目录的命令指示符。

45e7a3052bac67b91751ac20139ba553.png

e39b96a8756c5f0009abd87e5edfe016.png

然后输入ffmpeg.exe的路径 -r 1 -i gif图片的路径 -f image2 输出名字%d.png

输入完成后回车,即可在当前文件夹生成png图片序列。

关于在cmd中输入路径的方法:按住shift后再右键文件,可以看到“复制为路径”选项,复制后在cmd中粘贴即可。

例如:“C:UsersDesktopffmpeg.exe” -r 1 -i “C:UsersDesktopslime.gif” -f image2 slime%d.png

4c8e2ded3327769795f322e819099236.png

注意:其中的每一项参数之间均有空格,以及最后的.png前面必须要有%d

如果操作正确,此时可以在文件夹中看到生成的png序列。


步骤4 在Aegisub中应用卡拉ok模板

本例子使用图片填充一个矢量矩形作为示范,以展示出完整的图片样貌。实际上图片可以填充到任何需要填充颜色的地方,例如文字的主要颜色,文字的边框颜色等。

关键字幕行代码:

Comment: 0,0:00:00.00,0:00:05.00,GIF,,0,0,0,code once,png_file_name = “slime”; png_width = 256; png_height = 256; frames_count = 2; frame_delay = 250; pos_x = 0; pos_y = 0;

Comment: 0,0:00:00.00,0:00:05.00,GIF,,0,0,0,template line loop 50,!retime(“line”, (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:15.00,GIF,,0,0,0,karaoke,

复制上述三行字幕行代码,在aegisub的字幕区中右键-粘贴行,即可快速粘贴字幕行。

adca8cdbdc9b74c9dbcb7857a8cc95be.png

需要在code once行中修改的参数有:

png_flie_path : png序列的路径,不包含数字后缀和.png后缀名。

如”slime”(相对路径)、”C:UsersHshanDesktopslime”(绝对路径 注意反斜杠需要改为双反斜杠)。使用的路径需要用半角双引号引用,并且推荐使用纯英文路径。

png_width : png图片像素宽度。

png_height : png图片像素高度。

frames_count : png图片序列总张数。

frame_delay : 每帧延迟(持续)时间(毫秒)。

pos_x : 图片x轴位置。

pos_y : 图片y轴位置。(原点为图片左上角{an7})

需要修改template line loop XX 的值:XX的值为png图片序列总张数的整数倍。

例如,你的gif图片共有24帧,则若写template line loop 24 ,则动图循环播放一次;若写template line loop 48 ,则动图循环播放两次,以此类推。若不是整数倍则最后一次播放不能完全把动图播放完。

最后:修改karaoke行的起始时间。即特效栏填写着karaoke的空行 特效栏填写着karaoke的字幕行也被称为被应用行。此行的起始时间便是动图开始的时间。因为使用了retime函数,所以此行的结束时间并不重要。结束时间受template line loop XX 的值的影响。

在修改完上述参数后,点击工具栏-自动化-应用卡拉ok模板,即可看到自动生成的字幕行,播放即可看到动图效果。

3991e4d3dba6d19c2eb74599b49e2df6.png

190d18fcfcd93f21bcc38ea4e1fef4a1.gif

如果发现图片背景为黑色,把GIF样式的边框和阴影改为0像素即可。

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

例如改为:

!retime(“line”, (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)}用动图填充字幕颜色

a01bc45cd33b5eb1be00f7e1a420a9fd.gif

注意,每次修改后均需要重新点击工具栏-自动化-应用卡拉ok模板,才能看到效果。


特效详解

第一项!retime(“line”, (j-1)*frame_delay, ((j-1)*frame_delay)+frame_delay-line.duration)!

函数声明:!retime(模式, 开始时间偏移, 结束时间偏移)!

retime函数用于改变自动生成的卡拉ok模板行(特效栏带有fx的行)的开始时间和结束时间。

模式为“line”的情况下,函数会将生成的fx行的开始时间重新设置为被应用行的开始时间,将生成的fx行的结束时间重新设置为被应用行的结束时间。在本例中,被应用行为:

99b4e1de2217c8d2f8a3fb34adcaf920.png

所以在开始时间偏移和结束时间偏移均为0的情况下,生成的fx行的开始时间和结束时间会全部变成0:00:00.00和0:00:15.00

但为了让图片每隔frame_delay毫秒切换一次,需要将开始时间偏移设定为(j-1)*frame_delay

其中,j为一特殊变量,可以直接使用,它的值等于当前loop循环次数的值。

例如,在特效栏为 template line loop 10 时,点击应用卡拉ok模板按钮,每条被应用行将会被应用10次。也就是说,每条被应用的字幕行会生成10条fx行。其中第一条fx行的j值为1,第二条fx行的j值为2,以此类推。

所以当开始时间偏移设定为(j-1)*frame_delay 时,假设帧延迟frame_delay为0.1秒,即100ms,第一条fx行的开始时间就为0:00:00.00 + (1-1)*100 = 0:00:00.00 ;第二条fx行的开始时间就为0:00:00.00 + (2-1)*100 = 0:00:00.10 ;第三条fx行的开始时间就为0:00:00.00 + (3-1)*100 = 0:00:00.20

结束时间偏移必须设定为((j-1)*frame_delay)+frame_delay-line.duration。其中line.duration为一特殊变量,可以直接使用,它的值为被应用行的持续时间,例子中为15秒(15000ms)。

所以当结束时间偏移设定为((j-1)*frame_delay)+frame_delay-line.duration 时,假设帧延迟frame_delay为0.1秒(100ms),第一条fx行的结束时间就为0:00:15.00 + (1-1)*100+100-15000 = 0:00:00.10 ;第二条fx行的开始时间就为0:00:00.00 + (2-1)*100+100-15000 = 0:00:00.20 ;第三条fx行的开始时间就为0:00:00.00 + (3-1)*100+100-15000 = 0:00:00.30

综上,在帧延迟为0.1秒的情况下,第一条fx行的开始和结束时间分别是0:00:00.00和0:00:00.10 第二条fx行的开始和结束时间是0:00:00.100:00:00.20,正好相差一个帧延迟的时间。

第二项{an7}{pos(!pos_x!, !pos_y!)}

{an7}将字幕的原点设置为了左上角,{pos()}则设置了字幕的位置(pos_xpos_y的值是在code once行中手动输入的)。

第三项{1img(!png_file_name!!((j+frames_count-1)%frames_count)+1!.png)}

函数声明:{$img(图片路径, x轴偏移, y轴偏移)}

img函数用于将图片代替纯色进行填充。其中,$的值可选为1、2、3、4中的一个。1代表主要颜色;2代表次要颜色;3代表边框颜色;4代表阴影颜色。x轴y轴偏移属于可选值。

本函数的第一项为!png_file_name!!((j+frames_count-1)%frames_count)+1!.png 其中png_file_name是png序列的名字,但不包括数字编号和后缀名。图片的数字编号是由((j+frames_count-1)%frames_count)+1负责。这个值恰好能与j以及frames_count构成循环,让图片编号始终在1~frames_count之间循环,实现了模拟gif动图循环播放的感觉。

第四项:{p1}m 0 0 l !png_width! 0 l !png_width! !png_height! l 0 !png_height! | 0 0

这一项的主要目的是创建一个和图片一样大的矢量矩形。如果要用图片填充文字则要把这项删除改为文字。


若有机会再写如何将使用了VSFilterMod的ass字幕压制进入视频内。

本文由小Hshan编辑,保留原作者信息可自由转载。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值