2006年8月17日星期四

从YouTube,Google Video等站点下载视频

YouTubeGoogle Video等网站利用新的FLV(Flash Video)流媒体视频技术允许用户在互联网上传播录像,但有时候我们希望把录像保存到自己电脑上,而不是仅仅在网上浏览。Firefox的扩展工具VideoDownloader能够让用户把这些录像下载到本地。下载之后的文件是FLV格式,如果想在一般媒体播放器里看,可以在Linux下用ffmpeg把FLV文件转化成MPG或其他格式:
 ffmpeg -i video.flv -ab 128 -ar 44100 -b 200 -s 320x240 video.mpg
上面命令中,-b表示视频比特率,-ab表示音频比特率,-ar表示音频取样率,-s表示视频画面大小(宽x高)。

2006年8月13日星期日

学用绘图工具MetaPost(二)

  1. 线性方程
  2. MetaPost可以解线性方程。处于从z1z2之间1/3位置的点z3可以表示为:
    z3=1/3[z1,z2]
    z1z2两点的直线上任意一点可以表示为:
    whatever[z1,z2]
    z1也可以用分量表示:(x1,y1)。下面是寻找两直线交点的例子:
    MetaPost代码生成的图像
    beginfig(7);
    z1=(-1.5cm,0);
    z2=(-3.2cm,-2cm);
    z3=(2cm,0);
    z4=(3cm,-2cm);
    z5=whatever[z1,z2]=whatever[z3,z4];
    draw z2--z1--z5;
    draw z4--z3--z5;
    pickup pencircle scaled 4pt;
    draw z1; draw z2; draw z3;
    draw z4; draw z5;
    endfig;
    fig7
  3. 图像里插入文字和符号
  4. label可以在图像里插入文字,后缀lft|rt|top|bot|ulft|urt|llft|lrt分别表示左、右、上、下、左上、右上、左下和右下。另外,通过btex...etex还可以插入LaTeX公式命令。
    beginfig(8);
    a=.8in; b=.6in;
    z0=(0,0);
    z1=-z3=(a,0);
    z2=-z4=(0,b);
    draw z1..z2..z3..z4..cycle;
    draw z1--z0--z2;
    label.top("a", .5[z0,z1]);
    label.lft("b", .5[z0,z2]);
    dotlabel.bot("(0,0)", z0);
    endfig;
    fig8
    beginfig(9);
    numeric u;
    u=1cm;
    draw (0,2u)--(0,0)--(4u,0);
    pickup pencircle scaled 1pt;
    draw (0,0){up}
       for i=1 upto 8: ..(i/2,sqrt(i/2))*u endfor;
    label.lrt(btex $\sqrt x$ etex, (3,sqrt 3)*u);
    label.bot(btex $x$ etex, (2u,0));
    label.lft(btex $y$ etex, (0,u));
    endfig;
    fig9
  5. 用gnuplot和xfig输出MetaPost文件
  6. 常用绘图工具gnuplot和xfig都可以输出MetaPost文件,然后就可以手工编辑,加入LaTeX公式等效果。xfig只要export成MetaPost文件就可以了。gnuplot可以用
    set terminal mp
    set output "filename.mp"
    输出为MetaPost文件。

2006年8月11日星期五

学用绘图工具MetaPost(一)

MetaPost是贝尔实验室的John Hobby基于Knuth的METAFONT设计的一种绘图语言。它适于绘制精确的数学图形,可以方便的生成EPS文件,供插入到LaTeX文档中。

Linux下可以用mpost命令处理编辑好的MetaPost文件,生成EPS文件。生成的EPS文件可以作为图片插入到LaTeX文件中,但是没办法直接用gv等PostScript浏览器直接观看,这里有关于这个问题的讨论和解决办法。另外,可以用mptopdf命令代替mpost,可以解决这个问题,而且可以直接生成PDF文件。

下面是MetaPost的简介。beginfig...endfig之间是绘图命令。实际使用中,好几个beginfig...endfig可以放在一个文件里,文件最后需要有一个end命令。
  1. 画直线和曲线
  2. MetaPost代码生成的图像
    beginfig(1);
    z0=(0,0);
    z1=(3cm,2cm);
    z2=(2cm,4.5cm);
    z3=(0.5cm,3.5cm);
    z4=(1.5cm,2.5cm);
    draw z0--z1--z2--z3--z4;
    endfig;
    fig1
    beginfig(2);
    u=1cm;
    z0=(0,0);
    z1=(3u,2u);
    z2=(2u,4.5u);
    z3=(0.5u,3.5u);
    z4=(1.5u,2.5u);
    draw z0..z1..z2..z3..z4;
    endfig;
    fig2
    beginfig(3);
    z0=(0,0);
    z1=(3cm,2cm);
    z2=(2cm,4.5cm);
    z3=(0.5cm,3.5cm);
    z4=(1.5cm,2.5cm);
    draw z0..z1..z2..z3--z4--cycle;
    endfig;
    fig3
  3. 表示方向的dir和用于循环的for
  4. dir a提供了与x轴夹角为a度的单位矢量。dir 0相当于rightdir 90相当于up,类似的方向矢量还有leftdown
    beginfig(4);
    draw (
        for i=0 upto 7:
          80dir (135i)--
        endfor
          cycle);
    endfig;
    fig4
    beginfig(5);
    for a=0 upto 7:
      draw (0,0){dir 45}..{dir 10a}(6cm,0);
        endfor
    endfig;
    fig5
  5. 改变画笔粗细
  6. beginfig(6);
    u=1cm;
    draw (-u,0)--(u,0);
    draw (0,-u)--(0,u);
    pickup pencircle scaled 3;
    draw (-u,u)--(u,u)--(u,-u)--(-u,-u)--cycle;
    endfig;
    fig6