AviSynth2.5疑难解答

来自NMM Doc
跳到导航 跳到搜索

本页翻译:秋月くれは

AviSynth2.5疑难解答

当遇到问题时请首先阅读下面的文字

安装问题

如果AviSynth工作时您遇到了问题,请首先尝试下面的脚本

Version()

然后用Windows Media Player 6.4(文件名是”mplayer2.exe”,位于”C: \Program Files\Windows Media Player”文件夹中,注意其他版本的WMP是无效的)。如果您能看到一段显示Avisynth版本号和版权说明文字的视频,说明AviSynth已被正确安装。

如果这样不能工作,您可以尝试下面的方法:

  • 清空AviSynth的插件目录:自动加载的avsi脚本(在2.0x版本中为avs)或一些滤镜可能会导致问题(详见#检查您自动装载插件目录下的文件
  • 安装解码器,特别是Huffyuv:问题有可能是因为您没有提供显示您视频和脚本所需的解码器造成的。
  • 如果您使用了编码集成软件包(如DVD2SVCD,GKnot,DVX等),请确定您使用的是这些软件包中集成的AviSynth版本:有可能新版本的AviSynth与您使用的软件包不兼容(当然也有可能兼容)。尝试与软件包的开发者联系获得帮助。
  • 重新安装AviSynth:可能在安装过程中存在问题。如果您使用的是新的测试(beta)版本,请使用稳定的发布版本。
  • 如果以上这些仍不能解决问题,请到Doom9论坛发帖寻求帮助。

其他问题

使用AviSynth创建脚本并非永远都很简单,有时候AviSynth会输出非常奇怪的结果。以下是一个有助于您解决最常见错误的简短指导。

简化书写

如果AviSynth输出了奇怪的结果,尝试简化您的脚本。尝试把您的脚本写成尽可能多行的形式。这将有助于您确认问题,比如:

video = AviSource("file23.avi").ConvertToYUY2().Trim(539,8534)
return AudioDub(Blur(video,1.5).Reduceby2().Bilinearrresize(512,384),Wavsource("file23.wav").AmplifyDB(4.5)

上述语句的可读性显然不如下面的语句

AviSource("file23.avi")
ConvertToYUY2()
Trim(539, 8534)
Blur(video, 1.5)
Reduceby2()
Bilinearrresize(512, 384)
AudioDub(Wavsource("file23.wav"))
AmplifyDB(4.5)

另外,这还有一些好处,您将能更轻松的

  • 对单行指令进行注释,这对测试一个滤镜的效果很有帮助。
  • 获得问题指令的正确位置(行数),如果有语法错误的话。
  • 在脚本的任意位置放置“return last”语句。这将从一系列滤镜(语句)中的当前位置输出视频。
  • 观察脚本的整体“流动(flow)”(试想如果Trim指令只对其前面的视频剪辑有效那将是多么美妙的事情)。

随时检查参数

如果您使用的一个滤镜得到了意料之外的结果,请尝试使用最简单的参数。请随时通过AviSynth的主页或者随AviSynth安装的文档检查您内置滤镜的相关信息。

请确认您使用了和文档描述中相同类型的参数。最常见的一种错误是与所有滤镜的第一个参数-视频文件(clip)有关的。请确认您已熟知“后入为主”的原则,如果您没有指定“最后的视频文件(last clip)”,大多数滤镜都会返回一个“无效参数”的错误。

如果您最后一个滤镜的输出赋值给了一个变量,并且不存在“最后的视频剪辑”,您将得到一个“滤镜的返回值不能是一个视频文件(clip)”的错误,比如:

video = AviSource("file.avi")
audio = WavSource("file.wav")
combined = AudioDub(video, audio)

这是一个错误脚本,下面的写法能解决这个问题:

video = AviSource("file.avi")
audio = WavSource("file.wav")
AudioDub(video, audio)

现在此处的“最后”一条指令(last)包含了一个视频剪辑,或者这样:

video = AviSource("file.avi")
audio = WavSource("file.wav")
combined = AudioDub(video, audio)
return combined

现在此处为返回一个变量,甚至可以这样:

video = AviSource("file.avi")
audio = WavSource("file.wav")
return AudioDub(video, audio)

使用VirtualDub测试脚本

经常使用VirtualDub或改进的VirtualDubMod去测试您的脚本。这是所有开发者测试AviSynth功能时使用的方法。AviSynth当然也能在和其他程序上运行,但如果您在其他程序上运行AVS脚本返回了错误,这经常并非AviSynth本身所致,而是受到了您使用软件内部的限制。

这些限制常常和下面因素有关:

  • 色彩空间(颜色标准)问题。您使用的应用程序并支持您脚本输出时使用的颜色标准。
  • 尺寸问题。一些程序不接受所有尺寸的图像。

单步检查脚本

正如同在上面#简化书写中说提到的,如果脚本有问题,单步检查您的每句脚本永远是一个正确的选择。

您可以通过在句首(或在滤镜处理前)添加“#”注释掉一个或多个滤镜。这是让AviSynth忽略该句(以及这之后所有行)的方法。

您可以在脚本的任意位置添加“return last”或“return myvariable”语句。

您可以通过在脚本的任何位置添加[Info()滤镜]获得现阶段滤镜所得的图像和音频。

检查您自动装载插件目录下的文件

一般而言,自动装载的插件总能正确工作,但您绝不能在此目录下进行以下操作:

  • 安装任何与AviSynth版本不兼容的插件(比如旧2.0.x)。
  • 安装特殊的LoadPluginEx.dll插件(包含在WarpSharp集成包中),其用于加载旧2.0版本的插件。
  • 安装AviSynth C语言插件,其使用的是AviSynth的C应用界面(API)而非通常界面。
  • 安装过多的AviSynth插件(在2.5.7版本中,此50个插件的自动预检查装载限制已被去掉)
  • 安装其他任何DLL文件(通常来说放置其他DLL文件是安全的,但这是不推荐的。)

您同时必须记住,位于您插件文件夹下的所有AVSI文件都会被自动装载到您的脚本中。这是一个允许您使用您自己撰写(或借用他人撰写)的函数而不需要复制粘贴它们的声明定义到每个脚本中的功能。 注.在旧AviSynth版本中(直到2.0.7),所有位于您插件文件夹下的AVS文件都被自动包含在您的脚本中。这也意味着您可能复制到插件文件夹下的任何实例脚本都会被自动包含在您的脚本中,而这有可能产生错误(在旧版本中)!

一般而言,在任何AVSI(早期为AVS)文件中,没有包括在函数中的指令都是有问题的。

AVSI和DLL以外的其他文件格式会被忽略,所以可以安全的把您的文档放在插件文件夹下。

如何清空插件文件夹?只需要创建一些子目录(比如”hide”)然后把全部(或部分)文件移动到这个子目录下。请记住一些文件(DirectShowSource.dll, TCPDeliver.dll插件, ColorRGB.avsi)是AviSynth的组成部分(从2.5.6版起)。

使用相对保守的图像尺寸

如果您遇到图像碎裂,请尝试使用相对保守的帧大小,也就是说,使用高度和宽度都能被16整除的大小(译者注:MOD16)。在许多场合,使用不能被2整除的图像尺寸会产生问题,应当永远避免这种用法。

但,如果您确实发现用某些特定图像尺寸时会产生问题,请提交一份BUG报告。请参照下面的提交方法。

最后请查看AviSynth常见问题解答

如果您的问题仍然得不到解决(在某些解码器中载入脚本或色彩空间错误),请参阅Avisynth2.5_FAQ,特别是 Q2.4:解码器X读取AVS文件有问题? 同时也请确认已查看Q1.4: 当前版本的主要缺陷是什么?

BUG报告/寻求帮助

在能提供有效的帮助前我们需要您提供很多信息。如果您没有向我们提供这些信息,这等于给我们了一个无法为您提供帮助或者定位错误的绝佳机会。

务必确认提供了下列信息:

  • AviSynth的版本号(如果您使用的不是一个SourceForge上的最终发布,请附上beta版的发布时间)
  • 一个最简单的可重现错误的脚本
  • 您得到的确切的错误信息
  • VirutalDub(Mod)的版本号
  • 从VirtualDub->File->File Information中获得的所有文件信息
  • 使用的插件版本
  • 编解码器以及输入素材的图像尺寸

BUG报告可以提交到AviSynth2的SourceForge Project页面。提交前请先在该页面确认是否存在和您遇到情况相近的BUG,请注意这确实是有可能的。外部插件的错误应提交给插件作者,而不是给我们。

一个能获得帮助的好地方是Doom9论坛。请在提出问题前先搜索论坛是否有相关讨论,那里有很多讨论主题!如果有,您可以直接参加讨论。