Mpeg2Jpeg:Save frames in a MPEG file into JPEG files, then enhance them with image average technique, or enlarge them with cubic interpolation.

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

前言
使用说明
    一、制作自己的电影连环画
    二、制作壁纸
附录A 鸣谢
附录B 版本更新记录

前言

我不知道自己对动漫算不算狂热,但每次在看动画的时候,一看到其中豪华、感人、很Q的画面,我都会忍不住想截下来制成壁纸,永久保存;在看某些经典漫画的OVA时,我也希望能够转换为可以仔细欣赏的静态图片系列,作为漫画收藏的补充。开始时我当然是和大多数人一样,用超级解霸2001进行录像,用Photoshop进行放大。但在尝试过几次后,我发现存在以下问题:

  1. 由于MPEG本身是有损压缩算法,因此一般从VCD上截取下来的画面画质都比较差,在轮廓边缘部分容易产生碎片、毛刺,人物脸部、背景等部分则会产生色块。解霸最得意的技术之一就是它播放时的软件滤波、平滑算法,但是不知道为什么,解霸截取的图像质量比它播放出来的差太多,而且明显偏色。
  2. 壁纸通常的尺寸是800*600,大的到1024*768,而VCD的画面尺寸为352×240,也就是说,需要放大到3倍以上。Photoshop采用的放大算法似乎考虑的是速度而非质量,因此放大到2倍以内还凑合,再往上就很吃力了。而且从VCD截取的画面如果不处理直接放大的话,原画面中的碎片、毛刺等也会被同步放大,看起来会更惨。
  3. 解霸录像是顺序录像,不能跳跃,而且保存的文件是最占空间的BMP文件,不太适合进行长时间的录像。

最终我还是决定开发自己的专用工具:

  1. 能够按照指定的范围间隔,将MPEG文件(VCD)中的图像帧保存为BMP文件或指定质量的JPEG文件。此功能与超级解霸录像功能的详细比较见使用说明部分。除制作壁纸外,此功能也被我用于制作自己的电影版连环画。TV版动画一般和漫画原著很相似,但OVA版的动画一般没有对应的漫画,因此我认为用此工具制作的OVA版漫画,还是有收藏价值的。幸好大部分VCD均有中文字幕,可以省掉写说明的麻烦。
  2. 采用“图像平均”技术,对从VCD中截取的画面进行补偿,达到壁纸质量。平时制作壁纸时,一般是从画册、封面、卡片等来源扫描,但这些来源毕竟有限,而VCD的资源要更丰富得多。
  3. 能够将指定目录下的所有文件批量放大到2倍、3倍,或800*600、1024*768。由于本程序采用三次样条插值技术对图像放大造成的失真进行补偿,可以获得比Photoshop 6.01更好的放大效果。不过Mpeg2Jpeg没有图像处理功能,如果需要编辑图像,请用Photoshop等图像编辑工具。

但程序在使用时也有以下限制:

  1. 由于采用Intel Image Processing Library (IPL)完成图像放大功能,本程序只能在支持MMX指令集的机器上运行。
  2. 由于色彩还原技术的限制,制作出来的图像只有在24位或32位真彩环境下才能获得最佳观赏效果。如果您的显示设置是16位增强色,效果将和您的显卡质量有关。
  3. 由于读盘部分有点烂,直接读取光盘时慢得令人难以忍受,因此强烈建议将VCD盘上MPEGAV目录下的DAT文件从光盘拷贝到硬盘,不仅可以显著提高读取速度,还能顺便检查光盘是否可读,更可以节约光驱寿命,何乐而不为?
  4. 本程序的雏形形成得比较早,因此只能支持MPEG 1和MPEG 2格式的VCD,对新近流行的RM、MPEG4格式的支持将由本程序的继任者--MediaCam完成。

如果您能够提供更好的MPEG解码、图像平滑的算法或源码,或者是发现程序的bug,欢迎与我联系

注意:

Mpeg2Jpeg是一个Freeware,因此您没有为它付费的义务,也没有使用它的义务,更没有更改它或它的附件的权利;我没有为Mpeg2Jpeg提供服务的义务,也没有为使用Mpeg2Jpeg的后果承担责任的义务。但如果您喜欢它,您可以在不更改任何信息,也不添加、删减任何附件的情况下,出于非商业目的对它进行复制。如果要将它用于商业目的,或在您的网站对它进行转载,请与我联系,否则保留追究一切责任的权利。

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

使用说明

一、制作自己的电影连环画

