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論壇。請在提出問題前先搜索論壇是否有相關討論,那裏有很多討論主題!如果有,您可以直接參加討論。