AviSynth2.5 YV12常见问题

来自NMM Doc
跳转至: 导航搜索

本页翻译:秋月くれは

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环境下的快速无损视频编码器,具体请参考此处

一些重要外部链接