ffmpeg & mencoder视频转换环境安装手记
/ / 点击 /网上查了不少的ffmpeg编译文章,发现其实困难的不是ffmpeg的编译和安装,
困难的是把各种解码器凑齐,这个不容易!-.-!!!
准备:
编译ffmpeg之前,系统需要以下支持:
- lame (支持MP3)
- 支持Ogg Vorbis
- xvid x264,现在最流行的两种高质量的压缩格式
- AC3和dts编码的支持
- mpg4 aac格式支持 (手机用户)
- 支持3gp格式(手机用户)
1 | # tar zxvf lame-3.97-i686-1jto.tgz |
如果下载是源码的话:1
2
3
4
5# tar zxvf lame-3.97.tar.gz
# cd lame-3.97
# ./configure —prefix=/usr —enable-shared
# make
# make install
- ogg vorbis:这个一般的redhat自带,不需要下载.可以去看看/usr/lib/bvorbis.a在不在
1 | # ls /usr/lib/libvorbis.* |
如果不在,安装以下rpm包(安装盘中自带)
libvorbis, libvorbis-devel,libogg, libogg-devel
1 | # ./configure —prefix=/usr |
在这里下载x264
ftp://ftp.videolan.org/pub/videolan/x264/snapshots
或者
svn co svn://svn.videolan.org/x264/trunk x264
1 | # ./configure —prefix=/usr —enable-shared |
[注] 如果你的机器是多cpu的服务器,x264在make的时候会提示类似下面的错误:1
2
3
4
5……
common/cpu.c: In functionx264_cpu_num_processors’: common/cpu.c:220: warning: passing arg 2 of sched_getaffinity' makes integer from pointer without a cast
common/cpu.c:220: error: too few arguments to functionsched_getaffinity’
make: * [common/cpu.o] Error 1
解决办法:
例如您的服务器cpu个数是2个
修改common/cpu.c
找到下面的代码段:1
2
3
4
5
6
7
8
9elif defined(SYS_LINUX)
unsigned int bit;
int np;
cpu_set_t p_aff;
memset( &p_aff, 0, sizeof(p_aff) );
sched_getaffinity( 0, &p_aff );
for( np = 0, bit = 0; bit < sizeof(p_aff); bit++ )
np += (((uint8_t *)&p_aff)[bit / 8] >> (bit % 8)) & 1;
return np;
修改为:1
2
3
4elif defined(SYS_LINUX)
int np;
np =2;
return np;
np表示你的cpu个数。
- 系统似乎已经支持ac3编码,编译的时候只要加–enable-a52 –enable-gpl参数就行
LibDTS 下载:
http://download.chinaunix.net/down.php?id=11568&ResourceID=5785&site=1
1 | # ./configure —prefix=/usr |
- MPEG-4 AAC格式支持需要安装faad2和faac这两个包!
我没找到官方的下载地址,(www.audiocoding.com 这个域名貌似不能用了!)
从discuz的服务器上下载吧,(修正后的)
1 | wget http://download.discuz.net/env/video/faac-1.25-Comsenz.tar.bz2 |
安装faad21
2
3
4
5
6tar xjvf faad2-2.5-Comsenz.tar.bz2
cd faad2-Comsenz
autoreconf -vif
./configure —prefix=/usr —with-mp4v2 —enable-shared
make
make install
安装faac1
2
3
4
5
6
7cd /usr/local/video/
tar xjvf faac-1.25-Comsenz.tar.bz2
cd faac-Comsenz
autoreconf -vif
./configure —prefix=/usr —with-mp4v2 —enable-shared
make
make install
这两个包编译时间有点小长…耐心等待… ^^
- 支持3gp格式,这也是现在好多手机支持的格式
amrwb_float :
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
amr_float :
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
分别解压拷贝到ffmpeg/libavcodec/amrwb_float和ffmpeg/libavcodec/amrwb_float
ffmpeg编译时加编译参数:–enable-amr_nb –enable-amr_wb
编译安装ffmpeg1
2
3
4
5# ./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb --enable-amr_wb \
--enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-faadbin \
--enable-dts --enable-pp --enable-faad --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay
# make
# make install
(ffmpeg 安装完)
注:最新版本的ffmpeg已经比以前支持更多的格式了.只需安装lame,xvid,x264就可以了!
mencoder 安装
安装mplayer即可,从mplayer官方网站(http://www.mplayerhq.hu/),下载最新的mplayer和解码包
mplayer :
wget http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2
codecs:
wget http://www1.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2
编译安装1
2
3
4
5
6tar jxvf essential-20061022.tar.bz2
mv essential-20061022 /usr/lib/codecs
tar jxvf MPlayer-1.0rc1.tar.bz2
cd MPlayer-1.0rc1
./configure —prefix=/usr/local —enable-gui —enable-largefiles —enable-gif —enable-png —enable-jpeg —language=zh_CN—with-codecsdir=/usr/lib/codecs/
make ; make install
(mencoder 安装完)
================================================================
Ffmpeg使用语法1
ffmpeg [[options][`-i’ input_file]]… {[options] output_file}…
如果没有输入文件,那么视音频捕捉(只在Linux下有效,因为Linux下把音视频设备当作文件句柄来处理)就会起作用。作为通用的规则,选项一般用于下一个特定的文件。如果你给 –b64选项,改选会设置下一个视频速率。对于原始输入文件,格式选项可能是需要的。缺省情况下,ffmpeg试图尽可能的无损转换,采用与输入同样的音频视频参数来输出。
视频文件截图
截取一张352x240尺寸大小的,格式为jpg的图片1
ffmpeg -i test.asf -y -f image2 -t 0.001 -s 352x240 a.jpg
把视频的前30帧转换成一个Animated Gif1
ffmpeg -i test.asf -vframes 30 -y -f gif a.gif
截取指定时间的缩微图1
2ffmpeg -i test.avi -y -f image2 -ss 8 -t 0.001 -s 350x240 test.jpg
-ss后跟的时间单位为秒
转换文件为3GP格式1
2
3
4
5ffmpeg -y -i test.mpeg -bitexact -vcodec h263 -b 128 -r 15 -s 176x144
-acodec aac -ac 2 -ar 22500 -ab 24 -f 3gp test.3gp
或
ffmpeg -y -i test.mpeg -ac 1 -acodec amr_nb -ar 8000 -s 176x144 -b 128 -r 15 test.3gp
视频格式转换
如何使用 ffmpeg 编码得到高质量的视频1
2
3
4ffmpeg.exe -i “D:VideoFearlessFearless.avi” -target film-dvd -s 720x352
-padtop 64 -padbottom 64 -maxrate 7350000 -b 3700000 -sc_threshold 1000000000
-trellis -cgop -g 12 -bf 2 -qblur 0.3 -qcomp 0.7 -me full -dc 10 -mbd 2
-aspect 16:9 -pass 2 -passlogfile “D:Videoffmpegencode” -an -f mpeg2video “D:Fearless.m2v”
转换指定格式文件到FLV格式1
2ffmpeg.exe -i test.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:test.flv
ffmpeg.exe -i test.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:test.flv
转码解密的VOB1
ffmpeg -i snatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128 snatch.avi
上面的命令行将vob的文件转化成avi文件,mpeg4的视频和mp3的音频。注意命令中使用了B帧,所以mpeg4流是divx5兼容的。GOP大小是300意味着29.97帧频下每10秒就有INTRA帧。该映射在音频语言的DVD转码时候尤其有用。
同时编码到几种格式并且在输入流和输出流之间建立映射1
ffmpeg -i /tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0
上面的命令行转换一个64Kbits 的a.wav到128kbits的a.mp2 ‘-map file:index’在输出流的顺序上定义了哪一路输入流是用于每一个输出流的。
转换文件为3GP格式1
2ffmpeg -i test.avi -y -b 20 -s sqcif -r 10 -acodec amr_wb -ab 23.85 -ac 1 -ar 16000 test.3gp
注:如果要转换为3GP格式,则ffmpeg在编译时必须加上--enable-amr_nb --enable-amr_wb
屏幕录制
使用ffmpeg录像屏幕1
ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -vd x11:0,0 -s 1024x768 ~/test.avi
其中,-vd x11:0,0 指录制所使用的偏移为 x=0 和 y=0,-s 1024×768 指录制视频的大小为 1024×768。录制的视频文件为 test.avi,将保存到用户主目录中
如果你只想录制一个应用程序窗口或者桌面上的一个固定区域,那么可以指定偏移位置和区域大小。使用xwininfo -frame命令可以完成查找上述参数。
重新调整视频尺寸大小1
2ffmpeg -vcodec mpeg4 -b 1000 -r 10 -g 300 -i ~/test.avi -s 800×600 ~/test-800-600.avi
注:ffmpeg的屏幕录制功能只能在Linux环境下有效。