Avi2Jpeg: 1. Capture pictures from AVI stream into JPG or BMP files, then enhance them with image average technique, or enlarge them with bi-cubic interpolation. 2. Show the bitrate curve of video stream.

作者:马健
邮箱:stronghorse@163.net
主页:http://stronghorse.yeah.net

FAQ
使用说明
    一、截图
    二、批量放大
    、图像平均
    四、选项(option)
    五、码率曲线(Bitrate)
附录A 鸣谢
附录B 版本更新记录

FAQ

Q:Avi2Jpeg是什么?
A:这个软件有两个主要功能:
1、截取AVI(包括标准非压缩AVI,及用DivX、XDiv压缩的AVI)中的画面,并可用内嵌的图像平均、高精度放大工具获得大尺寸的画面。
2、显示AVI的码率曲线,计算总体平均码率及视频流的码率统计特征量,为洗牌提供依据。

Q:Avi2Jpeg在截图方面与其它截图工具有何不同?
A:目前能够从AVI截到图的工具包括:
1、超级解霸、PowerDVD等播放软件。这些软件在播放流媒体时也能截图,但一次只能截一张,不能连续截,因此在截图的时候需要眼疾手快。而Avi2Jpeg可以按指定的频率连续截图,然后在截出的一堆图中慢慢挑,或者用图像平均功能合成一张高质量的图。而且这些软件截出来的都是BMP,而Avi2Jpeg可以选择保存为JPG,并且可以指定JPG的质量系数。
2、HyperSnap等通用截屏软件。这些软件相当于扩展了的Print Screen键,完全是站在旁观者的立场上,抓取播放窗口中的内容,因此对播放过程完全无法控制,边截图播放器边哗哗往后放,一秒截不了几张图,漏截是必然的,说起来还不如用播放器截图来得方便、有效。而Avi2Jpeg彻底抛弃截屏技术,能够调用解码内核,逐帧解码AVI文件,因此不存在漏截的问题,保证每一帧图像都能被截出来。
3、VirtualDub、NanDub等AVI编辑软件。这些软件的“Save image sequence”功能可以将整部AVI逐帧解开,然后保存成一堆BMP文件,不过你不觉得这样太恐怖了吗?至少我的硬盘经不起这样的折腾。当然也可以用这些编辑软件定位到合适的帧,然后用截屏工具或Print Screen键截屏,不过这样还不如用播放器截图。Avi2Jpeg从NanDub、Windows Media Player中借鉴了一些定位功能,因此可以方便地定位到AVI文件的任何地方,然后设置截图的起始帧、结束帧,还可以指定是连续截还是跳跃截,结果是BMP还是JPG等,完全不是VD和ND所能比拟的。

Q:Avi2Jpeg显示的码率曲线有什么用?
A:有以下作用:
1、通过计算视频流的平均码率,可以估计压缩时在codec中设定的码率。
2、可以从曲线形状评估AVI片源的质量,为洗牌提供依据。

Q:为什么从码率曲线能看出片源质量?如何看?
A:mpeg是针对“运动图像”的压缩算法,一般在关键帧后,会有一系列非关键帧。对于碟版片源的动画片来说,画面都很稳定,这样非关键帧只需要很少的数据就能存储与关键帧之间的差异,即非关键帧需要的码率很小。如果片源质量不好,画面经常漂移、模糊,则非关键帧需要大量数据存储与关键帧之间的差异,即分配给非关键帧的码率也很大。举个例子:片中人物在说话,只有嘴在动,其它不动,这时如果画面稳定,只需要记录嘴动的部分就行了;如果画面晃来晃去,就需要记录整个画面的运动;如果画面上颜色也变来变去,还不时出现胶片麻点,则这些东东也需要数据记录。
从上面的说明可以看出,如果一条码率曲线出现一个高峰,然后掉下来,过一会再来一个高封,再掉下来,周而复始,剧烈振荡,则片源质量是好的。如果曲线振荡不激烈,基本上是在均值上下波动,则片源质量不怎样。

Q:Avi2Jpeg在使用时有什么限制?
A:Avi2Jpeg的限制包括:
1、如果源AVI文件是用DivX等压缩的,在使用前,系统中必须先安装相应的codec插件,并保证它们工作正常。最简单的方法就是用Windows Media Player播放欲截取的AVI,如果WMP不能正常播放,本程序也不可能截出什么来。
2、由于采用Intel Image Processing Library (IPL)完成图像放大功能,本程序只能在支持MMX指令集的机器上运行。不过现在还有不支持MMX的机器吗?怀疑ing……
3、计算码率的时候,如果文件太短,计算结果可能会不准,因此请不要用长度在5分钟以下的文件进行尝试。

