qyb的博客

XviD 压缩后文件大小不符合预期结果的原因和解决方法

Oversized/Undersized explanations - Doom9's Forum 翻译而来

XviD 论坛有一个问题被反复提出:压缩后的文件大小和和指定的大不相同。本文试图解释文件大小不一致的原因,并指出解决之道。

让我们从基础知识开始,要知道弄明白问题发生的根源后就离解决它很近了。

基础知识

1. 量化
XviD 属于有损压缩,即它会把一些认为无用的画面细节忽略掉。每一帧画面会指定一个 quantizer (中文翻译为"量化因子"),然后据此进行压缩。
那么:
量化因子为 1("Q1") 意味着最高质量的图象和最大的文件(高码流)

量化因子为 31("Q31") 意味着最低质量的图象和最小的文件(低码流)

我们的目标是尽可能高的质量,以及尽可能低的码流...
=> 通常不用 Q1 做压缩,因为码流太高了(如果要备份 DVD,还不如保留原始的 MPEG-2 流)

Q2 则能得到很好质量的图像,而且比 Q1 来要小很多(quality/bitrate并不是线型的)。MPEG-4 被设计为低码流应用(相比较 MPEG-2 而言),我们可以假定对于 XviD 压缩来说,Q2 就是最高质量的压缩了。

2. 文件大小

相同的量化因子前提下,不同的视频源压缩后的大小也是不一样的。有的容易压缩,而高分辨率、大量细节、快速动作、明暗变化大的电影则很难压缩。

3. two-pass 压缩(或写成 2-pass)
为了在指定文件大小的情况下得到最大的质量,XviD 提供了 two-pass 处理模式。
- 首先固定量化因子为 2 压缩一遍,产生一组参考数据(stat 文件)

- 根据参考数据进行二次压缩,编码器不断调整码流来优化整体质量

那么就产生了三种情况:
● 1st pass 得到的文件比预料的大,在 2nd pass 压缩中编码器就不得不采取更高的量化因子
● 1st pass 得到的文件比预料的小,那么 2nd pass 中编码器就会在某些帧用 Q1 进行压缩

● 1st pass 得到的文件和预料的一模一样...当然从统计学上来说这是不可能发生的,而且这种情况下我们也不用再继续讨论了

现在问题发生了

有的视频太容易被压缩了(或者说 1st pass 得到的文件比指定的要小很多),于是过多的 Q1 帧被产生,但这会扰乱编码器的码流控制系统,最后就得到了一个 oversized 结果。

oversize的解决方案

1. overflow treatment 设置的调整
该设置被用于在 2nd pass 压缩中,设定码流控制进行调整的强度。取值越大,越能有效平衡 Q1 帧。
那么我的建议值是:
("Encoding type" > Two-pass - 2nd pass > "more...")
- overflow control strength: try 10 or 20
- Max overflow improvement: try 10 or 20

- Min overflow degradation: try 10 or 20

2. Quantizer capping
很简单,就是避免 XviD 用 Q1 压缩。
把每种帧类型[I/P/B]的最小量化因子都设成 2 (最大值还是保留 31)
1.1.0-final 之前是
("Advanced option" > Quantization),
从它以后是
("Quality preset" > Userdefined > "more..." > Quantization)

这样就不再会得到一个超大文件了。但...这种方式也导致根本不再有提高质量以得到预期码流的余地了。

除了上述两种编码器相关的解决方案,其实还有更好的思路:我们的目的是填充剩余的空间,那么就可以用更高的分辨率,更高的音频质量,更高质量的定制矩阵...等等

undersize的解决方案

从上面说的去举一反三吧...

如何提前预料到文件大小无法控制呢?

上面已经提到,1st pass 将产生一个日志文件,里面就包括 Q2 压缩结果的大小。那么如果这个数字和你预期的相差非常远,就很可能发生该问题了。

怎么看到 "size" 信息呢?

用 StatReader 打开该日志文件就可以看到了。该程序被包含在 official release 里面(比如 Koepi build)

Topic: 技术

I18N & L10N

