0

似乎 Dissolve 和/或 Fade 更改了 .avs 脚本中的总帧数。当我将 avs 脚本中的总帧数相加,然后在 Vdub 中加载 avs 脚本时,总帧数是不同的。下面我的真实示例显示了相同脚本的822 帧与 1368 帧的差异。我进行了一些基本测试,这些测试似乎支持这个假设。当然,我可能正在做一些愚蠢的事情。任何指导将不胜感激。如果我能澄清任何事情,请告诉我。Ffmpeg 也使用相同的脚本,这让我认为这是一个 Avisynth 问题。或者我缺乏 avs 编码技能。

系统规格:Win7,FFmpeg 版本:20170223-dcd3418 win32 shared,AVISynth 版本:2.6

Test1.avs = 200 帧长= 预期行为

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
video = v1 + v2
return video

Test2.avs with return Dissolve = 195 帧长= 意外行为

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
return Dissolve(v1, v2, 5)

Test3.avs with fadeOut(fadeIn = 202 帧长= 意外行为

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
fadeOut(fadeIn(v1 + v2, 60), 60)

Test4.avs 溶解和淡入淡出 = 197 帧长= 意外行为

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
v3 = Dissolve(v1, v2, 5)
fadeOut(fadeIn(v3, 60), 60)

Test5.avs 明确指定溶解和淡入淡出的帧速率 = 197 帧 = 意外行为

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24, start=1, end=100)
v2=ImageReader("2.png", fps=24, start=1, end=100)
v3 = Dissolve(v1, v2, 5, 24)
fadeOut(fadeIn(v3, 60, $000000, 24), 60, $000000, 24)

realExample = 822 帧长= 预期行为(这就是我想要的)

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24).trim(1,106)
v3=ImageReader("3.png", fps=24).trim(1,471)
v9=ImageReader("9.png", fps=24).trim(1,58)
v10=ImageReader("10.png", fps=24).trim(1,35)
v11=ImageReader("11.png", fps=24).trim(1,152)
video = v1 + v3 + v9 + v10 + v11
return video

realExample = 1368帧长

LoadPlugin("C:\Program Files (x86)\AviSynth 2.5\plugins\VSFilter.dll")
v1=ImageReader("1.png", fps=24).trim(1,106)
v3=ImageReader("3.png", fps=24).trim(1,471)
v9=ImageReader("9.png", fps=24).trim(1,58)
v10=ImageReader("10.png", fps=24).trim(1,35)
v11=ImageReader("11.png", fps=24).trim(1,152)
d1 = Dissolve(v1, v3, 5)
d3 = Dissolve(v3, v9, 5)
d9 = Dissolve(v9, v10, 5)
d10 = Dissolve(v10, v11, 5)
fadeOut(fadeIn(d1 + d3 + d9 + d10,60),60)
4

1 回答 1

0

你说你的一些结果给出了“意外的行为”,但你没有具体说明你期望它们是什么,所以不清楚你认为什么是错误的以及你的误解在哪里。(在讨论问题时,你应该总是说明你得到了什么结果以及你期望得到什么结果。)

在您的Dissolve示例 ( Test2.avs) 中,您说 195 帧是出乎意料的,但这对我来说听起来是正确的。将两个剪辑“溶解”在一起意味着一个剪辑的结尾与第二个剪辑的开头重叠,因为一个剪辑逐渐淡入另一个剪辑;这与淡出第一个剪辑然后淡入第二个剪辑不同。重叠意味着结果必须短于剪辑的各个长度的总和。您组合了两个 100 帧剪辑并指定了 5 帧重叠,因此 100 + 100 - 5 = 195。

在您的FadeOut示例 ( Test3.avs) 中,您说 202 帧是出乎意料的,但这对我来说也是正确的。FadeIn/FadeOut状态的文档:

在开始/结束处添加一个额外的颜色帧,从而将总帧数增加一(或对于 FadeIO,增加二)。

由于您进行了一次调用FadeIn和一次调用FadeOutin test3.avs,因此添加了两个额外的帧。如果您不想要这个,那么您可以使用FadeIn0/ FadeOut0(或者FadeIO0因为您同时使用两者),但请注意,使用这些功能,第一帧/最后一帧不会完全是黑色的。FadeIn如果你想要精确,那么在使用正常的//函数之前只需剪掉第一帧和/或最后一帧FadeOutFadeIO

您的“真实示例”正在将苹果与橙子进行比较。版本Dissolve显着增加了帧数,因为它多次组合相同的剪辑:

d1 = Dissolve(v1, v3, 5)
d3 = Dissolve(v3, v9, 5)
...
fadeOut(fadeIn(d1 + d3 + d9 + d10,60),60)

d1并且d3 每个都包含一个v3剪辑的副本,然后在最后拼接在一起d1d3这意味着v3包含两次。v9(对于和也是如此v10。)

您可能打算执行以下操作:

video = Dissolve(v1, v3, 5)
video = Dissolve(video, v9, 5)
video = Dissolve(video, v10, 5)
video = Dissolve(video, v11, 5)
video = FadeOut(FadeIn(video, 60), 60)

或更简洁地说:

video = FadeIO(Dissolve(v1, v3, v9, v10, v11, 5), 60)

结果应该是 804 帧长:(原始剪辑的 822 帧)-(4 个溶解点)*(每次溶解 5 帧重叠)​​+(2 帧FadeIO)。

如果您真的想通过淡出然后淡入来组合剪辑,那么您可以通过执行以下操作来保留原始帧数:

video =   FadeIO0(v1, 60) \
        + FadeIO0(v3, 60) \
        + FadeIO0(v9, 60) \
        + FadeIO0(v10, 60) \
        + FadeIO0(v11, 60)
于 2017-05-07T20:21:54.110 回答