2011年7月30日星期六

无聊折腾

因为周华健唱了主题歌,所以作为他的死忠粉丝的我打算看 1992 年的香港电影《妖兽都市》……下到的是 mkv 格式,里面是 H264 的视频,国语粤语两个音轨以及正体简体两种字幕, N900 放着吃力,有音画不同步的问题。今天早晨下夜班之前在单位用"格式工厂"转成 mp4 ,转之前三百多 M ,转完将近一个 G 。拷到手机上的时候手欠删了原来的文件。把转好的 mp4 打开一看,忘记调整音轨(我想听粤语的),加上把正体中文的字幕压进去了,非常之不爽,删了。
于是需要回家重新下载再转码了。照着 http://www.douban.com/note/149021873/ 的方法用 Chromium 和 aria2 把电影从迅雷离线拖下来(我虽然是铁杆 opera 党,但是还没蛋疼到非要 hack 那个 cookies4.dat )。在转码还是解包之间纠结,转码还要在 mencoder 和 ffmpeg 之间纠结。从效率上说解包比较快,先试试 mkvtoolnix ,用里面图形界面的 mmg 把两个字幕和国语音轨都删了,没什么用。用 mkvextract tracks 把视频和音频分开了,视频的 fps 是 25 ,音频是 23.976 。找 MP4Box 来打包——它是 gpac 的一部分。运行 MP4Box 提示找不到 /usr/lib/libjpeg.so.62 ,随手 google 了一下,壮着胆子 ln -s /usr/lib/libjpeg.so.8.0.1 /usr/lib/libjpeg.so.62 ,总算跑起来了,但是直接打包依然不行。上述事实证明不转码只是从新打包是没有用的……先尝试 ffmpeg 转码,不过似乎我装的版本里没有打开支持 H264 的选项(?),搞不定,放弃。改用 mencoder "d.h264" -ovc xvid -xvidencopts fixed_quant=2 -o "d.avi" 。用 MP4Box -add d.avi:fps=25 1.mp4 和 MP4Box -add a.aac:fps=23.976 1.mp4 把视频和音频打包进 mp4 ,总算是可以了。
其间走弯路无数,歧路亡羊 N 次……不提了。我就是花钱买了钱包钱包里就会没钱、折腾出电影没力气看的杯具啊……睡觉去了。

--

2011年7月26日星期二

整理了大富翁里妮可的语音~

我没在电脑上玩过大富翁,没什么爱好,不过轩辕剑里我还是很喜欢独孤郡主的,连带着连妮可也很喜欢。
看到《軒轅劍在大富翁》 http://nmouse.com.tw/swd/special/web/swdrich.htm 才知道其实还有不少妮可的语音=w=
找大富翁五就颇费了一番手脚。我下载的是大约 163M 的一个名字叫 RICH5.EXE 的安装包。点开装在 C:\RICH5ADD\ 。
照着《利用 Extractor 提取大富翁语音》 http://tieba.baidu.com/f?kz=689049712 的说法,用 Extractor 解开了 C:\RICH5ADD\PicData\Sound.yjl 。提取出一千来个 wav 文件。按照文件体积排列试听,最后找出来了 20 个 wav 文件: Sound 01199.wav 到 Sound 01389.wav 。
妮可真是好可爱呢~
--

2011年7月17日星期日

猜猜猜,猜编码~