I18N 本来是 hacker 们使用的一个缩写,这里用来表达企业的"国际化"

让我们把眼光放到软件业,想想你机器上现在安装并且每天都在用的,中国人写的软件有哪些...我这里汇报一下我的:MaxthonFlashGet、金山词霸、紫光输入法。去掉后两个纯粹是 L10N 的软件,我的最爱里面就只剩下了两个来自中国的软件,而且恰恰,它们可能是中国人所做出的最为国际化的软件!

我这里的要点在于,国际化,也就是 I18N,是这两个软件成功的关键。而那些被我枪毙掉的国产软件,不管过去再如何辉煌,最后仍然在外来软件的冲击下倒掉。

推论:你想创建一个可以持续发展的软件项目吗?如果你做的不是词霸或者输入法,那么就得在合适的时候考虑一下软件如何 I18N 吧

回到互联网服务业。既便你在从事一项看似完全本地化的服务,完全不必担心五年内有外国人和你竞争,可是果真如此吗?

那天老冒抱怨,Java 程序员极为难招,市场上充斥着烂人。aha,我最近招聘的经历完全印证了这个事实。那好程序员都到哪里去了呢?

我的另一个要点是,即使你觉得你从事的业务和 IBM、Moto 没有任何竞争关系,但是在人力资本市场上,你确实是在和巨头们在竞争着的。我这里可以透露一个数据,Moto 给它的一个中国的外包公司,每个合同工大约要付 3.4 万美元/年,那么你想想 Moto 自己的中国员工,一年的人力成本是多少?

我知道在中国开展软件和服务业务有多困难,盗版、习惯免费的用户. etc,etc. 但是为什么不去运营一个全球性的业务呢?不管别人怎么说华为和联想,至少它们在这一点上是所有中国 IT 企业的榜样.

最后是我的想法:
1. 软件开发者和startups,能不能从一开始就把眼光放到全球运营上呢? 现在互联网如此发达,跨越国界似乎不是太大的障碍。
2. 即使缺乏分销的渠道,是不是可以考虑挑选国外的合作伙伴呢?
3. 其实做外包也不错,成为全球价值链中的一环,也能学习到很多东西

4. 上述前提是已经有能力提供 L10N 质量标准的软件和服务,中国已经有优秀的企业和工程师完全有能力做到这点并更进一步,Maxthon 是很好的例子,我这里并不是白日做梦。

怕就怕连"追求质量、关注用户"的 L10N 基本目标都达不到,这个就太可悲了,活该被淘汰掉。

Topic: 商业

facebook 看上去碰到了麻烦.

几乎要错过 slashdot 上和 facebook 相关的一篇讨论,似乎 facebook 的用户对它最近引入的几个新功能相当的不满意,让我们看看Facebook, Stop it是怎么说的:

1. 首先一件不爽的事情就是让高中生加入,让用户感觉被出卖(sell out)。要知道 "got your e-mail address from your new college" 可是个人成长中的一件大事

2. facebook 允许 global 的 group .. (还没有特别弄明白这件事情怎么和 makes facebook less personal to our individual colleges 联系起来)

3. 对更新后的搜索功能不满意. (似乎是新的搜索系统会返回更多的结果, aha, facebook 当然期望你在这里面能结识更多的人,带来更多的 PV 啦.)

4. 给照片打 tag 或许很酷,但本需要更多的改进后再上线

5. Notes 功能..(也不明白)

6. 最后,也是最严重的就是 feed ! 现在 facebook 的 feed 功能可以让人全面的跟踪好友的行踪. No one wants their girlfriend or boyfriend knowing when they've commented on a photo, written on a wall, or anything else. No one wants people to see that they've left a group; it could offend someone. No one really wants to see the change in status of someone's love life.

其实我觉得从这里学习到的核心的并不是上述 6 点抱怨,而是用户认为的社区成功的关键: Facebook used to be cool because it was down-to-earth, and it was run by students just like us. Now, we're unimportant, and events in our social lives are known as "stories." (不再重视用户隐私,或者说用户使用感受了)

