qyb的博客

AVI 介绍

计划把这一年多以来业余作 Python 相关开发的一些知识整理一下,这是第一篇。

迄今还记得第一次看到的 AVI 文件,在 windows 3.1 上,一个邮票大小的窗口里,一个人(男女实在看不清楚)在滑帆板。那是我们不知道从哪里弄来的一个软件包(当然现在知道是一个 VFW 驱动)里面附带的一个 sample,宣称装了这个东东后计算机就进入多媒体时代;随着后来 .dat/.mpg (VCD) 的流行,对比下 avi 给我的印象就成了落后,低质量的代名词。

进入 BT 时代后,突然就发现下载来的电影文件几乎都是 avi 文件,通常是 700MB,就拥有不输于 DVD 4G 容量的数据所包括的音视频质量。就有了这么一个疑问——AVI,它到底是个什么玩意儿。

专业的回答是这样的:AVI 是一种容器(container)格式。通常来说没有把音视频一起编码的方案(用大脚趾都能想到同时编码的效率一定不高),而是独立编码,然后打包在这样一个容器里面,做成一个单独的文件供人使用。播放的时候首先将容器里包含的不同的数据流分离出来(splitter),再交给不同的引擎(Codecs)去解码(decode),播放器还得根据容器包装的规则让视频音频能同步起来。我们现在使用的那些 avi 文件准确说是包括了 XviD/DivX 压缩的视频流和 AC-3 or MP3 音频流的 container .. 随 XP/2000 提供的缺省多媒体附件包括一个 avi 的 splitter,以及一个 mp3 的 decoder。只要再安装一个 XviD 的解码器和一个 AC-3 的解码器基本上就可以看所有的影片了。

事实上 rmvb 也是一个 container,无需 real 播放器,有一个 rmvb splitter 和合适的 codecs,就可以在任何支持 dshow 的播放器欣赏 rmvb 了;DVD 上的 .vob 就是另外一种容器,里面除了 MPEG-2 图象和 DTS/Dolby 音频外,还会包括 n 条字幕流。

言归正传,qyb 为什么要研究 AVI 格式呢?因为在 DV-2-XviD 这个软件的功能里面,有个需求就是从 DV 抓取的 AVI 文件里面,获取拍摄该视频当时的时间。我要作的事情一是把视频流从 AVI 里面分离出来,然后再从视频流里面获得保存在里面的时间戳。

网上很容易可以搜索到一篇关于 AVI 格式的文档(链接是一个 pdf 文件!),它组织的很好,是我一开始起步时的主要参考,但后来处理 >1G AVI 文件的时候感觉这篇文档描述并不清楚。最后还是依靠这篇完成了 avi 分析部分。

本期科普工作到这里结束,计划下一期简单汉化一下 AVI 相关文档... 可能更类似程序文档吧。

Topic: 技术

Onmyōji


呵呵,也用一次搞怪的标题... Onmyōji (陰陽師, 或者说 Yin-Yang Masters),

前两天一口气把梦枕貘的阴阳师看完, 确实是一部"抓人的小说", 非常精彩不忍释卷. 前言里面提到的鲁迅评《三国》里的诸葛亮:"状诸葛之多智而近妖" .. 呵呵,鲁迅是不是因为深深受日本文化影响,所以才有这样的结论呢?反正在光荣的三国志英杰传里面就叫妖术师;还有玩PS2上的三国无双,里面关于诸葛的CG画面羽扇纶巾,说不出的妖异。日本对这类人物事件的解析还是挺独特的。

鬼故事能写到这个份上,已经是极至了。其中的灵异事件未必很扣人心弦,但作者把平安时期的文化风貌刻画的精致飘逸. 不耐心看源氏物语的,可以从此小说一窥当时的贵族生活。上网搜了搜关于这本小说的信息,发现谈论电影的也大有人在,尤其是大家对狂言师野村万斋饰演的安倍情明更是赞不绝口,不由得生了极大的好奇心,想弄张 DVD 来看看这个号称可以媲美于张国荣的美男子.

关于阴阳师这个很有前途的职业,很早很早以前看《东京巴比伦》的时候就知道了,现在只记得那个叫皇昂流的阴阳师很 COOL,几乎都要忘了里面还有暧昧的同性爱. 小说《阴阳师》里面主角也是两个男人,关系虽然比较隐讳,但从作者强烈要求野村万斋来演电影来看,他还是觉得需要强调一下这两个男人之间的感情吧。不得不承认日本文化的骨子里就有赞赏男子美和同性之爱的强烈倾向。

