Saturday, December 27, 2008

quicktime?Slowtime!

现在觉得QT所谓“追随工业标准”就是个商业噱头而已。。QT6的时候出了个压不出ASP profile、速度慢、可选项少、效果很一般的Quicktime MPEG4编码器,不过解码其实还可以(假设容器是.mov的话)。9系统、10.1-10.2系统上基本看不到几个mov封装的MPEG4文件,大多数都是用divx doctor之类的东西从avi转过去的(另外quicktime avi组件的问题相信使用过的都知道,好像只是VFW1.1标准,AVI里的mp3、ac3音频编码根本不行,后来divx和现在的perian都开发了替代的AVI组件,解决了这个问题)。论性能,当初divx5比Quicktime MPEG4快;编码上,quicktime mpeg4和设置好的divx、3ivx以及现在的xvid是根本无法比的。
到了H264称王的时代,苹果出了QT7。QT的H264在QT7.2之前根本就无法解码大多数实际遇到的Main profile的H264 MP4文件;就算是7.2支持了,那个解码效率,不和硬件解码、coreavc比,和libavcodec里的h264都没法比。编码么,quicktime h264和mpeg4有一样的毛病,没有几个可选项,一次只能占用一个CPU,而且也只能压出simple profile。iPod、iphone只能支持simple profile的h264,看来qt的人也认为所有的人都不需要用qt来压出他们。因此,和良好设置过的x264相比,qt的h264在相同码率、都是 1pass的情况下几乎不堪入目。
另外,在网络上低码率mp4中HE-AAC横行的时候,只支持AAC-LC的解码(编码就懒得说了)也不太好说。
熊猫本系统里的qt755总算支持了NV的h264硬件加速,这是个好事。Quicktime X是jobs在某次公开雪豹存在的会上说的,通过全硬件加速,应当会把解码性能提高一个数量级吧。而当初MPEG4的问题,至今还是那个样子。
QT的多种编辑用codec倒一直很强大,用到这点的那些软件是jobs赚大钱的部分,qt组当然不会怠慢了。
QT还有个大问题是它抛不开789系统时代的那些古旧代码。最初QT是给6系统写的,pascal代码还是占主要部分。不过在qt2.1还是2.5的时候 QT组必须把QT全部代码都移到PPC平台,以前的东西都改写成C了。qt基础部分由于和系统结合很紧,到了OSX的时代和以前几乎就没有联系了;但是问题是那些8、9系统时代写的编码解码器,就不那么好全面翻新了。有些是根本不能全面翻新(比如sorenson、qdesign、purevoice之类从别家公司授权来的编解码器,苹果没有多少权利去进行大幅度修改和优化),有些则是因为过于古老没人用,qt组懒得去翻新(比如什么cinepak、 imadpcm一类)。还有刚才说过的AVI组件,这个大概是97年底98年初qt3的时候做的,当时apple估计只是把这个当作当时QT“兼容性”的一个宣传工具,以后应该是没有怎么更新过。后面还有flash 4、flash 5支持(7.3.1废掉了),这个也自从qt5之后就再也没有过任何更新,也许是因为当时realplayer搞了flash支持,apple只是跟一下风。这一系列古董代码,全部是用老的OS9 toolbox,或者后来稍作修改改成carbon,来编译出来的。相对于9系统到carbon,carbon到cocoa是非常复杂的,阿多币、M$搞了7年都没搞定,qt组估计看着屁股后面这一大堆的老codec,估计心有余而力不足了。qt7终于加上了一个控制QT的cocoa api QTkit,但是实际上它还是得用那些carbon的库来实际实现quicktime功能。iphone的osx没有carbon,这点大家可能都清楚;iphone能播放mpeg4、h264 simple profile的视频,播放mp3、aac、alac、pcm的音频,我认为应当是把整个qt底层移植到了cocoa。jobs应当把这个为同属于OSX 的iphone os开发的新框架移植到mac的osx上来(也许qt组已经作了一两年甚至4年以上,也许这就是quicktime X)。至于那些古董codec,我认为qt741默认隐藏它们的编码功能,qt731废掉flash5支持,其实就是为了quicktime X将彻底不支持那些古董做准备。这样,也许qt就不再是slowtime了。

不过,QT最大的问题还是跨平台后的性能问题。当初qt1-2的时候,apple请一家小公司移植了少部分7系统API,做了个只能播放视频和支持少部分从mac移植的软件,没有什么其它功能的qt1-2 forwin;后来这个小公司和intel、m$合作,最终导致了苹果历史上与M$的第二场大官司(第一件是win2.0的外观与感觉案)。后来jobs 和M$谈判把这两个官司私了了,但估计还是怀恨在心还是怎么的,QTWin虽然变成apple自己制作,但是其性能和稳定性和在自己系统上相比,完全是一个天上一个地下。看看mplayer、mencoder,在win上性能比在老家linux上还要好;苹果就不很厚道了。不知道quicktimeX的 win版会有什么大变化,希望速度上有所提升,但是又不要加更多从OSX移植的东西。safari win其实性能并不差,不过它太OSX化(连quartz字体渲染都搞过来)了。苹果的人不知是故意还是怎么,把Win版苹果软件的界面设计得和win环境不协调(safari中出现了OSX的滚动条和按钮),这点也不知以后会怎么发展。
无聊乱敲了这么多字,其实也就因为一个文件转得太慢而已。希望quicktime X能真正quick吧。
追记:qt731干掉flash5的问题,影响到了那么一些在qt影片里用flash搞互动内容的洋人。当初imac g3有几个宣传片就有flash的互动内容在里面。

这篇文章纯属用qtpro连续出现crash之后的牢骚,别看得太重。