Avisynth总帧数不等于VirtualDub总帧数

时间:2017-04-30 09:01:55

标签: ffmpeg avisynth virtualdub

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

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

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

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 Dissolve = 195帧 long =意外行为

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)

带有fadeOut的Test3.avs(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 with dissolve and fade = 197帧 long =意外行为

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明确指定dissolve和fade上的帧速率= 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帧 long =预期行为(这就是我想要的)

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)

1 个答案:

答案 0 :(得分:0)

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

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

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

  

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

由于您在FadeIn中拨打了FadeOut和拨打test3.avs一个电话,因此添加了两个额外的帧。如果您不想这样做,那么您可以使用FadeIn0 / FadeOut0(或FadeIO0,因为您同时使用它们),但请注意,使用这些功能时,第一帧/最后一帧将会不完全是黑色。如果您想要精确,那么只需修剪第一帧和/或最后一帧,然后再使用普通的FadeIn / FadeOut / FadeIO函数。

你的“真实例子”是将苹果与橙子进行比较。带有Dissolve的版本会大幅增加帧数,因为它会多次组合相同的剪辑

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

d1d3 每个都包含v3剪辑的副本,然后您将d1d3拼接在一起最后,意味着v3被包括两次。 (对于v9v10也是如此。)

您可能打算做以下事情:

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帧重叠)+(FadeIO 2帧)。

如果你真的想通过淡出然后淡入来组合剪辑,那么你可以通过这样做来保留原始帧数:

video =   FadeIO0(v1, 60) \
        + FadeIO0(v3, 60) \
        + FadeIO0(v9, 60) \
        + FadeIO0(v10, 60) \
        + FadeIO0(v11, 60)