小说也好、歌词字幕也好,中文的就有个编码问题……在 N72 上弄过个 python 脚本,用了 http://www.linuxsir.org/bbs/showthread.php?t=215906 花花的代码,常见的几种编码挨个试,处理的也挺好—— chardet 在 N72 上超~慢的,我也碰不上什么特别变态的编码,不用它。移植到 N900 上时处理目录的部分很开心的丢掉了 os.path.walk ,用上了可爱的 os.walk ~终于不用继续苦逼地困守 python 2.2 了~感动啊~
今天测试脚本的时候忘记加参数,把当前目录也就是 /home/user 下面所有的 txt 文件都转成 utf-8 了……既来之则安之,检查一下有没有转错,于是问题来了~ dosbox 里轩辕剑二的 readme.txt 文件显然是 big5 码的,但是被当成 gb18030 转码了——好吧,那堆乱码竟然还都是合法字符?!囧。之前本来是用 gbk 的,碰到个特殊符号搞不定,改成 gb18030 就过了,没想到合法字符太多也有问题。把 gb18030 改回 gbk 的话就不会误判,但是也无法解码。单独拎出来指定从 big5 转,报错 UnicodeDecodeError: 'big5' codec can't decode bytes in position 3-4: illegal multibyte sequence 。用 leafpad 打开,发现那个位置是个表格符号╔
查到 decode 还有第二个参数,用 str.decode("big5", "ignore") 可以把文件转出来,不过所有的表格符号都消失了。
google " python decode big5 ",在 http://stackoverflow.com/questions/4731684/chardet-apparently-wrong-on-big5 看到了关键字 big5_hkscs 。试了一下 str.decode("big5_hkscs") ,果然对了~内牛满面。
hkscs 的介绍: http://zh.wikipedia.org/wiki/香港增補字符集 。 hkscs 和 big5 的关系大致类似 gb2312 和 gbk ……不过因为先天缺陷反倒是有希望早点退出历史,好事啊~
参考 http://www.cublog.cn/u/9465/showart_433803.html ,我目前的猜编码的顺序是 ("utf-16", "utf-8", "gbk", "big5hkscs", "euc_jp", "euc_kr", "gb18030") ,怎么解码都不会出错的 latin1 就免了吧~

笔记一下, python 能否解特定的编码可以用 codecs.lookup(编码名) 试试。所有支持的编码可以在 /usr/lib/python2.5/encodings/aliases.py 里看到……各种马甲有木有!!!

update 20110718: 测试发现 python 里把 uft-16 放前面会把一些 utf-8 的文件误判成 utf-16 的。所以把猜编码的顺序改成 ("utf-8", "gbk", "big5hkscs", "euc_jp", "euc_kr", "gb18030", "utf-16") 了。等哪天出了 bug 再调整吧~
--

N900 折腾键盘全记录

为X Terminal增加三个特殊而有用的符号 http://www.wda.cn/thread-172-1-8.html
有用度:★★★★☆
理由:即使把 ~ 和 ^ 等特殊符号在键盘上映射出来了,在 xt 里拿组合键用 tab 和 esc 也是挺麻烦的,而且我在别处也不怎么用 tab 和 esc,所以非常重要的。

DOSBOX 键盘 http://www.wda.cn/thread-4612-1-1.html
有用度:★★★★☆
理由:照做之后 dosbox 包括数字键在内的大部分按键都可以用了。不过 esc 还是没有。我的解决方式是运行 dosbox -startmapper ,把退格键映射成 esc 了。反正打错了命令也不会执行嘛~

mscim 自定义颜文字 http://gttnnn.blogspot.com/2011/05/n900-mscim-pinyin.html
有用度:★★
理由:比没有好一些。

N900的方向键增加翻页功能 http://www.wda.cn/thread-1088-1-1.html
有用度:★★★
理由:非常方便~用习惯了之后不用会不习惯=w=

交换FN和shift http://www.wda.cn/thread-483-1-1.html
有用度:★★★
理由:经常打 ctrl+shift+x ,还有下文提到的 m-h-d 里的各种组合快捷键,把 ctrl 和 shift 改在一起之后按起来就方便多了~

m-h-d (Modified Hildon Desktop) http://wiki.maemo.org/Modified_Hildon_Desktop
有用度:★★★★★
理由:增加了各种各样的键盘快捷键。配合 keyboard-shortcut (<- 配置文件就是个 python 脚本,可以非常方便的自己修改按键动作和按键定义),真是键盘党人的恩物啊啊啊~

