存档

‘计算技术’ 分类的存档

nginx 防盗链插件 nginx-accesskey

2008年11月26日

按照官方配置安装后都会出现错误,看了半天源码又在网上转了一圈找到了一个补丁,又出现编译错误,修改了源码才完成编译,试了一下功能很好用。

http://www.ieesee.net:8080/~uingei/nginx-accesskey-2.0.3.diff.bz2

下载上面的补丁文件,进入nginx的目录然后执行:

bzcat ../nginx-accesskey-2.0.3.diff.bz2 | patch -p1
/configure –with-http_accesskey_module …
make
make install

我使用的是centos,编译时提示有未使用的变量 clcf,打开源码将 ngx_http_core_loc_conf_t       *clcf; 这句删掉,然后编译通过。
我配置的0.6.33 也没有问题

我的网站

鼠标点击行为统计

2008年11月24日

       尝试了一下鼠标点击行为统计,关于统计其实很简单,onclick触发行为通过后台的http请求将屏幕宽度、点击点的X、Y坐标点传到服务器。关键的问题是点击点的显示,由于用户分辨率都不同所得到的x、y点相对位置也不同。

      在实际应用中我们需要生成一个鼠标点击点和页面整合得到一张图片。那如何处理上面的相对位置的问题呢,我们现在有用户鼠标点击点的坐标和宽度,如何将所有的点转换为在一个统一分辨率下的坐标值,其实也不是他复杂,针对这个问题想了一个算法:

x¹=(w¹-(w/2-x))+x

其中x¹为新左边点 w¹为新的分辨率宽度

    以上的解决办法只适合网页横向居中的情况,当然在局左的情况下根本也不用处理,靠右的情况下也很好处理,另外Y点在相同的页面上也是没有问题的。

    另一点考虑,是否可以按照板块来处理,比如我的网站里面类似的页面很多,如何将类似的页面结合起来统计,这就带来了页面竖向的问题,因为由于内容的多少的问题页面的高度并不相同,这就很难处理。那么是否可以这样,比如鼠标进入了这一预先设置好的区域内,则根据在这一区域内的相对位置来取得X、Y值,然后在后台将各个区域板块重新组合。

    都是想法,也没具体实现。下图是一个测试。

我的网站 ,

高速内存数据缓存 memcached

2008年11月23日

安装libeven
wget http://monkey.org/~provos/libevent-1.4.8-stable.tar.gz
tar -xvf libevent-1.4.8-stable.tar.gz
cd libevent-1.4.8-stable
./configure
make
make install

安装 memcached
wget wget http://www.danga.com/memcached/dist/memcached-1.2.6.tar.gz
tar -xvf memcached-1.2.6.tar.gz
cd memcached-1.2.6
./configure
make
make install
安装到/usr/local/bin/memcached

linux

nginx apache xcache 效果对比测试

2008年11月23日

安装后我进行了测试以下为测试结果
分别开启关闭xcache 运行两次ab -n 1000 http://bbs.k12zy.com/forum-19-1.html

Server Software: nginx/0.6.33
Server Hostname: bbs.k12zy.com
Server Port: 80
Document Path: /forum-19-1.html
Document Length: 32118 bytes

