26
2011
用mencoder把外挂字幕内嵌到视频中
我的手机档次低,只支持MP4格式,不支持外挂字幕。下的好多外国片都是外挂字幕(或是mkv内置字幕)的,所以想把字幕直接加到图像上。
根据网上的搜索,得到下面一条命令:
1 2 3 4 5 6 7 8 9 | mencoder 输入文件 -o 输出文件.mp4 \ -oac lavc -ovc lavc -of lavf \ -lavcopts aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=180 \ -lavcopts acodec=libfaac \ -af lavcresample=8000 \ -vf harddup,scale=320:-10,unsharp=l3×3:0.7, expand =320:240 \ -ofps 16 -lavfopts format =psp -srate 22050 \ -sub 字幕文件 -font 中文字体路径(如 /usr/share/fonts/TTF/ukai .ttc) \ -subfont-text-scale 字号(5就可以了) -subcp 编码(utf8可省略) |
...
25
2011
开源与非开源,支持与不支持
有些开源软件支持者:仇视M、鄙视甲骨文、讨厌Mono和Java,恶心Flash,只用开源软件。我对“绝对自由”实在是不怎么感冒。实用的就是最好的,无所谓开源不开源,自由不自由。C#好就是好,不是因为M。Flash纵然再烂,但依旧广泛使用。
我觉得Debian挺难用的,因为她太“自由”了。官方仓库找不到Flash,找不到N卡闭源驱动…… Ubuntu就很好,她并不排斥闭源软件,闭源的解码器、“受限驱动”都收纳进了软件仓库。Arch也很不错。
开源是为了什么?虚幻的自由理想吗?那可就太无聊了。我觉得开源的好处,一方面是吸引了更多的开发者,一方面是为用户提供了更大的定制空间。所谓“理想”,当不了饭吃,换不来支持,更吸引不来用户。纯粹为了自由理想而开源,就和我朝N年前为了平等瓜分了所有富人的财富似的——最后只剩一堆穷光蛋。...
10
2011
让中学生学 Visual Basic 简直害人
我国的中学信息学教育,教的编程语言是Visual Basic。我觉得,虽然VB学起来简单,但用VB入门就是坑害小童鞋啊。
其一,VB上来就是GUI编程,掩盖了很多的编程基础知识。学了VB的同学,看到我用C语言写出来的“DOS程序”,还觉得十分落后。恐怕初学者学了VB后,实在是无法接受其他“只能写出DOS程序”的语言了吧。
其二,VB宽松的语法不利于培养编程习惯。VB不用声明变量,又是弱类型,字符串都能和数字相加,给了编程者太多的自由。过度宽松的语法,可能导致各种意想不到的问题。编程习惯的重要性,就不多说了吧……
其三,VB是Windows-only的(虽然有个gambas什么的移植VB到Linux,但可以忽略之)。真正的程序员,不能烂到Windows一辈子吧。学个C/C++、Python什么的,好歹也到处能用。...
10
2011
凸包郁闷死我了
郁闷啊郁闷,写了两个凸包的题目,都折戟在一两个NB数据上了。
tyvj上P1462的程序,赤果果的求凸包。自己写的Graham扫描法,极角顺序,从最下最右的点开始:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | #include <stdio.h> #include <stdlib.h> #include <math.h> #ifndef M_PI #define M_PI 3.14159265358979323846 #endif typedef struct { double x, y, tg; } coord; // 算极角 inline double calc_tg ( const coord b, const coord n) { double ret = atan2 (n.y-b.y, n.x-b.x); return ret >= 0 ? ret:ret+2*M_PI; } // 判断是否左转 #define tleft(a,b,c) \ (((b).x-(a).x)*((c).y-(a).y)-((c).x-(a).x)*((b).y-(a).y) <= 0.0) // 快排之比较 int comp ( const void *pa, const void *pb) { const coord *a = ( const coord*)pa, *b = ( const coord*)pb; if (a->tg > b->tg) return 1; else if (a->tg != b->tg) return -1; else return a->x > b->x ? 1:-1; } int main () { int n, i, stktail; coord *p, **stk, minc = {0.0, 1.0E22}; // 读入数据 scanf ( "%d" , &n); p = malloc (n* sizeof (coord)); stk = malloc (n* sizeof (coord*)); for (i=0; i<n; i++) { scanf ( "%lf %lf" , &(p[i].x), &(p[i].y)); if ((p[i].y < minc.y) || ((p[i].y == minc.y) && (p[i].x < minc.x))) minc = p[i]; } // 求凸包 for (i=0; i<n; i++) p[i].tg = calc_tg(minc, p[i]); qsort (p, n, sizeof (coord), comp); stk[0] = p; stk[1] = p+1; stk[2] = p+2; stktail = 2; for (i=3; i<n; i++) { while (stktail >= 1) { coord *base = stk[stktail-1], *last = stk[stktail]; if (tleft(*base, *last, p[i])) stktail--; else break ; } stk[++stktail] = p+i; } while (stk[stktail]->tg == stk[stktail-1]->tg) stktail--; // 按要求的顺序输出 int st = 0; double minx = stk[0]->x; for (i=stktail; i>=0; i--) { if (stk[i]->x < minx) minx = stk[i]->x, st = i; else break ; } i = st; do { printf ( "%.4lf %.4lf\n" , stk[i]->x, stk[i]->y); if (--i < 0) i = stktail; } while (i != st); return 0; } |
运行结果:...
10
2011
e4rat:大幅提升Linux开机速度
警告:此软件仅限原生ext4文件系统使用。其他文件系统以及从低版本升级的ext4文件系统用户不要使用,否则将导致灾难性后果。本着负责的态度,先Warning。
e4rat是个好东西。其原理大致是(我猜的):通过磁盘整理有序化开机要加载的文件,并在系统启动阶段把数据预读到内存,充分使用内存和IO资源。
AUR上大家的溢美之词:
...
9
2011
孟母三迁,我也三迁
最开始我的Blog在Live Space。
后来Live Space关闭了(真是莫名其妙),转移Blog到Google App Engine。
半年后,GAE被盾。
悲悴地沉默一年,发现这里了。这个不会被XX了吧?我不谈郑智 - -
GAE那个,能翻墙的话,还是可以访问的。以前的文章都在那里:
http://cuihaopy.appspot.com/...
snack 发表于 Mon, 20 Jun 2011 23:03:28 +0000