修改键盘映射的官方文档 http://wiki.maemo.org/Remapping_keyboard
有用度:★★★★★
理由:我把万年用不到的 Z 上英镑符号和 C 上的欧元符号咔嚓了,改成 ^ 和 ~ ,额外的收获是在 mscim 里用 Fn+^ 就可以输入中文标点的省略号。另一个额外收获是发现 ctrl+shift 可以切换 mscim 里的输入法模块(我已经好久好久没用过 scim 了,在家都是用 ibus 的),不过因为已经把各种特殊符号都映射到键盘上了,我把 mscim-tables-symbol 给禁用了。
符号名字对应如下
£ sterling
€ EuroSign
| bar
{ braceleft
} braceright
[ bracketleft
] bracketright
< less
> greater
~ asciitilde
` grave
% percent
^ asciicircum
esc Escape
tab Tab

我的主键盘区映射配置。在 /usr/share/X11/xkb/symbols/nokia_vndr/rx-51 里大概是第 380 行左右的位置。
xkb_symbols "english_base" {

// 1. row
key <AD01> { [ q, Q, 1, 1 ] };
key <AD02> { [ w, W, 2, 2 ] };
key <AD03> { [ e, E, 3, 3 ] };
key <AD04> { [ r, R, 4, 4 ] };
key <AD05> { [ t, T, 5, 5 ] };
key <AD06> { [ y, Y, 6, less ] };
key <AD07> { [ u, U, 7, greater ] };
key <AD08> { [ i, I, 8, bar ] };
key <AD09> { [ o, O, 9, bracketleft ] };
key <AD10> { [ p, P, 0, bracketright ] };
key <AB08> { [ comma, semicolon, equal, percent ] };

// 2. row
key <AC01> { [ a, A, asterisk, asterisk ] };
key <AC02> { [ s, S, plus, plus ] };
key <AC03> { [ d, D, numbersign, numbersign ] };
key <AC04> { [ f, F, minus, minus ] };
key <AC05> { [ g, G, underscore, underscore ] };
key <AC06> { [ h, H, parenleft, parenleft ] };
key <AC07> { [ j, J, parenright, parenright ] };
key <AC08> { [ k, K, ampersand, ampersand ] };
key <AC09> { [ l, L, exclam, braceleft ] };
key <AB09> { [ period, colon, question, braceright ] };

// 3. row
key <AB01> { [ z, Z, asciicircum, asciicircum ] };
key <AB02> { [ x, X, dollar, dollar ] };
key <AB03> { [ c, C, asciitilde, asciitilde ] };
key <AB04> { [ v, V, slash, slash ] };
key <AB05> { [ b, B, backslash, backslash ] };
key <AB06> { [ n, N, quotedbl, quotedbl ] };
key <AB07> { [ m, M, apostrophe, grave ] };
key <SPCE> { [ space, space, at, at ] };
};
其中第四列是 shift+Fn 再加按键所打出来的字符,写程序常用的字符基本就齐了。
可以把 ctrl+Fn 映射成 Esc 或者 Tab ,但是需要同时按下去,对调了 Fn 和 shift 之后操作不怎么方便,所以我无所谓了。

--

2011年7月7日星期四

N900 comix 修改配置后不能启动

在 N900 上用 comix 看漫画,随手修改了配置之后就不能启动了。从命令行启动报错
Nokia-N900:~$ comix
Traceback (most recent call last):
File "/usr/bin/comix", line 11880, in <module>
Comix()
File "/usr/bin/comix", line 11747, in __init__
self.prefs['stored hide all values']
ValueError: need more than 4 values to unpack

/usr/bin/comix 是 /opt/comix/bin/comix 的链接。这是个 python 脚本……真好,别的我还真不会。
从初始化来看 self.prefs['stored hide all values'] 应该是 5 个元素的元组,后面看应该分别代表滚动条、菜单栏、工具栏、状态栏是否显示。但是 self.prefs['show menubar'] 只在配置修改的过程里出现了一次,其他地方完全没有用到,我也没看到有菜单栏显示出来过,大概是移植到手机上的时候没有剪裁干净。
root ,把原来的 comix 备份成 comix.bak,修改之。改完对比如下。

Nokia-N900:~$ gdiff -u /opt/comix/bin/comix.bak /opt/comix/bin/comix
--- /opt/comix/bin/comix~ 2011-07-07 11:44:05.000000000 +0800
+++ /opt/comix/bin/comix 2011-07-07 11:45:57.000000000 +0800
@@ -165,7 +165,7 @@
'use stored thumbnails': 1,
'use stored archive thumbnails': 0,
'hide all': 0,
- 'stored hide all values': (0, 1, 1, 1, 1),
+ 'stored hide all values': (0, 1, 1, 1),
'no double page for wide images': 0,
'lib window width': gtk.gdk.screen_get_default().get_width() * 3 / 4,
'lib window height':
@@ -11741,7 +11741,7 @@

# Set the bars visibility according to the preferences.
if self.prefs['hide all']:
- self.prefs['hide scrollbar'], self.prefs['show menubar'], \
+ self.prefs['hide scrollbar'], \
self.prefs['show toolbar'], self.prefs['show statusbar'], \
self.prefs['show thumbnails'] = \
self.prefs['stored hide all values']

现在就正常了……
嗯……继续看耽美漫画去了~
--