Q:我需要为使用、转载Avi2Jpeg付费吗?
A:Avi2Jpeg是一个“友情软件”(Friendware),用户在承诺不用于商业目的,也不对文件及其附件进行任何更改的条件下,不需要为使用该软件负任何费用,最多是在动漫讨论区看到我发帖子灌水时,进去捧个人场,作为友情回报,或者在年节时发个email问声好(所以叫“友情软件”)。我承诺绝不在程序中暗藏任何商业广告、木马,但不承诺为使用Avi2Jpeg的后果承担任何责任。如果您需要将它用于商业目的,或加入您的网站,请与我联系,否则保留追究一切责任的权利。如果您能提供更好的数字图像处理算法或源码,或者是发现程序的bug,欢迎与我联系

如果你用WMPCam制作出了精彩壁纸,欢迎与我分享你的得意之作,或交流使用心得。

使用说明

一、截图

一般操作过程是:

  1. 点击“Save to”旁边的“...”按钮,选择保存截取下来的文件的目录。
  2. 点击工具条上“Open”按钮,打开AVI文件。
  3. 文件打开后,可以点工具条上的“Play”按钮播放,也可以用工具条上的“First frame”(文件头)、“Last frame”(文件尾)、“Prev frame”(前一帧)、“Next frame”(后一帧)、“Prev key frame”(前一关键帧)、“Next key frame”(后一关键帧)来定位位置,如果需要快速精确定位也可以点工具条上的“Position”按钮,弹出对话框后直接按帧号或时间定位。
  4. 定位到合适位置后,点“Record”(录象)按钮开始录象。录象过程中点工具条上的“Stop”按钮可以中断录象。
  5. 如果需要录制指定范围的图像,可以点工具条上的“Start position”(起始位置)、“End position”(结束位置)来设置录象范围,然后点“Period Record”(区间录象)按钮。
  6. 如果希望录象结果保存为JPG文件,在录象前别忘了点击工具条上的“Option”按钮,选择“Save as JPEG”选项。
  7. 如果需要中断录象工作,可以在点工具条中的“Stop”按钮中断后,点“Save”按钮,即可将当前状态保存到INI文件中。下次启动后再点“Load”按钮,即可恢复到上次保存的状态。

我自己截的时候,一般是先用Windows Media Player version 6.4播放AVI,看到好的画面时,先用鼠标点击播放窗口,暂停播放,看一下当前的播放时间,然后到Avi2Jpeg中,拖动滑动杆定位,再开始截。定位的时候如果需要快进、快退,一般点“Prev key frame”和“Next Key frame”,“Next frame”也用,但是很少用“Prev frame”,因为逆向解码实在是太慢了。

二、批量放大

具体操作步骤是:

  1. 在主界面工具条中点“Sacle”按钮,打开Scale对话框。
  2. 选择“Source folder”,再选择“Target folder”。
  3. 选择“Scale rate”。
  4. 点“Begin”按钮,开始放大。
  5. 点击“Reset”按钮可以将参数清空。

三、图像平均

“图像平均”技术的原理是这样的:
从数字信号的角度来看,产生媒体流时有损压缩造成的碎片、毛刺、色块等,可以看做是在正常信号中混入了随机噪声信号,消除随机噪声信号最简单的方法就是统计平均。具体到这里则是:对屏幕上的一个短暂定格来说,人眼看上去可能是同一幅图像,但对媒体流来说,却是多幅近似的图像帧,将这些图像帧全部截取下来,然后对它们逐点取平均,生成新的图像,自然就把偏离正常值的噪声过滤掉。平时正常播放时的画面总觉得比静态画面质量好,其实是人眼自然进行了这种平均处理。

从原理上可知,“图像融合技术”具有以下局限:
1. 可以消除或减低有损压缩算法本身对图像质量造成的影响,但对放大失真无能为力。
2. 从统计角度讲,降噪质量与样本数有关,样本越多降噪效果越好,因此只能处理定格镜头。
3. 从实际使用效果看,碟版动画由于图像比较稳定,因此降噪效果较好;录像带版动画由于磁带变形等会造成图像不稳定,定格镜头中甚至会出现整体画面轻微漂移,因此融合后图像会比较模糊。
4. 最终融合出来的图像质量,不太可能比正常播放时人眼看到的动态效果更好。

具体操作步骤是:

  1. 用ComicsViwer或ACDSee浏览一下源目录下的内容,删除多余文件,只留下与欲截取的定格镜头相关的文件。
  2. 在主界面中点工具条上的“Average”按钮,打开Average对话框。
  3. 选择“Source folder”,再选择“Source files”。为了保证质量,减少后续处理时的信息衰减,选择目标文件时的“Source files”最好选择为“Bmp Files”。
  4. 点“Begin”按钮,开始平均。如果“800*600”或“1024*768”选项被选中,则平均结果会直接放大到所需的尺寸。
  5. 如果需要截取多个定格镜头,在完成一个后将源目录下的所有文件删除,然后重复步骤2~4。
  6. 启动Photoshop,用Automate Batch功能,一次对Tgt目录下的所有图像进行色彩平衡或对比度平衡。
  7. 如果对图像质量要求甚高,可以用Photoshop对生成的图像进行细部编辑。一般我都会进行曲线调节,曲线形状为轻微的S型,上半弧用于消除图像中残留的碎片,下半弧用于巩固边线,使画面上的线条看起来更坚实一些。