启动 Mpeg2Jpeg 后,显示出主对话框界面,一般操作过程是:

  1. 在“需转换的文件”框中,点击“选择”按钮,选择源文件(需转换的MPEG文件)。如果文件读取成功,左上角的logo图案会被文件中的第一帧图像所代替。
  2. 如果需要调整图像的亮度,调整结果只有在开始播放时才能表现出来。一般我都会将亮度设为110~120。增加亮度可以减少图片中的碎片、色块,但是图像色彩会有所损失。
  3. 设置转换范围,包括从第几帧开始,到第几帧结束。点“播放”按钮可以播放MPEG文件。
  4. 在“转换后的文件”框中,点击“选择”按钮,选择保存截取的文件的目录。
  5. 设置文件名前缀。新文件的命名规则为:前缀+帧序号.后缀
  6. 根据截取图像的用途,设置帧间隔和文件格式。帧间隔有两种模式,一种是“只保存帧内图像帧”,另一种是不管帧的类型,每隔N帧保存一次。缺省为每帧都保存,保存格式为BMP,相当于解霸的录像功能,这是为制作壁纸设定的,对于制作连环画来说可能太浪费了。我一般是选择“只保存帧内图像帧”,在筛选时如果发现缺少合适的图像,再针对片段逐帧录像。
  7. 如果有需要,可以先对解码后的图像进行平滑处理,然后再存盘。平滑的副作用是某些图像可能会变得模糊,放大后就更模糊。缺省不进行平滑。
  8. 在“主要操作”框中,点击“开始转换”按钮即开始保存图像。保存过程中点“停止转换”按钮可以终止保存过程。
  9. 点击“参数保存”框中的“保存”按钮,可以将对话框中的所有当前参数存盘,下次启动时点“调入”按钮即可恢复到上次保存时的现场,便于连续工作。点击“重置”按钮将使所有参数恢复成缺省值。
  10. 转换完成后,可以选择“批量放大”功能进行放大,然后用ACDSee或ComicsViewer进行浏览,挑选合适的图片,组成情节连贯的连环画。ComicsViewer中的“复制到上次目录”功能就是专门为此目的而设计的。

小知识:MPEG图像流中的三种主要帧类型:

  1. 帧内图像帧(I帧):不参照任何过去的或者将来的其他图像帧,压缩编码采用类似JPEG压缩算法。
  2. 预测图像帧(P帧):使用两种类型的参数来表示:一种参数是当前要编码的图像宏块与参考图像的宏块之间的差值,另一种参数是宏块的移动矢量。
  3. 双向预测图像帧(B):计算方法与P帧的算法类似,但需参考前、后两个方向的帧。

有关MPEG的更多详情参见MPEG.ORG多媒体技术及应用 — 课程学习

与豪杰超级解霸的录像功能相比,Mpeg2Jpep的图像抽取功能具有以下长处:
1. 既可以保存为无失真的BMP,又可以保存为高效率的JPEG,并且可以指定隔多少帧存一次,因此节省磁盘空间,适合长时间录像。甚至可以将整部VCD存盘,再逐帧挑选,当然您的硬盘空间必须足够大。
2. 具有现场保存/恢复功能,较长的VCD如果一次存不了,可以先存一部分,保存现场,下次恢复现场后继续保存。
3. 具有自动重新编号功能,在连环画制作完成之后,可以重新编排文件序号。
4. 保存的图像不会象解霸保存的那样出现偏色。

但也有以下不足:
1. 容错能力不如解霸的Direct CD,因此请不要噙着冷笑,怀着虐待的快感,用烂盘来考验本程序的可靠性。
2. 图像平滑能力稍差,至今我也找不到“四分滤波”的算法,看来应该是梁肇星博士的原创了。
3. 读盘部分有点烂,直接读取光盘时慢得令人难以忍受,只能从硬盘读。
4. 没有速度控制,在慢机器上是慢镜头,在快机器上是快镜头。但我想应该不会有人用Mpeg2Jpeg看电影。

二、制作壁纸

“从VCD画面制作壁纸”,相信每一个对动画、CG有兴趣的DIYer都曾有过这样的梦想,但是一般都因以下技术性问题而失败:

  1. 从VCD中直接截取的画面质量通常很难令人满意,毕竟MPEG是针对运动图像而非静态图像的。
  2. 常用图像处理软件一般只能支撑2倍以内的放大效果,而壁纸要求3倍左右的放大能力。

为此,Mpeg2Jpeg采用了如下的解决方案:

  1. 采用图像平均技术对画面进行补偿。
  2. 采用比常用的线形插值更高阶的三次样条插值技术,实现大比例放大。

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

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