下面有些评论和作者的回复也颇有意思:
you are entirely correct in that the usage of facebook is a privilege and not a right, and yes, we are also well aware that it is their website. That being said, we are also customers of the facebook website. This is not to be interpreted as the traditional customer who with money he or she has earned; we pay facebook with one simple thing: Our time. They monetize this time by displaying ads. It's as simple as that. We are "paying" customers in that we give Facebook our time, and as such we have every right to complain when we are not happy about the service we receive.

注:我还另外写过一篇关于 facebook 的文章可供参考
再注:最近学习english,九月的第一个周一是 Labor Day,或者说传统的 summer vacation 结束的日子。没想到 facebook 的新学期是以这样一种惨淡的方式开始的。

Topic: 商业 网络

今天看 slashdot

gnome 2.16 发布、MIPS/IRIX 即将退出舞台。

感觉最近 solidot 的人气下降了很多. 也没有什么心情把这些新闻贴出来了。

其实 100k 确实便宜,但委实没有太好的商业模式,而且团队前段时间的彷徨会让社区成员更加迷茫。即使它有了新主人,想挽回颓势也是相当的困难。

昨晚和老冒在 gtalk 上聊了好多东西,深深感到,管理团队太重要了。

Topic: 技术

blog 的功能

cathayan 发表了一篇回归Blog的本源. 说说我的blog历史.

我本来最初是以一个企业blogger的身份进入中文blog圈的。很快就迷上了这件事情,后来发现越来越难以在个人和企业之间平衡,于是就换成了 dup2.org,一个纯粹是私人的空间。

为企业而blog需要个人对企业目标具备强烈的认同感;当然也需要老板的支持,在工作时间以外为企业写 blog 实在是一件很难的事情;最好,能有2位以上的同事和你一起来做这件工作。有了这些,创建一个成功的企业 blog 不是问题,很遗憾,我最后实在难以继续下去。

为个人而写纯粹就是表达的需要了。我觉得自己可以写的东西有好多..问题是没有时间来书写,或者是觉得自己缺乏表达的技巧。而且需要端正写 blog 的态度——访问量再小,读者再少,如果你不坚持,就永远丧失了这么一个和别人交流的机会,也丧失了让未来成长的自己和过去对话的机会——这两件事情都是人生最有意思的东西之一。

我最近还发现 blog 的另外一个功用,就是学习英语!发现 BBC 有两个很有意思的learning english blog,一个是学生的,一个是教师的。除了昨天刚刚订阅两个英文世界里以写作闻名的 IT 业者的 feed 外,偶也开始了自己的英文 blog 了(不知道什么时候才会被 google 收录,呵呵)。还是那句话,千里之行始于足下,"A journey of a thousand miles begins with a single step"。

Topic: 网络

为什么要保持专注

"保持专注",这是所有创业者都会说的一句话,但是真正能做到的实在是少之又少。以前讨论这个专题通常都认为有助于建立竞争优势,这里从另外的角度分析一下"保持专注"的必要性。

先来分析公司的组织形态。从市场经济的角度看,公司存在的合理性是因为它以和其成员某种集中签订契约的形式(包括法律的和精神的),降低了单个人之间相互建立合约而组织生产的成本和风险。反过来看,如果维护一个公司和其员工所订契约所需的成本和风险超过了该组织内个人之间彼此建立合约的成本和风险,那么这个公司就已经没有存在的必要。

把多个员工统一成一个整体,必须通过企业文化来达到目的。我们可以看到越是大型的企业,越是具备相当强的企业文化传播和复制能力。但企业文化是需要时间、人力、金钱的投资,才能积淀下来的,对初创企业来说,认准并保持一个单一的业务模式不仅仅是为了在竞争中取得优势地位,而且会大幅度减少在维持人力需求方面的成本和风险。

员工和员工之间会越来越熟悉,但员工和公司之间,会彼此越来越失望。随着互联网的兴起,尤其是 blog、SNS 的出现,使得人和人之间沟通交流的障碍和成本正在被大大缩小,现代的公司组织形式也将面临越来越严峻的挑战。在经济上生存下去(获得利润)并不是最终目标,而必须在法理(契约成本)上也能证明自己的根本价值。