注意事项:

  1. 上面说的虽然是“定格”,但是动画片中的定格和一般影片中的定格略有不同,有时候一段连续动作也可以看作几个定格图片的反复重复,如动画片中的对话镜头,经常就是嘴唇在动,其它部分不动。这时有可能经过筛选后取到更多的样本。
  2. JPEG是一种有损压缩算法,反复压缩会造成图像信息的衰减,因此在最后定稿前,建议用无损的BMP格式保存图像,定稿后再转成JPG图像。就我的体会,ACDSee的转换要比PhotoShop好一些,成批转换也比较容易,注意转换时将JPG的图象质量系数设高一点(缺省为65,我一般设为96),否则质量难以保证。
  3. 上面说的直接取平均、放大的方法其实是一种偷懒的方法,因为在原始尺寸下有些图像缺陷是看不出来的。如果要追求更好一点的效果,应该先把样本批量放大,再筛选一次样本,然后取平均。
  4. ComicsViewer的“文件->复制到...”和“文件->复制到上次目录”就是专门为整理图像平均所需的图片开发的,请善用。

四、选项(option)

在主界面工具条中点“Option”按钮,即可弹出Option对话框。

1、录象选项(Record Option)

Record every X frames项指定录象间隔,X=0表示连续录下每一帧,X=1表示隔一帧录一次,以次类推。确实为0。
Save as JPEG表示录象时的文件类型。如果此选项被选中,则录象时截下来的图片都保存为JPG文件,否则保存为BMP文件。缺省为不选中,以免在放大、平均、编辑过程中因为JPG的有损压缩而造成质量下降。
JPEG quality表示JPG文件的质量系数。此值越大,保存的JPG文件质量越好,文件也越大,反之亦然。

2、设置图片浏览器(Viewer)

在截图、放大、平均过程中都少不了用图像浏览器查看图像,如果对系统默认的浏览器感到不满意,可以在Option对话框中,点击Viewer后面的“...”按钮,选择合适的图像浏览器(我一般是选ComicsViewer),然后点OK即可。

五、码率曲线(Bitrate)

一般步骤:

  1. 在主界面工具条中点“Open”按钮,打开AVI文件,这时在画面窗口的标题条上会显示AVI文件的总码率、每妙帧数。
  2. 点“Bitrate”按钮,即可弹出BitRate对话框,显示码率曲线。
  3. 点“Save”按钮可以将曲线保存成png格式图片。点“Close”按钮关闭对话框。

显示处理的码率曲线波动得越厉害,表示片源质量越好;如果波动集中在均值附近,表示片源质量不怎么样。

各统计特征量的说明:

  1. Bitrate Total (kbps)。总码率。这是一个大概的平均数,其实就是文件长度除以播放时间,综合反映视频和音频码率。在realPlayer中显示的码率数与此类似。
  2. Video bitrate(kbps)。这个框中显示的是视频流的统计特征量,包括:
    Average(平均值):码率曲线中采样值的平均数。在压缩的时候设置的视频码率应该与它相差不多。如果设置的码率比这个数大很多,说明压缩的时候码率设置过高,实际片源受质量限制,消耗不了这么多码率。
    Max:码率曲线中的最大值。
    Min:码率曲线中的最小值。
    Coefficient of variation:码率曲线的变异系数,即标准差除以均值。理论上说这个数反映了曲线的波动程度,值越大表示曲线波动得越厉害。

再重复一遍:统计结果的可信度与样本容量有关,因此计算码率的时候,如果文件太短,计算结果可能会不准,因此请不要用长度在5分钟以下的文件进行尝试。

附录A 鸣谢

本程序的的JPEG编码部分采用了Independent JPEG Group(独立JPEG小组)发布的JPEG LIB,图像放大部分采用了Intel Image Processing Library (IPL),具体放大算法参见IPL说明书中的附录B部分。

附录B 版本更新记录

Version 1.04
新增功能:打开AVI文件后,在播放窗口的标题栏上显示AVI文件的总码率、每妙帧数。计算公式为:总码率=文件长度÷播放时间。这个数一般比压缩时在DivX中设置的码率数大,原因很简单:这个数包括了视频和音频的码率数,而在DivX中设置的仅仅是视频码率。
新增功能:计算、显示AVI文件的码率曲线。

Version 1.03
新增功能:批量放大的时候,可以选择目标文件的类型。
功能修正:对PNG文件格式进行提速,虽然生成的文件会稍大一点,但是还是值得的。

Version 1.02
增加对PNG文件格式的支持,不过速度出乎意料的慢。

Version 1.01
图像平均部分改用浮点运算,提高运算精度,减小舍入误差。

Version 1.00
1、增加“Period Record”按钮。
2、更正在Windows XP下定位不准的问题。
3、更正超长AVI不显示时间的问题。
4、更正文件或目录带有空格时,用ComicsViewer显示不正确的问题。

Verion 0.00beta
1、提供AVI的截取功能。
2、提供图像平均、批量放大功能。