AviSynth2.5 YV12常見問題

出自NMM Doc
於 2008年9月6日 (六) 12:59 由 秋月くれは討論 | 貢獻 所做的修訂
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
跳至導覽 跳至搜尋

本頁翻譯:秋月くれは

AviSynth常見問題-YV12

什麼是YV12

再現色彩的方法有很多種,比如:YUV和RGB顏色空間。在YUV顏色空間的三個分量中,有一個分量(Y)用於再現亮度(luma),另兩個分量(UV)用於再現色度(chroma)。其中亮度信息需要被完全再現出來,而色度分量的信息則可以通過色度採樣(過濾或求平均)的方式被削減,這種削減可以通過多種方式來實現(因此在YUV色彩空間中存儲一張圖片有許多格式)。被AviSynth支持的YV12就是這些方式中的一種。許多重要的編碼器都採用YV12空間存儲視頻:MPEG-4(x264,XviD,Divx以及很多其他的編碼格式),DVD-Video存儲格式MPEG-2,MPEG-1以及MJPEG。

譯註:

  • 色度採樣=Chroma Subsampling
  • 關於色度採樣和色彩空間的理論知識,建議參閱 Rafael C. Gonzalez; Richard E. Woods(2002). Digital Image Processing, 2nd ed., New York: Prentice Hall. ISBN 0-201-18075-8以及Wyszecki Günther; Stiles W.S. (1982). Color Science: Concepts and Methods, Quantitative Data and Formulae, 2nd ed., New York: Wiley Series in Pure and Applied Optics. ISBN 0-471-02106-7.

我在哪可以下載支持YV12空間的最新穩定版本的AviSynth?

「AviSynth v2.56」(和後續版本)能在此處下載。

我在哪可以下載支持YV12空間,用於將MPEG-1/MPEG-2/TS/PVA導入到AviSynth的DGIndex/DGDecode插件?

最新的DGIndex/DGDecode整合版本能在此處下載。

何種編碼程序支持YV12色彩空間?

普通版本的VirtualDub(Avery Lee編寫)從1.5.6版本後就在快速重壓模式(Fast Recompress Mode)中支持YV12空間。

如要編碼成Divx/Xvid格式還有其它兩種選擇:

  • VirtualDub的修改版本(被稱為VirtualDubMod)支持YV12空間:這個修改版本(Pulco-citron, Suiryc和Belgabor編寫)還支持OGM和AVS預覽(AVS-preview)。

VDM可以在此處下載。

為了使您能夠直接使用YV12空間(不做任何色彩變換),您必須用VirtualDubMod加載您的AVI文件並選擇快速重壓縮(Fast Recompress)。

  • 另一個提供簡便(並快速)YV12支持的軟件是基於命令行界面的AVS2AVI,它可以調用任何一種VFW編碼器將從AviSynth導入的視頻進行壓縮。
  • HCQuEnc這兩種MPEG-1/MPEG-2編碼器也支持(甚至必須使用)YV12空間。

如果我使用的是不能處理YV12空間數據的編碼程序,比如TMPGEnc或者CCE SP,我應該如何使用v2.5x版本的AviSynth?

如果使用TMPGEnc,您必須在腳本中添加ConverToRGB24命令(並選用合適的交錯選項);如果使用CCE SP,您必須在腳本中添加ConvertToYUY2命令,因為Windows沒有內置YV12壓縮編碼器。

您也可以安裝一些#YV12解壓縮(編碼器),當在TMPGEnc或CCE SP中加載Avi文件時,它們將會為您解壓縮YV12格式的AVI文件。

全程YV12處理視頻有什麼主要優點?

  • 加快編碼速度:

這點完全取決於您的外部插件是否支持YV12空間。在插件提供YV12支持的情況下,編碼速度可能會提高25%-35%。當然這種提速只有當您的源和目的文件都是YV12空間時才能體現,比如從DVD中提取視頻並編碼成DivX/Xvid格式。

  • 無顏色空間轉換

這樣顏色信息不會被內插值處理(或者不會進行大量的內插值處理),因此圖像會更真實。