Topic: 文化 生活

亲历索尼维修服务


很久以前买的 SONY 摄像机 19E 突然坏掉,回放没有问题,但拍摄就全部变形成绿色的竖条纹,简直可以免去后期制作直接开拍午夜凶铃。这摄像机自从泰国归来后就一直没有拍过,我只好将其归罪于北京最近糟糕的天气。

坏了总是要修的,先前已经有过一次去维修的经历,当时说开机检测费就要 200。现在只能怀着忐忑不安的心情,再次杀往位于魏公村的索尼北京技术服务中心

在经过漫长的排队后,客服 MM 看了摄像机的故障现象,说可能是 CCD 坏了,或者是什么其它的问题,如果是 CCD 坏的话可以免费更换,因为已知有一批 SONY 的老机器是有问题的;如果我可以等 20 分钟,就现场做检修,若确认是 CCD 问题,那么立刻就搞定,否则就等修好了再来取。然后很专业的卸下了我的电池,给我一张单子,上面注明维修机器的当前状态:"带 UV 镜和镜头盖,机身有划痕...",我签字确认以后就把机器包好送到了快修室。

索尼的快修室就在前台大厅的一侧,可以透过玻璃看到维修的全过程。于是紧张的看着维修人员很熟练的把我的 DV 大卸八块,焊下 CCD,然后再焊一个新的(或者也只能算良品),测试,哈,很快结论出来,果然是 CCD 故障,于是整套维修服务全部免费。

后来看我的维修单,收费情况是:配件费 105,维修费 220. 费用为索尼承担。在前台大厅还有一张今年5月出台的价目表,关于 DV 的费用是检测费 50,清洁、更换外围附件的人工费用是 250,维修的人工费用是 350;DC 相关的人工费用分别是 200/300。比较起去年维修 Nikon 4300 的经历,发现 SONY 的服务要透明优秀得多,怪不得柯美退出数码相机业务后,把自己的维修服务转包给索尼。从另一张说明上看,快修服务(针对 DC 和 DV)只提供到下午 3:00,确保当天就可以拿到修好后的产品;但我的摄像机去修的时候已经下午 5:00 了,可能是因为我的情况比较特殊吧,也不知道快修服务需要另加多少钱。

我是周六去的,我拿到的号是 177,等我走的时候已经有人排号到 200 了,4 个接待席在马不停蹄的工作。在我等待的1个多小时过程中,绝大部分是 SONY 电脑,其次是 DC、DV. 其它的我只看到一台电视和一台音响。仔细算算,感觉人们使用数码电子产品,维修率还是蛮惊人的.

说实话,本来我是有些鄙视 SONY 的 DC 产品的,可经过这么一次比较爽的维修过程后,感觉再买新 DC 也未必非 Canon/Nikon 不可。当然,从各种媒体上都能看到电子产品维修需要天价的维修费用,也包括索尼,说不定这次只是运气比较好而已.. 是不是以后 DC/DV 这类消费数码产品也会出现 DELL 那样的三年全保服务呢?

Topic: 商业 技术

发现一个软件 Jokosher

不用我多说,看了这张图片就应该知道它是做什么用的了.

以前这类开源软件好像只有 Audacity (有 win32 下的安装包). 在 jokosher 论坛上有人批评 Audacity 对 MIDI 支持不够好..

总之,用 pyGTK 开发,采用 gstreamer 框架,这些都是我所喜欢的东东,所以 Linux 下玩音乐制作的朋友们,这里推荐一下. 哪天我也试试 remix 一个黄建翔解说 MP3. 嘿嘿

Topic: 技术

万里开源

我是在搜索 mysql 的一个功能的时候发现 mysql 居然有了官方的中文手册,然后顺藤摸瓜,知道这个手册是万里开源这个公司提供的。

从缺乏创意的名字,这个公司实在无法在第一时间内获得我们的尊重,但它却是 MySQL 在中国的金牌合作伙伴,真是让人大跌眼镜。在 google 上搜索,关于这个共创Turbolinux 合作产物的介绍是少之又少,首页也是很没有诚意的 "Under constructing....",直接输入 http://greatlinux.com 更是直接去了 turbolinux,不由得让人们对其是否能承担 mysql 金牌合作伙伴(可能还是中国大陆唯一)这一使命而心存疑虑.

