月夜残星 发表于 2024-1-11 16:43:58

关于一条字幕结束时间的问题

本帖最后由 月夜残星 于 2024-1-11 16:47 编辑

如图所示,“我们也绝不会妥协”这一行字幕应于0:11:53.713结束,下一帧开始的时间为0:11:53.755,而Aegisub的时间轴调整只能到小数点后两位,所以按理说,这里的结束时间设定为0:11:53.72~0:11:53.75都是没有问题的,实际上在Aegisub里面,设定成72、73、74、75在实际效果上是完全一样的。但是,这就出现了一个问题,就是用其他的播放器观看的时候,就会出现字幕时间不同。就拿Pot Player来说,还是以这一条字幕为例,当把时间设定成72和73的时候,字幕是在这一帧也就是在画面切换之前结束的,而把时间设定为74、75的时候,字幕则会在下一帧结束,也就是会在0:11:53.755这个下一个画面上出现一下再结束,导致了闪屏。还有一种情况就是,有时候如果把假如0.713结束的字幕,结束时间设定为72的话,Pot Player甚至会提前结束,同样导致闪屏,这个时候就又要把时间多延后到73才行。也就是说出现这种情况似乎并没有什么规律,有没有办法解决这一问题呢?

tmdtmdtmdqq 发表于 2024-1-11 22:39:57

本帖最后由 tmdtmdtmdqq 于 2024-1-12 01:39 编辑

想对帧操作的话,只需将右边的 时间 改为 帧



可以用帧方式输入来测试一下:

结束时间类似,只是把当前行下一帧的开始时间当成当前行的结束时间
所以结束时间只要当成帧数+1的开始时间去处理即可




测试结果:



这就说明,时间的千分位X
对于开始时间:
X<5,就减(20+X),比如画面显示的时间小数点后尾数为 ,那就设置为510,即行时间的小数部分为51
X==5,就减25或15,比如画面显示的时间小数点后尾数为 535,那就设置为510或520,即行时间的小数部分为51或52
X>5,就减(10+X),比如画面显示的时间小数点后尾数为 ,那就设置为520,即行时间的小数部分为52

对于结束时间:
X<4,就加(20-X),比如画面显示的时间小数点后尾数为 ,那就设置为550,即行时间的小数部分为55
X>4,就加(30-X),比如画面显示的时间小数点后尾数为 ,那就设置为560,即行时间的小数部分为56

因为数值5有误差,按我平时制作来说,我都将容差再放大一点,直接用7(或8)作为分界,对于开始时间:
X<7,就减(20+X)【减大于等于20,凑整】
X>=7,就减(10+X)【减超过10不超过20,凑整】

防止结束时间因误差导致下一帧出现(宁可早结束也不要多显示),所以对结束时间为中间数的,结束时间给短一点,对于结束时间,我会:
X<7,就加(20-X)【加超过10不超过20,凑整】
X>=7,就加(30-X)【加大于20,凑整】


当然,如果音频图上有关键帧的线,优先对齐关键帧的线(前提是关键帧的线是准的【有些视频不准,要用工具重新生成再“视频->打开关键帧”】)



关键帧的重新生成,可以用MIR大佬的脚本(隔壁帖附件有给)。如果不想装vapoursynth环境,也可以用我参考unanimated配置的这个:



ffmpeg需要另外下载
需要系统环境变量配置ffmpeg 或 修改启动脚本 set "ffmpeg_exe=ffmpeg" 中等号后面的ffmpeg 为ffmpeg的exe文件路径
把单个视频文件拖到bat里执行即可(有些视频有特殊字符或名字过长的,可能要改一下文件名才行)



Lambholl 发表于 2024-1-13 15:59:07

potplayer自带的字幕滤镜时间本来就不准,如果要测试还是上XySubFilter with libass或者mpv吧

月夜残星 发表于 2024-1-13 22:28:48

Lambholl 发表于 2024-1-13 15:59
potplayer自带的字幕滤镜时间本来就不准,如果要测试还是上XySubFilter with libass或者mpv吧 ...

只是拿potplayer举个例子,用其他播放器也有这个问题
页: [1]
查看完整版本: 关于一条字幕结束时间的问题