具体操作步骤是:

  1. 启动Mpeg2Jpeg,准备截图。这部分操作和前面的操作差不多:打开源MPEG文件,设置亮度,选择存放截下来的图片的目录(这里假设为Src目录)。与制作漫画不同,这里有几个选项务必选上:a. “存为BMP”,b. 保存间隔为“每1帧保存一次”。
  2. 截图,获取足够多的样本:跳转到适当的情节处,点“开始转换”按钮,定格镜头一过就点“停止转换”按钮。
  3. 用ACDSee浏览一下Src目录下的内容,删除多余文件,只留下与欲截取的定格镜头相关的文件。
  4. 点“主要操作”框中的“图像平均”按钮,弹出“图像平均”对话框。
  5. 在弹出的对话框中,先将“源文件所在目录”选择为Src目录,再选择“目标文件”,最好是在Tgt目录下的某个文件。为了保证质量,减少后续处理时的信息衰减,选择目标文件时的“保存类型”最好选择为“Bmp Files”。
  6. 点“开始”按钮,开始平均。如果“800*600”或“1024*768”选项被选中,则平均结果会直接放大到所需的尺寸。
  7. 如果需要截取多个定格镜头,在完成一个后将Src目录下的所有文件删除,然后重复步骤2~6。
  8. 启动Photoshop,用Automate Batch功能,一次对Tgt目录下的所有图像进行色彩平衡或对比度平衡。
  9. 如果对图像质量要求甚高,可以用Photoshop对生成的图像进行细部编辑。一般我都会进行曲线调节,曲线形状为轻微的S型,上半弧用于消除图像中残留的碎片,下半弧用于巩固边线,使画面上的线条看起来更坚实一些。

注意事项:

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

为了造福对Photoshop不熟悉的兄弟,这里再以英文版Photoshop(兄弟从来不用汉化版本)为例,详细说一下用Photoshop的Automate Batch成批处理图像的步骤:

  1. 在使用Automate Batch之前,必须先创建一个Action:新建一幅空白图像;点“Window->Show Actions”菜单项,在屏幕右下角显示出Actions选项卡,点底部工具条上的“Create New Set”按钮,创建一个名为“Set 1”的set;点“Create new action”按钮,创建名为“Action 1”的action,点“Record”按钮开始记录操作步骤;点“Image->Adjust->Auto Levels”或“Auto Contrast”菜单,进行色彩自动平衡或对比度自动平衡;点“Actions”选项卡底部的黑方块按钮,终止记录。这时可以看到在Action 1下面多了一个Image Size项。关闭空白图像,不存盘。
  2. Action创建后,可以多次使用。如欲对Src目录下的所有文件进行色彩平衡,则操作步骤为:选择“File->Automate->Batch”菜单项,弹出“Batch”对话框;“Play”框中的Set项选Set 1,Action项选Action 1;Source框选“Folder”,点“Choose”按钮,选择源目录为Src;Destination框选“Save and Close”;点“OK”按钮,然后就会看到Photoshop逐个打开Src目录下的所有文件,平衡,存盘,并关闭文件。

如果你能够坚持看到这里,没有被吓跑,那么我再告诉你一个tip:我截图时一般是用解霸播放,看到值得一截的地方时先暂停,然后在Mpeg2Jpeg的“当前帧”中输入解霸显示的播放时间,如“0:10:12”,然后点“跳转”按钮跳过去。

附录A 鸣谢

本程序的MPEG解码部分采用了Dongge LiIshwar K. Sethi编制的MDC库,解码后YUV转RGB部分则参考了豪杰公司豪杰超级解霸2.0源代码,JPEG编码部分采用了Independent JPEG Group(独立JPEG小组)发布的JPEG LIB,图像放大部分采用了Intel Image Processing Library (IPL),具体放大算法参见IPL说明书中的附录B部分。

附录B 版本更新记录

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

v1.40
1. “图像融合”更名为“图像平均”,以符合专业习惯。
2. 为批量放大、图像平均对话框增加参数记忆/恢复功能,使操作更简便。

v1.31
1. “批量放大”增加“x3”选项。
2. 用户如果选择BMP格式,则界面上“JPG质量”项失效。
3. 错误修正:播放时如果选择间隔保存,则程序会因为被0除而退出。

v1.30
1. 增加“批量放大”功能,能够一次将指定目录下的所有图像放大到指定尺寸。
2. 在“图像融合”功能中增加图像放大功能。
3. 引进Intel Image Processing Library (IPL),完成所有图像放大功能。从此本程序只能在支持MMX指令集的机器上运行。
4. 重写软件说明书。

v1.22
1. 增加对16位色BMP的支持。
2. 补充了“制作壁纸”部分的说明。

v1.21
错误修正:“图像融合”功能不能对32位BMP进行操作。

v1.20
1. 增加了“图像融合”功能,专门用于从VCD、RM、MPEG4制作壁纸。这个技术的来历很偶然:我对用Mpeg2Jpeg制作壁纸一直念念不忘,但是长期以来一直解决不了图像质量问题,前段时间到清华FTP定购漫画刻录碟时,顺便到清华书店去转了一下,看了几本白书,无意间从一本教材上看到用统计平均消除随机噪声的介绍,马上茅塞顿开。
2. 增加对BMP文件的支持。

v1.10
1. 增加了“只保存帧内图像帧”功能。
2. “图像平滑”参数的缺省值从“强”改成了“无”。

v1.01
对mask滤波算法内核进行了优化,稍微加快了存盘速度。

v1.0
提供播放、保存、保存范围指定和现场保存/恢复功能,支持MPEG和JPG格式。