但无论如何,对于中国现在如火如荼的以 MySQL 开始其基础架构的创业公司而言,现在有了一个可以近距离获得现场支持的可能,另一方面,这类基于开源产品的专业服务也是中国难能可贵的尝试。至少万里开源的血统还算高贵纯正,如果您确实在担心存储在 MySQL 中的数据有一天可能突然无法访问,那么可以考虑联系一下万里开源,看看他们的实力和姿态是否足以打动你们的 CIO。当然价格也是需要考虑的因素,MySQL 的白金服务也不过 5000$/Year,不晓得万里开源是怎么定义其服务项目和收费标准的。

虽然我得承认我个人并不喜欢它,但这里还是先为其鼓掌吧。

==================================================
后记:这样的写作风格是不是所谓的华尔街体

Topic: 技术

We are the Champions

是在周六到天津的火车上读报的时候知道这条消息.

这个冠军来的有些尴尬?

我可不这么认为。至少我们一直在足球场上 keep on fighting till the end, 所以 no time for losers cause we are the champions - of the italy

不管怎么说,莫拉蒂和扎队配得上这个冠军奖杯

我对新赛季的最大愿望现在改成,超过 Milan 9 分夺冠.

Topic: 运动

用免费工具 VC Toolkit 2003 编译 Mozilla Firefox 1.5

由于编译过程中需要生成的临时文件 xpidl.exe 要链接 glib 和 libIDL,对应 MOZILLA_1_8_BRANCH 来说,用 vc8 链接它们有些问题(Visual C++ 2005 Express Edition),需要的 patch 都在 trunk 里面。所以如果是编译 Firefox 1.x,1.5.x,甚至以后的 2.0.x 的话,最好还是用 Visual C++ Toolkit 2003

但另一方面,Visual C++ Toolkit 2003 是一个很不完整的开发平台,欠缺不少编译需要的工具和库,下面是我的编译环境配置过程,供参考:
1. 安装 Visual C++ Toolkit 2003,30兆安装包.
2. 安装 .NET Framework Redistributable Package version 1.1,20兆安装包(当然可能你的 XP 在升级过程中已经具备了这个环境)
3. 安装 .NET Framework SDK version 1.1,100 兆安装包
4. 安装 Platform SDK. 我半年前只有"Microsoft® Windows Server 2003 SP1 Platform SDK - April 2005 Edition",现在最新版是"Windows Server 2003 R2 SDK - March 2006 Edition". 我只安装了:
 Configuration Options(但没有安装 Register Environment Variables)
 Microsoft Windows Core SDK(Tools、Build Environment、Redistributable Components)
 Microsoft Web Workshop (IE) SDK(只安装了 Build Environment)
5. 安装 MASM32,半年前是 8.2,现在最新版本是 9。免费下载,3兆安装包。这包里面提供了 ML.EXE 和 DUMPBIN.EXE 是编译需要的
6. 下载 moztools-static.zip ,以及 vc71-libIDL-0.6.8-bin.zip、vc71-glib-1.2.10-bin.zip. 安装方法为:
 6.a 解压 moztools-static.zip 到 C:\moztools
 6.b 解压缩 vc71-libIDL-0.6.8-bin.zip、vc71-glib-1.2.10-bin.zip. 比如到 C:\vc71 目录
7. 安装 cygwin,除了缺省包以外只需要
 Devel 类别下选:patchutils, make 3.80 (not 3.81!)
 Interpreters 类别下选:perl
 Archive 列表下选择:zip, unzip

 安装完以后把 cygwin 环境里面的 link.exe 改个名字,因为路径上可能有冲突

基本上免费工具就这么多了,但是还是缺,需要 hack.....
1. VC Toolkit 2003 没有缺省带 lib.exe, 要获得有两个方法
 1.a 要么是安装 Platform SDK 的时候选择 Microsoft Windows Core SDK -> Tools -> Tools (AMD 64-bit) 来获取
 1.b 而我当时看到 64bit 就害怕,就自己创建了一个 lib.bat,内容为:
  link /lib %*
 然后修改 mozilla 关于 lib.exe 的相关配置
  修改 configure、nsprpub/configure,寻找 ""AR=lib"" 以及 ""HOST_AR=lib"" 的地方,修改成 lib.bat
  修改 security/coreconf/WIN32.mk,寻找 ""AR = lib"",修改成 lib.bat
 以上方法参考链接