Time taken for tests: 38.976547 seconds
Requests per second: 25.66 [#/sec] (mean)
Time per request: 38.977 [ms] (mean)
Time per request: 38.977 [ms] (mean, across all concurrent requests)
Transfer rate: 814.16 [Kbytes/sec] received

Time taken for tests: 17.326479 seconds
Requests per second: 57.72 [#/sec] (mean)
Time per request: 17.326 [ms] (mean)
Time per request: 17.326 [ms] (mean, across all concurrent requests)
Transfer rate: 1831.47 [Kbytes/sec] received

那么apache服务器的效果如何呢,又做了测试

Server Software: Apache/2.2.3
Server Hostname: 121.250.15.4
Server Port: 80
Document Path: /forum-19-1.html
Document Length: 32116 bytes

Time taken for tests: 32.138246 seconds
Requests per second: 31.12 [#/sec] (mean)
Time per request: 32.138 [ms] (mean)
Time per request: 32.138 [ms] (mean, across all concurrent requests)
Transfer rate: 988.04 [Kbytes/sec] received

Time taken for tests: 20.6633 seconds
Requests per second: 49.98 [#/sec] (mean)
Time per request: 20.007 [ms] (mean)
Time per request: 20.007 [ms] (mean, across all concurrent requests)
Transfer rate: 1587.17 [Kbytes/sec] received

 其中红色为开启xcache的值

结果来看开启xcache肯定要快,至于apache和nginx的fastcgi来比较缺让人看的不清楚, 只能解释由于第一次测试的是nginx不开xcache可能在数据库端使其变慢,都以一次测试的值也不能算作科学统计,仅做为自己的测试吧。

linux, 我的网站 , , , ,

安装 xcache 加速php

2008年11月22日

在服务器中安装了xcache,来加速php的运行。

关于xcache 可以查看 http://www.ibm.com/developerworks/cn/opensource/os-php-fastapps1/

yum install php-devel

wget http://xcache.lighttpd.net/pub/Releases/1.2.2/xcache-1.2.2.tar.gz
tar -xvf xcache-1.2.2.tar.gz
cd xcache-1.2.2
phpize

./configure –enable-xcache –enable-xcache-coverager
make
make install

得到结果:
Installing shared extensions:     /usr/lib/php/modules/
将配置加入php.ini
cat xcache.ini >> /etc/php.ini

编辑php.ini 将 xcache.so的路径改为  /usr/lib/php/modules/xcache.so
重启fastcgi spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u nobody -g nobody -f /usr/bin/php-cgi
安装 XCache Administration
修改php.ini xcache.admin.pass=”” 为md5(“密码”)的值

复制 admin 文件夹到web目录

浏览器中浏览

启用后居然不管用原来默认配置中xcache.size和xcache.var_size都是0M  改成合适的数值就好

参考:http://www.ibm.com/developerworks/cn/opensource/os-php-fastapps1/

linux, 我的网站 , , ,

nginx 的配置

2008年11月22日

加入了php的支持,nginx使用的是fastcgi。

我使用的是centos5.2系统,其中已经通过yum安装了php,因为不想再自己重新编译了就采用spawn-fcgi的方式来做fastcgi,spawn-fcgi包含在lighttpd,

wget lighttpd

./configure;

make;

cp src/spawn-fcgi /usr/bin/spawn-fcgi

spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u nobody -g nobody -f /usr/bin/php-cgi

加入开机启动

nginx 配置

加入了rewrite来做永久链接

server {
listen 222.132.76.204:80;
server_name www.wangjian.info;
access_log  /export/hd1/weblog/gpsview.access.log  main;

location / {
root /export/hd1/web/blog/;
index index.php;

if (-f $request_filename/index.html){
   rewrite (.*) $1/index.html break;

if (-f $request_filename/index.php){
   rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
   rewrite (.*) /index.php;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /export/hd1/web/blog$fastcgi_script_name;
include fastcgi_params;
}
}
}

OK了,经过感觉,速度好像是快了点。继续测试中。

linux, 我的网站 , , ,

[转]apache 的防盗链

2008年11月22日

NginxHttpAccessKeyModule nginx的防盗链插件

直接用HTTP服务器下载也不是很容易的事。最开始在IIS里面配置,IIS只能设定最大下载速度和最大连接数,这对于一些使用下载工具一来就开50+线程霸道下载的朋友明显是防不住的。网上搜了N久就发现一个用Delphi写的看不懂的ISAPI Filter以及别的收费软件若干。试过之后都起不了作用,也便放弃了,最后发现Apache有这些开源的功能模块,最终打造出完美限制的HTTP下载服务器。

首先说说完美限制的意思:防盗链、限制客户端下载线程数,限制下载带宽。下面一一介绍怎么在Apache里面实现这些功能。

防盗链

传统的防盗链都是通过Referer来判断用户来路的,不过这样的方法对于下载工具来说形同虚设,因为现在的下载工具早就能伪造Referer了。

现在一些流行的防盗链的方式都是用在浏览页面的时候产生一个随机验证码,在用户点击连接的时候服务器会验证这个验证码是否有效从而决定是否允许下载。或者就是用某些方法把文件实际地址进行伪装。不过我觉得这些都不怎么好用,我用了一个简单有效的方式来实现防盗链。

其实就是用Cookie,配合Apache的URL Rewrite模块很简单的就能实现防盗链下载。

首先在浏览页面的时候,会向客户端发送一个特别的Cookie,例如“Site=LeiDown.Com“,盗链而来的将没有这个Cookie。

在Apache的httpd.conf文件里面搜索:

#LoadModule rewrite_module modules/mod_rewrite.so

把它前面的#去掉,再找到<Directory />块,在里面加入类似如下代码:

<Directory />
     # Other configurations …
    RewriteEngine On # 启动URL Rewrite引擎
   RewriteCond %{HTTP_COOKIE} !^.*(?:Site=LeiDown.Com).*$ # 对于Cookie里面没有特殊记录的请求进行重定向
   RewriteRule ^.*$ error.html # 将非法访问重定向到错误页面
</Directory>

这样如果一个盗链而来的请求将会因为没有特殊Cookie而被重定向到错误页面,就算实际地址暴露也不怕。至于这个Cookie的内容是什么以及有效时间完全可以由管理员自己来设定,也就是说下载工具也没法伪造,从而防止了服务器资源被盗链的危险。

限制客户端多线程下载

限制多线程现在需要用到一个Apache的扩展模块mod_limitipconn,这里是作者的官方网站http://dominia.org/djao/limitipconn2.html,先下载适合自己版本的模块文件到Apache安装目录下的modules目录下面,然后在httpd.conf文件中搜索:

#LoadModule status_module modules/mod_status.so

把它前面的#去掉,再加入:

ExtendedStatus On
LoadModule limitipconn_module modules/mod_limitipconn.dll # 如果你下载的不是Win版,请把后面的文件名改为你所下载的文件名
<IfModule mod_limitipconn.c>
   <Location /> # 这里表示限制根目录,即全部限制,可以根据需要修改
   MaxConnPerIP 2 # 这里表示最多同时两个线程
   NoLimit html/* # 这里表示html目录下不受限制
   </Location>
</IfModule>

这样来自同一客户端的超过2个的线程请求将被拒绝,从而限制了客户端的多线程下载。

限制下载带宽

这个同样需要扩展模块支持,模块是mod_bw,在作者的官方网站http://ivn.cl/apache/可以下载到。同样也是放入modules目录下面,然后在httpd.conf文件中加入:

LoadModule bw_module modules/mod_bw.dll

再找到<Directory />块,加入:

<Directory />
   # Other configurations …
   BandwidthModule On # 启动带宽限制
    ForceBandwidthModule On # 启动带宽限制
     MaxConnection all 2000 # 最大连接数2000
   Bandwidth all 200000 # 单个客户端最大带宽200KB
</Directory>

这样限制了同时最多2000个连接数,每个客户端最大200KB的下载带宽。

到此,我们的完美限制的HTTP下载服务器就配置完成了,重新启动你的Apache这些功能便能生效了。因为Apache和这些模块都是开源免费的,我们不需要为此掏一分钱,不用去购买那些第三方的软件,只是需要多去了解一下这些软件的使用说明。不要一切都祈祷有现成美好的东西,自己动手做一次会有不一样的收获。

RewriteLock RewriteLock file-path None 设置RewriteMap程序的同步锁文件 要求是本地文件,此文件只对rewriting map-program有效。 RewriteMap RewriteMap MapName MapType:MapSource Notused per default 定义重写影射 具体说明参见文档 RewriteBase RewriteBase URL-path physical directory path 设置目录范围内重写的基本URL 具体说明参见文档 RewriteCond RewriteCond TestString CondPattern None 定义规则条件 具体说明参见文档 RewriteRule RewriteRule Pattern Substitution None 定义重写规则 具体说明参见文档

备忘录, 我的网站 ,

给vmware esx 添加物理硬盘

2008年11月21日

研究了2950 的 raid卡PERC 5/I 相对还是比较简单的,功能也挺多。

想给esx加快硬盘,先试验性的加了一块,设置好raid卡,进入系统,结果启动到中间就停住了,在touch: /var/*****  readonly model 具体记不清了。解决办法是进入linux命令模式,查看新加的硬盘 fdisk /dev/sdb 记过为ntfs分区,删除分区新建分区,格式化,重启,顺利进去系统。

进入系统后在vi里添加硬盘,结果显示不能读取现在的分区情况,解决办法,进入ssh fdisk发现居然没有分区了那么就添加一个新分区保存退出。然后再到vi里添加就好了。

添加物理硬盘给虚拟机用

进入ssh:ls /vmfs/devices/disks/ 查看新的硬盘名为 vmhba0:1:0:0 

ls /vmfs/volumes/ 查看已有的存储器名storage1

新建映射(Raw Device Mapping):vmkfstools -r /vmfs/devices/disks/vmhba0:1:0:0 /vmfs/volumes/storage1/sata.vmdk

虚拟机:添加已存在的磁盘-找到sata.vmdk。

遗憾的是不能各虚拟机共享使用。

vmware ,

Vmare ESX 下centos的安装

2008年11月21日

在虚拟机安装了centos,由于他虚拟的Inter e1000的网卡不支持centos(虽然支持red hat e5),只能用较低级的100M网卡了。

配置mysql和apache,原来很简单的事情,重装了N遍配置了半天都有问题,权限的问题,最后找到了原来是SElinux 的问题,关闭后完全没问题。这和vista的UCA一样自己找自己的麻烦,虽然有时候也挺有用的。

nginx,原来在SUN服务器上装了nginx,为了验证esx虚拟机的稳定、强壮决定把nginx装到linux里,测试一下虚拟机在大访问量下的性能。

centos自带的pcre版本比较低,自己装一个吧

wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-7.8.tar.gz

编译参数:

./configure –with-poll_module –with-http_ssl_module –with-http_realip_module –with-http_flv_module –with-http_stub_status_module

linux, 我的网站 , ,

[转]ffmpeg和Mencoder使用实例小全

2008年11月6日

下载电影的时候,我们总希望在全部下载完成之前能够预览一下影片内容,于是发布者时常会放一些影片截图在种子文件中,或者直接贴到网上,也有一些截图是一张图片,但包含很多幅影片在一起,就像下面这张:

有很多软件能够截取影片图像、合并图像,但如果影片太多,比如视频网站为用户上传的图像生成预览图之类的,人工在gui方式下操作就不可取了,我们需要在命令行方式下来截取、合并。

 

首先,截取影片图像使用最多的就是mplayer或者ffmpeg,我用mplayer比较熟,本文就以此为例了,ffmpeg功能也是非常强大的,但据说支持的文件格式却不丰富。mplayer截取影片图像的基本命令为:

mplayer -ss START_TIME -noframedrop -nosound -vo jpeg -frames N NAME_OF_VIDEO_FILE   
上 例中,-ss指定开始的时间,结合-frames参数,限定从某个时间开始、截取几帧图像。为了体现整个影片的内容,我需要在影片中间隔时间相同的几个 点、每个点截取1帧图像,所以按道理应该用-frames1,但是mplayer这样截图的情况下,第一帧似乎永远都会截取到一个黑屏,所以我常用- frames2。截取下来的图像保存在了当前目录,名称从00000001.jpg开始依次递增,按照-frames2,就是取00000002.jpg 为结果,删除00000001.jpg即可。经过简单实验,在截取wmv、rmvb影片时,前面的好几帧都会是黑屏,也只能参考上面的做法多取几帧了。

为 了取影片中间隔大致相同的几个点,可以用-ss指定时间,也可以用-sb指定开始字节,在我的实际使用中,使用-sb只会得到黑屏,所以通过文件大小来设 置间隔点的办法不行,只能用-ss时间间隔了,这就需要首先得到影片的总时间。好在mplayer为我们提供了类似的功能:

mplayer -identify movie-filename -nosound -vc dummy -vo null   
这样会输出一大堆影片信息,从中截取所需内容即可,在bash shell中,取得影片总时间长度(以秒为单位)的命令如下:

FILESIZE=`mplayer -identify -nosound -vc dummy -vo null $1 | grepID_LENGTH | sed -r ‘s/ID_LENGTH=[[:digit:]]*.[[:digit:]]*?/1/g’`   
有了影片的总时长,我们就可以根据所要截取的帧数,计算出每个间隔点的时间位移了。不过要注意一般影片的开始-ss 0和结束-ss TOTAL_TIME_OF_VIDEO截取下来都会是黑屏,在处理的时候要分别加上和减去若干秒。

截取工作完成后,我们拥有了一堆000000xx.jpg文件,如果能把这些文件都放到一个文件中,每行2张,成为一张大图片,在发布的时候会很方便。所以,我们使用imagemagickhttp://www.imagemagick.org/script/index.php中的montage命令来实现:

montage -geometry +0+0 -tile 2 *.jpg montage.jpg   
-geometry +0+0是设定使用原始图片大小,-tile 2参数设定每行放2张图片,最后一个参数是要生成的目标文件名,现在,我们就能够得到像刚才那张一样的图片了。

原理已经讲清楚了,可以自己写一个bash脚本来方便调用,我在网上找到了一个很不错的例子http://www.linuxquestions.org/questions/showthread.php?t=361072,可以在这个基础上进行修改,过程不再详述了。

下面再列一些在网上找到的其他mplayer、mencoder、ffmpeg的使用实例:

mplayer获取影片信息
mplayer -identify movie-filename -nosound -vc dummy -vo null
从所有输出中可以grep到如下信息:
– filetype: ASF file format detected.
– dimensions and format: VIDEO: [MP43] 320×240 24bpp 1000.000 fps 0.0 kbps 0.0 kbyte/s
– video format: ID_VIDEO_FORMAT=MP43
– width dimensions: ID_VIDEO_WIDTH=320
– height dimensions: ID_VIDEO_HEIGHT=240
– length in seconds: ID_LENGTH=98.00
参考8http://gallery.menalto.com/node/40548

mencoder图片做成电影
#用当前目录中的所有JPEG文件创建DivX4文件:
mencoder *.jpg -mf on:w=800:h=600:fps=25 -ovc divx4 -o output.avi
#用当前目录中的一些JPEG文件创建DivX4文件:
mencoder -mf on:w=800:h=600:fps=25 -ovc divx4 -o output.avi *.jpg
#用当前目录中的所有JPEG文件创建Motion JPEGMJPEG文件:
mencoder -mf on:w=800:h=600:fps=25 -ovc copy -o output.avi *.jpg
#用当前目录中的所有PNG文件创建一个非压缩的文件:
mencoder -mf on:w=800:h=600:fps=25:type=png -ovc rawrgb -o output.avi *.png
简单用法:
mencoder *.jpg -mf on:fps=15 -o output.avi -ovc xvid
参考6 参考7http://huangjiahua.livejournal.com/99358.html

ffmpeg屏幕录像
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024×768 ~/test.avi
其中,-vd x11:0,0 指录制所使用的偏移为 x=0 和 y=0,-s 1024×768 指录制视频的大小为 1024×768。录制的视频文件为 test.avi,将保存到用户主目录中。其他选项可查阅其说明文档。
如果你只想录制一个应用程序窗口或者桌面上的一个固定区域,那么可以指定偏移位置和区域大小。使用xwininfo -frame命令可以完成查找上述参数。
你也可以重新调整视频尺寸大小,如:./ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i ~/test.avi -s 800×600 ~/test-800-600.avi。
参考5http://linuxtoy.org/archives/ffmpeg.html

mplayer对video进行截屏 截图wmv mpeg mov flv all works
mplayer 78.mov -ss 1 -nosound -vo jpeg:outdir=./ -frames 2
我截的第一张图不知为何全部都是黑屏
参考4http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=165254

转换为flv文件
mencoder NOW.wmv -ffourcc FLV1 -oflavf -ovc lavc -lavcopts vcodec=flv:acodec=mp3:abitrate=56 -srate 22050-oac mp3lame -o NOW.flv
ffmpeg -i a.asf -ab 56 -ar 22050 -b 500 -r 15 -s 320×240 asf.flv
参考3http://www.roading.net/blog/article.asp?id=114

使用ffmpeg抓图
ffmpeg -i test2.asf -y -f image2 -ss 08.010 -t 0.001 -s 352×240 b.jpg
jpg: ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352×240 -ss a.jpg //注意-ss就是要提取视频文件中指定时间的图像
jpg: ffmpeg -i asf.flv -y -f image2 -t 1 asf.jpg
gif: ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
参考3 参考2http://www.killflash.net/blog/article.asp?id=77

如何合并几个视频片段
mencoder -oac copy -ovc copy -idx -o output.avi video1.avi video2.avi video3.avi
* 其中,-oac copy 选项告诉 mencoder 要正确拷贝音频流。而 -ovc copy 选项则是拷贝视频流。
* 如果在视频文件中没有找到索引的话,那么 -idx 选项会要求 mencoder 建立它。
* -o 选项指定输出文件的名称。
* 最后几个参数为需要合并的几个视频片段。
参考1 http://linuxtoy.org/archives/join_several_videos.html

大杂烩
服务器端转换工具Server-Side-FLV-Conversion
场景:想把 MPG 或 AVI 上传到你的服务器并自动转换成 FLV 吗?
1,FFmpeg http://sourceforge.net/projects/ffmpeg | 教程一http://soenkerohde.com/tutorials/ffmpeg | 教程二http://klaus.geekserver.net/flash/streaming.htmlGoogle Video使用的就是这个东东.
2,Flix Engine http://www.on2.com/developer/flix-engine-sdk | 教程http://www.flexauthority.com/articlesIndex.cfm | 范例http://www.flexauthority.com/Samples/FlixEngine/index.html
3,Turbine Video Engine http://www.blue-pacific.com/products/turbinevideosdk/default.htm
4,Video to Flash Console http://www.geovid.com/Video_to_Flash_Console

录像/实时广播Record/Broadcast
场景:想制作一个语音视频Blog满足自恋的欲望吗?
1,RED5 http://www.osflash.org/red5
2,Flash Media Server http://www.macromedia.com/go/fms
在线编码,分享视频Online Encode & Share
场景:想不花钱就可以在线分享你的视频吗?
1,Google Video http://video.google.com/
2,You Tube http://www.youtube.com/
本地 FLV 文件播放器FLV Player
场景:拿到了 FLV 文件不知道怎么播放了.
1,martijndevisser FLV Player http://www.martijndevisser.com/2005/10/flv_player_updated.html
2,FlashGuru FLV Player http://www.flashguru.co.uk/free-tool-flash-video-player
3,FCZone FLV Player http://fczone.com/2006/01/fms-media-player.cfm
在线 FLV 文件播放器Online FLV Player
场景:知道一个在线FLV地址,又懒得下载和安装播放器.
1,Loadr http://dengjie.com/loadr
2,Google Player Generator http://dengjie.com/loadr/r.swf?file=/temp/google_player.swf&clr=000FFF
更多相关软件看这篇文章:Flash 网站的视频策略 http://www.macromedia.com/cfusion/knowledgebase/index.cfm?id=tn_14571

此文章转自 shadow

ffmpeg 参数

利用ffmpeg+mencoder视频转换的总结

http://www.yitian130.com/article.asp?id=69

flv视频转换和flash播放的解决方案笔记

http://blog.verycd.com/dash/showentry=35982

Youtube技术原理
1. 网页文件允许上传视频文件(这个和上传其他文件一样的)(作者用的是python的架构)
2. 后台调用ffmpeg对上传的视频进行压缩,输出flv格式的文件。这个开源程序win32和linux都有实现,所以可以适应不用的主机环境。
3. 使用flvtools处理flv文件,标记上时长、帧速、关键帧等元数据,这样的flash文件才可以拖放。
4. 使用 ffmpeg 产生flv文件的缩略,和大图像文件的缩略图是一个道理。
5. 使用适当的flv播放器在网页中播放服务器端生成的flv文件。
更多详细:http://www.gotonx.com/bbs/simple/index.php?t6322.html

安装和使用ffmpeg转换视频为flv文件(windows和linux)

1、环境winxp-sp2下:
从 http://ffdshow.faireal.net/mirror/ffmpeg/ 下载
最新版本的 FFMpeg.exe直接用就行(须rar解压)。

以下的东西是为对ffmpeg无法解析的文件格式wmv9,rm,rmvb等转换用的,
从http://mediacoder.sourceforge.net/download_zh.htm下载
最新版本的mediacoder的安装后;找到其中的mencoder.exe;drv43260.dll和pncrt.dll三个文件。

2、环境linuxas4。3下:

a、先装mp3在linux下的包:lame-3.97.tar.gz;
tar -xvzf lame-3.97.tar.gz;
cd lame-3.97;
//默认是装在/usr/local下;
//–prefix=/usr/此参数一定要便于调用os的其它系统包
//–enable-shared此参数一定要
./configure –enable-shared –prefix=/usr/;
make;
make install;

b、支持3gp格式,这也是现在好多手机支持的格式,因为手机用户是我们的主要用户,所以也得支持编译

编译的时候加上–enable-amr_nb –enable-amr_wb参数就行,根据编译系统的提示,所以我们得下载一些编译3gp所需得文件。

wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
解压以后把里面的文件都拷贝到libavcodec/amrwb_float/

wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
解压以后把里面的文件都拷贝到libavcodec/amr_float/

c、mpg4 aac格式支持,由于服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。这里我们安装faad2和faac就行
下载请到http://www.audiocoding.com/modules/mydownloads/

tar zxvf faad2-2.5.tar.gz
cd faad2
echo > plugins/Makefile.am
echo > plugins/xmms/src/Makefile.am
sed -i ‘/E_B/d’ configure.in
autoreconf -vif
./configure –prefix=/usr
make &&
make install

tar zxvf faac-1.25.tar.gz
cd faac
sed -i ‘/[2de].M/d’ configure.in
echo ‘AC_OUTPUTcommon/Makefile common/mp4v2/Makefile libfaac/Makefilefrontend/Makefile include/Makefile Makefile’ >> configure.in
autoreconf -vif
./configure –prefix=/usr
make &&
make install

d、支持xvid; x264,现在最流行的两种高质量的压缩格式
xvid的编译安装
wget http://downloads.xvid.org/downloads/xvidcore-1.1.2.tar.gz
tar zvxf xvidcore-1.1.2.tar.gz

cd xvidcore-1.1.2/build/generic
./configure –prefix=/usr –enable-shared
make
make install

x264的获取同样是采用svn方式:
svn co svn://svn.videolan.org/x264/trunk x264

linux下须从http://www.kernel.org/pub/software/devel/nasm/binaries/linux/下载nasm-0.98.39-1.i386.rpm

在linux下安装就行了。。。

rpm -ivh nasm-0.98.39-1.i386.rpm(如-ivh不行就用-Uvh)

cd x264
./configure –prefix=/usr –enable-shared
make
make install

e、安装ffmpeg:
//as4.3系统已经支持ac3编码,只要加–enable-a52 –enable-gpl参数就行
//我加–enable-shared参数没有成功
./configure –prefix=/opt/ffmpeg/ –enable-mp3lame –enable-amr_nb–enable-amr_wb –enable-a52 –enable-xvid –enable-x264 –enable-faad–enable-faac –enable-gpl –enable-pthreads;
make clean;//一定要;否则有可能没声音。
make;
make install;

在相应windows和linux目录下(有ffmpeg文件的;以下用linux下说明):
3、使用ffmpeg转换视频为flv文件:
./ffmpeg -i ‘/opt/input/1.mpg’ -y -ab 32 -ar 22050 -b 800000 -s 640*480 /opt/output/1.flv’
ffmpeg能解析的格式:(asx,asf,mpg,wmv,3gp,mp4,mov,avi,flv等)

对ffmpeg无法解析的文件格式wmv9,rm,rmvb等,
可以先用别的工具(mencoder)转换为aviffmpeg能解析的格式.
./mencoder /input/a.rmvb -oac lavc -lavcopts acodec=mp3:abitrate=64 -ovc xvid -xvidencopts bitrate=600 -of avi -o /output/a.avi
在执行./ffmpeg -i ‘/opt/input/a.avi’ -y -ab 32 -ar 22050 -b 800000 -s 640*480 /opt/output/a.flv’就可以转了。

4、视频抓图:
./ffmpeg -i ‘/opt/input/a.flv’ -y -f image2 -t 1 -s 300*200 ‘/opt/output/1.jpg’ //获取静态图

./ffmpeg -i ‘/opt/input/a.mpg’ -vframes 30 -y -f gif ‘/output/1.gif’ //获取动态图;
不提倡抓gif文件;因为抓出的gif文件大而播放不流畅。

用mencoder在线转换视频格式并控制视频品质

http://blog.sina.com.cn/u/490343a7010006z6

备忘录 ,