一些MPEG-2編碼器如CCE、Procoder和TMPGEnc不能直接處理YV12空間下的文件。CCE和Procoder使用的是YUY2,TMPGEnc使用的是RGB24。這僅表明AviSynth腳本的最後一行必須使用ConvertToYUY2(對CCE/Procoder而言,或者對TMPGEnc而言使用ConvertToRGB24)語句,雖然這樣您或許不能完全體驗YV12色彩空間的優勢,但這仍然有兩大好處:

  1. 所有AviSynth的內置濾鏡都能更快的工作(這歸因於YV12到YUY2的轉換速度非常快,以及在更好的架構上處理更少的數據),並且您能一目了然的看出v2.06和v2.5間的區別。
  2. 如果您正在處理一段逐行視頻,這將會有另一個好處。在腳本最後執行YV12到YUY2轉換能讓您首先進行反膠捲過帶(InVerse TeleCine,簡稱IVTC)或解交錯處理以得到逐行幀。對逐行幀進行YV12到YUY2的轉換會比直接對交錯幀或場幀(field-based frames)轉換保留更多的色度信息。

色彩空間轉換:

  • CCE: YV12->YUY2->YV12
  • TMPGEnc: YV12->RGB24->YV12

我應該如何在VirtualDub/VirtualDubMod中操作以避免非必須的色彩空間轉換?

只需要在VirtualDub/VirtualDubMod中載入您的AVS文件然後將視頻選擇為「快速重壓縮(Fast Recompress)」即可。在這種模式下,全程處理都是在YV12空間下進行的(所需的全部濾鏡都是在AviSynth內部自動完成的)。在壓制過程中請選擇支持YV12空間的編碼器,比如Xvid、DivX5、RealVideo(假定您能下載到最新的編譯版本)或者3ivx D4(假定您能下載到最新的編譯版本)。請注意DivX3/4也支持YV12空間,一個例外是PIV用戶在YV12空間下使用DivX4編碼時會導致程序崩潰。 對於希望預覽視頻的用戶,還需要安裝一個YV12解壓編碼器。

哪些內置濾鏡支持YV12?

原則上說,所有的內置濾鏡都提供對YV12的原生支持。每種濾鏡支持何種色彩空間都可以在文檔中找到。

哪些外部插件支持YV12?

為AviSynth v2.5編譯的插件稱為外部插件。新插件的列表可以在這個討論串中找到。它們中的大部分都提供對YV12的支持(參見插件的文檔)。

全程YV12處理有弊端嗎?

  • 如果源文件格式並不是YV12(模擬採集信號,DV),或者最終的編碼格式不是YV12,則在色彩空間轉換中會進行色度內插值,從而導致一定程度上的質量劣化。
  • 對已做色度抽樣幀進行濾鏡處理將導致一些色度通道像素會延展到相關的亮度通道像素上(broadening relatively luminosity pixels),特別是對一些交錯視頻而言。

如何查看現在我腳本中的某一指定位置處的色彩空間?

想得到您腳本任一指定位置的色彩空間信息,使用如下語句:

Info()

AviSynth將返回很多信息,其中就包括此位置的色彩空間。

當我在AviSynth v2.5中加載Divx文件顏色發生了翻轉

這是一個老版本DivX5的BUG導致的錯誤。請下載最新的編譯版本或者使用「SwapUV(clip)」語句。

我已經安裝AviSynth v2.5並得到如下的錯誤信息:「不能定位』YV12』格式(未知)的解壓縮編碼器地址。」

安裝一個支持YV12的編碼器,如DivX5或最新的Koepi編譯版XviDHelix YUV Codec或一些其他編碼器(ffvfw,ffdshow)。如果仍不能工作,請參照下一個問題回答的方法修改註冊表。

我已經安裝AviSynth v2.5和DivX5(或者最新的Koepi編譯版XviD),但當用VirtualDub/VirtualDubMod/MPEG-2編碼器打開AVS腳本時,我仍然只能得到黑屏。

好吧,很明顯您的視頻沒有被DivX 5.02(或XviD)解碼。嘗試使用VCSwap Utility進行在線視頻編碼器切換。

高級用戶也可以手動完成上述操作。打開您的Windows目錄,重命名一個叫MSYUV.dll的文件,或者在您系統註冊表中添加如下內容

REGEDIT4 
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32] 
"VIDC.YV12"="divx.dll"

如果使用的是Xivd v0.9請將上述內容中的「divx.dll」替換成「xvid.dll」,同理對XviD v1.0請替換成「xvidvfw.dll」。

有沒有無損的比如可以用在視頻採集中的YV12編碼器?

有如下的一些無損YV12編碼器:

譯註:Huffyuv是一種Win32環境下的快速無損視頻編碼器,具體請參考此處

一些重要外部鏈接