2. 生成 msvcprt.lib (在 Cygwin 环境下..)。
 进入 ""C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin"",执行
  echo ""LIBRARY msvcp71.dll"" >msvcprt.def
  echo ""EXPORTS"" >> msvcprt.def
  dumpbin /exports msvcp71.dll | awk '{ if (FNR > 19 && $4 ) print $4}' | sed -e 's/\r//' >> msvcprt.def
  link /lib /def:msvcprt.def
  mv msvcprt.lib ../lib

 参考 链接

在 cygwin 自己的 home 目录下创建 .mozconfig
. $topsrcdir/browser/config/mozconfig
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/my_firefox
ac_add_options --enable-optimize
ac_add_options --enable-crypto
ac_add_options --enable-static
ac_add_options --disable-shared
ac_add_options --disable-debug
ac_add_options --disable-tests
ac_add_options --disable-activex
ac_add_options --disable-activex-scripting
ac_add_options --disable-xpconnect-idispatch
ac_add_options --disable-accessibility

ac_add_options --disable-test

设置编译所必须的环境,比如创建一个 vc71.bat 文件
@echo off
rem --- Basic config, with VC7 libIDL files
SET MOZ_TOOLS=C:\moztools
SET GLIB_PREFIX=C:\vc71
SET LIBIDL_PREFIX=C:\vc71

SET CYGWINBASE=C:\cygwin

rem --- Clean slate start
SET INCLUDE=
SET LIB=

SET PATH=C:\;C:\windows\system32;C:\windows;C:\windows\system32\wbem;

rem --- Then prepend Cygwin path

SET PATH=%CYGWINBASE%\bin;%PATH%

rem --- Set VC7 compiler environment vars

CALL ""C:\Program Files\Microsoft Visual C++ Toolkit 2003\vcvars32.bat""
CALL ""C:\Program Files\Microsoft Platform SDK\SetEnv.Cmd"" /XP32 /RETAIL

CALL ""C:\Program Files\Microsoft.NET\SDK\v1.1\Bin\sdkvars.bat""

rem --- Add glib/libidl to build environment
SET PATH=%PATH%;%GLIB_PREFIX%;%GLIB_PREFIX%\bin
SET INCLUDE=%GLIB_PREFIX%\include;%INCLUDE%;

SET LIB=%GLIB_PREFIX%\lib;%LIB%

rem -- moztools comes last after glib/libIDL

SET PATH=%PATH%;%MOZ_TOOLS%\bin;C:\MASM32\bin

bash --login -i

最后执行这个 bat 进入编译环境,进入 mozilla 源代码目录,

 make -f client.mk build

如果编译过程中报告什么没有 comsupp.lib,可以打个 patch 让程序不去找它.
参考http://www.koka-in.org/~zophos/SideB/daytripper/index.rhtml?date=20050208
--- browser/components/build/nsModule.cpp.orig 2005-02-07 14:50:22.350250000 +0900
+++ browser/components/build/nsModule.cpp 2005-02-08 18:34:08.470375000 +0900
@@ -58,7 +58,7 @@
#include ""nsPhoenixProfileMigrator.h""
#include ""nsSeamonkeyProfileMigrator.h""
#if defined(XP_WIN) && !defined(__MINGW32__)
-#include ""nsIEProfileMigrator.h""
+//#include ""nsIEProfileMigrator.h""
#elif defined(XP_MACOSX)
#include ""nsSafariProfileMigrator.h""
#include ""nsOmniWebProfileMigrator.h""
@@ -89,7 +89,7 @@
NS_GENERIC_FACTORY_CONSTRUCTOR(nsProfileMigrator)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSeamonkeyProfileMigrator)
#if defined(XP_WIN) && !defined(__MINGW32__)
-NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEProfileMigrator)
+//NS_GENERIC_FACTORY_CONSTRUCTOR(nsIEProfileMigrator)
#elif defined(XP_MACOSX)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSafariProfileMigrator)
NS_GENERIC_FACTORY_CONSTRUCTOR(nsOmniWebProfileMigrator)
@@ -136,11 +136,10 @@