Topic: 商业

Man in the mirror


这两天在家收拾房子,随手放的 CD 是 M.J 的 "BAD",正好和前不久的国米写真吻合,遂找张贴出来 show 一下堪比蒙娜丽纱的微笑 (千万不要 puke 到键盘上)

关于 Man in the mirror 的歌词还是挺有意思的,宣扬爱和行动

That's Why I Want You To Know
I'm Starting With The Man In The Mirror
I'm Asking Him To Change His Ways
And No Message Could Have Been Any Clearer
If You Wanna Make The World A Better Place
Take A Look At Yourself, And Then Make A Change

这是 1988 年的单曲,不晓得 M.J 现在看着镜子会是什么感觉?

"年轻时我们冲镜子做鬼脸,年老后镜子冲我们做鬼脸",这是今天刚看到的话。很有意思..写点东西配合一下:
好多傻气的念头
好多傻气的问题
到嘴边都变成祈祷
因为我应该表现的成熟
而且我想到有更悲伤的梦

超级腐败..

周四晚上去超级腐败了一次,后来看帐单,平均每人的消费额是 250¥(对,我没有弄错,不是后面多写一个 0,也不是前面多写一个 2),不过在一张优惠券的帮助下,只付了一点小钱就顺利逃脱了...

这就是位于东二环华润大厦顶层的美洲俱乐部。华润大厦号称是二环内最高的建筑,那这个餐厅也可以说是全北京视野最好的餐厅——整个 CBD 都在你的脚下,确实感觉当富人不错,hoho。

既然好不容易去这里腐败一次,当然点的还是西餐。服务生推荐了牛排,但是价钱严重超出预算,只好很俭省的去看那些标价 1xx 的主菜。服务生个子不高,但气质绝对比我们吃饭的几个更像上流人,不晓得 15% 的服务费他能拿到多少。

美洲俱乐部的菜单比较有意思,分主客两种——给客人的菜单上是没有价格的。于是不幸分配到客人菜单的根本没有了点菜的心思,只好面露微笑,装作内行的慢慢浏览。

最后偶要了是鹅肝(138¥),好小的一块,而且很腻,如果不是还供应免费的面包,当晚肯定要饿肚子了。另外还要了黑方,估计也就 1 杯底,收费 40 ¥,杀人啊。

最后总结:如果要正常吃好的话,大概平均一人应该是 300 ¥的预算,不过如没有该俱乐部的会员身份,估计还很难混进去。下回再去,一定要份牛排来吃,哼!!

Topic: 生活

本 blog 系统更新了!!

更新到最新的 drupal 4.7.3。现在增加了如下模块
captcha: 防止垃圾评论
geshifilter: 格式化代码, 可以看看python代码的效果
service_links: 在每篇文章下面增加一个 "delicious | digg | technorati" 的链接

similar: 相关文章. 查看每篇文章的时候自动在左侧提示相关文章, 看起来还挺智能.

qyt 制作了 favicon,一朵"BT 的花";以及相关动态图标(在 firefox 下才能看到效果),超级酷!

本人在 bluemarine 的基础上, 稍稍变化了一下, 做了一套新的模板.. 那些用 rss reader 订阅的同志们, 请上来看看评论评论..

DV-2-XviD 0.6 发布

见本站项目DV-2-XviD

0.6 版本解决了老版本只能同 XviD-1.1-beta2 协同工作的问题... 这个让人尴尬的 bug 拖到现在才解决实在是抱歉. 也因此觉得这个软件的可用性现在高了很多,这才敢放出来公开供人下载.

计划下面需要解决的问题依次是:
a. 文件大小/码流的精确控制
b. 对目标文件各项参数的配置

c. wxPython 相关问题

不过以上目标暂时要搁置了....

下面要集中精力, 早日完成我的手机同步程序。最近又免费弄了一部早期的 S60 机 (Nokia 3650), 正好又多一个测试设备.

Topic: 技术
订阅 RSS - qyb的博客