nsProfileMigratorConstructor },

#if defined(XP_WIN) && !defined(__MINGW32__)
- { ""Internet Explorer (Windows) Profile Migrator"",
- NS_WINIEPROFILEMIGRATOR_CID,
- NS_BROWSERPROFILEMIGRATOR_CONTRACTID_PREFIX ""ie"",
- nsIEProfileMigratorConstructor },
-
+// { ""Internet Explorer (Windows) Profile Migrator"",
+// NS_WINIEPROFILEMIGRATOR_CID,
+// NS_BROWSERPROFILEMIGRATOR_CONTRACTID_PREFIX ""ie"",
+// nsIEProfileMigratorConstructor },
#elif defined(XP_MACOSX)
{ ""Safari Profile Migrator"",
NS_SAFARIPROFILEMIGRATOR_CID,
--- browser/components/migration/src/Makefile.in.orig 2005-02-07 14:50:22.787750000 +0900
+++ browser/components/migration/src/Makefile.in 2005-02-08 09:00:43.763625000 +0900
@@ -84,8 +84,7 @@
ifeq ($(OS_ARCH)_$(GNU_CXX),WINNT_)

DEFINES += -DPSTOREC_DLL=\""$(subst \,\\,$(WINDIR))\\system32\\pstorec.dll\""

-CPPSRCS += nsIEProfileMigrator.cpp \
- $(NULL)
+CPPSRCS += $(NULL)

endif

ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))

Topic: 技术

微软的免费 C++ 编译器

虽然已经有 CygwinMinGW 的 gcc/g++,但在 Win32 平台下,被广泛接受的还是 Microsoft 的 VC。而且 firefox、python 这样的重量级开源项目,win32 平台上的二进制版本,也仍然是用 VC 系列编译的.. 因为 VC 更加稳定.

在当今一片免费开源的潮流下,微软也为贫穷的程序员们提供了免费 VC 工具,先后是 "Visual C++ Toolkit 2003" 和 "Visual C++ 2005 Express Edition". 或者说 "VC 7.1" 和 "VC 8".

现在在 Visual C++ Toolkit 2003 的主页上,下载链接已经被去掉,转而劝告人们使用 Visual C++ 2005 Express。但实际上,VC 7.1 还是很有用处的,比如 Python 2.4 和未来 Python 2.5 的扩展编译都应该在 7.1 下完成。

这里提供一个下载使用 vctoolkit 2003 的方法,去 google 上搜索 VCToolkitSetup.exe,还是很有一些下载链接的... 它的 MD5SUM 为: 90d8b963ca196aa9855b2ca6c3174c14

计划下篇 blog 介绍用免费工具编译 firefox , sigh.. 还是很麻烦的. 大半年前试着编译了一下,然后顺手更新Mozilla developer center 上的中文版 Windows Build Prerequisites. 好像国内在 win32 上编译 fx 的很少很少的说.

Topic: 技术

恶狼家族

现在达达接触的故事类型越来越丰富,反派典型大灰狼出现的频率慢慢增高。有时候我会恶狠狠的吓唬她:“我变成大灰狼了”,同时模仿杨丽萍活动五指,扭曲面部作狰狞状。

这套把戏玩多了以后,当我再次如法炮制的时候,她说:我是狼宝宝,我愣了一下,就不再吓唬她了。从此她乐此不彼,给家里其它人都冠以狼的称呼:狼妈妈、狼奶奶、狼小姨、狼叔叔... 还有狼姥姥,我纠正她,应该是狼外婆. ^_^

后来作为狼爸爸就和狼宝宝一起玩抓三只小猪的游戏。当然我们是很有智慧的狼,每次吹倒两座房子吃完两只小猪后,就决定放过第三只小猪,不去爬那个烟囱了.

昨晚回家,她已经决定不当狼宝宝了。要当三个和尚——她是小和尚、奶奶是胖和尚、妈妈是瘦和尚... 我想了想,觉得只剩下小老鼠这个角色分配给我了,于是自告奋勇当小老鼠.. 结果她就冲我喊,“不许偷吃蜡烛”,然后拉着瘦和尚要踩小老鼠. wuwuwuwu....

Topic: dada
订阅 RSS - qyb的博客