ffmpeg mplayer x264 代码重点详解 详细分析
时间:2022-08-26 23:00:00
ffmpeg和mplayer寻求平均值的方法
1 ordinary c language level
#define avg2(a,b) ((a b 1)>>1)
#define avg4(a,b,c,d) ((a b c d 2)>>2)
显而易见...注意a,b宏表达式可能引起的副作用
2 SIMD by software
实现方法1:
inline static uint64_t BYTE_VEC(uint64_t x)
{
x |= x << 8;
x |= x << 16;
x |= x << 32;
return x;
}
static inline uint64_t avg2_no_rnd(uint64_t a, uint64_t b)
{
return (a & b) (((a ^ b) & BYTE_VEC(0xfe))>> 1);
}
static inline uint64_t avg2(uint64_t a, uint64_t b)
{
return (a | b) - (((a ^ b) & BYTE_VEC(0xfe)) >>1);
}
实现方法2:
#define op_avg_round(a,b) a = ( ((a)|(b)) -((((a)^(b))&0xFEFEFEFEUL)>>1) )
#define op_avg_noround(a,b) a = ( ((a)&(b)) ((((a)^(b))&0xFEFEFEFEUL)>>1))
通 过软件实现 singl instruction multi data,单指令多数据流,上述实现方法相同bits平均宽度数据在64位cpu2.实现48bits宽度数据 平均,在32位cpu简单分析加法结果有两个成分,一个是进位,1个是逻辑和((a)&(b))<<1是进位 (((a)^(b))是逻辑和((a)&(b))<<1 (((a)^(b))&0xFEFEFEFEUL) 为和,一个右移得到平均值,原因是0xFE..,因为每个字节的最后一个bit位置为零,以一个字节以免影响下一个字节的值((a)| (b)) 对应位在 0 1, 1 0, 1 1的三种情况都是1,所以((a)|(b))<<1表示进位 非满进位,因为在0 1, 1 在这种情况下,也产生了进位,正好是它的逻辑和其他分析
3 machine instruction levelAMD
3DNOW 指令:
#define AVG_3DNOW_OP(a,b,temp, size) /
"mov" #size " " #b ", " #temp "/n/t"/
"pavgusb " #temp ", " #a" /n/t"/
"mov" #size " " #a ", " #b" /n/t"
intel MMX指令:
#define AVG_MMX2_OP(a,b,temp, size) /
"mov" #size " " #b ", " #temp "/n/t"/
"pavgb " #temp ", " #a" /n/t"/
"mov" #size " " #a ", " #b "/n/t"
mplayer和ffmpeg的编译大全
MPlayer下载
http://www.mplayerhq.hu/design7/dload.html
目前版本MPlayer v1.0rc2
MPlayer编译
tar -xjvf MPlayer-1.0rc2.tar.bz2
cd MPlayer-1.0rc2
./configure
make
make install
若出现以下错误
cabac.h: In function `get_cabac_noinline':
cabac.h:525: error: can't find a register in class `GENERAL_REGS' whilereloading `asm'
make[1]: *** [h264.o] 错误 1
在make前加入
export CFLAGS=-fomit-frame-pointer
make clean
ffmpeg的编译大全
1. 首先获取ffmpeg
很多人找不到如何下载。事实上,以前ffmpeg可以通过cvs下载,但最近他变得更强大了svn
如何使用SVN这里就不介绍了。网上有很多安装使用的文章可以借鉴。这里有一些简单的列表SVN辅助软件:
SubVersion,从 http://subversion.tigris.org/ 下载,支持linux,这是我们在这里安装的
TortoiseSVN,从 http://tortoisesvn.tigris.org/ 下载,很好SVN客户端程序,为windows集成外壳程序windows资源管理器和文件管理系统Subversion客户端使用方便,commit动作变得像Winrar右键压缩同样方便。
ok,那我们先装subversion,记得以前最好装apr和apr-util,在apache.org网站能下到
wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
tar zvxf subversion-1.3.2.tar.gz
cd subversion-1.3.2
./configure --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd/
make
make install
在这里,我们可以通过svn最新命令ffmpeg了
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
你会在你的目录中自动找到一个ffmpeg目录是您下载的源代码。
官网:http://ffmpeg.mplayerhq.hu/download.html
我们不能这么快编译ffmpeg,若要让ffmpeg支持更多格式的转换,需要做一些前期工作
2. 支持mp3,linux当然是lame,下载解压
http://sourceforge.net/projects/lame
lame-3.97.tar.gzMirror |
cd lame-3.97
./configure --enable-shared --prefix=/usr
./make
./make install
建议在这里尽量安装/usr下面,默认是安装的/usr/local下。这样ffmpeg编译可以顺利找到库文件
3.支持Ogg Vorbis:
as4自带相应的rpm您可以安装以下包rpm包
libvorbis, libvorbis-devel,libogg, libogg-devel
FC3和FC4应为预设安装相关library事实上,有四个套件需要安装:libvorbis、libvorbis-devel、libogg 和libogg-devel。您可以使用以下指令检查是否有。
#rpm -qa | grep libogg
#rpm -qa | grep libvorbis
如果没有,用yum可以安装。
4.支持xvid x264,两种最流行的高质量压缩格式
xvid的编译安装
Get the latest version on http://www.xvid.org/,and uncompress it on
your disk. Let's name the resulting source directory ${xvidcore}.
wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz
The next step allows you to configure the xvid sources.
# cd ${xvidcore}/build/generic
# ./configure
Some building options can be tuned thanks to the ./configure tool. You
can use your own CC and CFLAGS variables in order to override xvid's
default ones. To have a list of known options:
# ./configure --help
Now xvidcore is configured according to your specific platform. You
can still handwrite the latform.inc file in order to add/remove
specific flags that ./configure may have set them wrong.
It is time to build xvidcore:
# make
That creates a =build directory where all object files go, and where
the build targets are linked. If no error was reported by the build
process, then you can install it on your system:
# make install
This copies the shared and static libraries to the prefix location
passed to the ./configure tool (/usr/local by default). The xvid.h
include file is also copied during the "make install" run.
Voila, xvidcore is installed on your system, make sure your runtime
linker knows about the xvidcore prefix lib dir where it is
installed. And make also sure that it generates a symlink to its
SONAME. In case it would do not take care of the symlink itself:
# cd ${prefix}/lib
# ls libxvidcore.so.*
ls should list at least one libxvidcore.so.MAJOR.MINOR file
# ln -s libxvidcore.so.MAJOR.MINOR libxvidcore.so.MAJOR
You may also add a .so link to .so.MAJOR, so that applications linked
against .so are in fact linked to .so.MAJOR and thus ensures better
binary compatibility as we take care not changing the MAJOR number
until there is an incompatible ABI change.
# ln -s libxvidcore.so.MAJOR libxvidcore.so
#tar zvxf xvidcore-1.1.2.tar.gz
#cd xvidcore-1.1.2/build/generic/
#./configure --prefix=/usr
#make
#make install
H264/AVC 支援:x264
要壓HQ1080、iPod和PSP的影片,x264是少不了的。不過要安裝x264,就需要用yasm來編譯。那就先裝個yasm吧。
yasm下載網址:http://www.tortall.net/projects/yasm/releases/yasm-0.6.0.tar.gz
最新的 下载: Source.tar.gz 0.6.2
#tar xzvf yasm-0.6.0.tar.gz
#cd yasm-0.6.0
#./configure --prefix=/usr/local/yasm
#make
#make install
#export PATH="$PATH:/usr/local/yasm/bin"
#vi /etc/profile
--[在最後,插入]--
export PATH="$PATH:/usr/local/yasm/bin"
--[存檔並關閉]--
跟ffmpeg一樣,x264的官網也是鼓勵大家 checkout SVN來取得最新版本。但據SupeSite在2007年5月16日的說明指出官網的x264最新版有Bug,無法正常在一些Intel的CPU上編譯安 裝(甚麼雙至強、四至強CPU嘛,是指雙核和四核嗎?)。不過起碼米奇在公司的P4 2.8GHz CPU安裝沒有問題啦,所以...管它。如果您遇上問題的話,就去下載SupeSite的開發公司Comsenz的版本吧,不過先旨聲明,那個改版的授權 還是不是原來的GPL就不知道了。如果您在意於授權的話,那就用SVN checkout吧,我想那問題可能在您安裝時已經修正好了。
x264的获取同样是采用svn方式,看来svn取代cvs不远了
svn co svn://svn.videolan.org/x264/trunk x264
cd x264
./configure --prefix=/usr --enable-shared
make
make install
5.AC3和dts编码的支持
as4系统似乎已经支持ac3编码,编译的时候只要加--enable-a52--enable-gpl参数就行
現在的ffmpeg又沒附有liba52了,所以,還是自己動手裝吧...
下載網站:http://liba52.sourceforge.net/
# tar zxvf a52dec-0.7.4.tar.gz
# cd a52dec-0.7.4
# ./configure --enable-shared --prefix=/usr
# make
# make install
6.mpg4 aac格式支持,由于服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。这里我们安装faad2和faac就行
faac是用來壓製AAC音軌的,而faad2就是AAC音軌的解碼器。手機鈴聲和MP4影片都是使用AAC作聲音編碼的,所以要裝這個。
另外,faac和faad2都可以配合libmp4v2來安裝,有些網站說需要先安 裝libmp4v2,(http://mpeg4ip.net/) 不過米奇就發覺只要編譯faac和faad2時加入適當參數,就可以連同libmp4v2一同安裝了。
下载请到http://www.audiocoding.com/downloads.html
FAAD2的编译
cd faad2
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
faac的编译
cd faac
chmod +x bootstrap
./bootstrap
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
Comsenz版下載網址:http://download.discuz.net/env/video/faac-1.25-Comsenz.tar.bz2
#tar xjvf faac-1.25-Comsenz.tar.bz2
#cd faac-Comsenz
#autoreconf -vif
#./configure --prefix=/usr --with-mp4v2 --enable-shared
#make
#make install
要知道安裝了faac和faad2之後有沒有安裝好libmp4v的話,只要找一找/usr/lib目錄裡有沒有 libmp4v2.so等一系列檔案就可以了。找不到的話,就到這裡去下載,安裝好之後再重頭安裝faac和 faad2了。
7.支持3gp格式,这也是现在好多手机支持的格式,因为手机用户是我们的主要用户,所以也得支持编译
编译的时候加上--enable-amr_nb --enable-amr_wb参数就行,根据编译系统的提示,所以我们得下载一
些编译3gp所需得文件。
wget http://www.3gpp.org/ftp/Specs/ar ... 6.204/26204-510.zip
解压以后把里面的文件都拷贝到libavcodec/amrwb_float
wget http://www.3gpp.org/ftp/Specs/ar ... 6.104/26104-510.zip
解压以后把里面的文件都拷贝到libavcodec/amr_float
3GPP AMR Floating point 和AMR-Wideband支援:libamrnb、libamrwb
3GP 影片的影像是h263編碼,而聲音就用AMR-NB或AMR-WB編碼,所以要轉換手機影片,就要安裝AMR程式庫。最初坊間的安裝方式都是到3GPP官 網去下載那些連名字也搞不懂的檔案來,放在ffmpeg裡的指定目錄去跟ffmpeg一同編譯的,但現在已經有人抽取了出來而成為獨立的程式庫,安裝起來 就簡單得多了。
下載網址:http://www.penguin.cz/~utx/amr
libamrnb
#tar xjvf amrnb-7.0.0.0.tar.tar
#cd amrnb-7.0.0.0
#./configure --prefix=/usr --enable-shared
#make
#make install
libamrwb
#tar xjvf amrwb-7.0.0.2.tar.tar
#cd amrwb-7.0.0.2
#./configure --prefix=/usr --enable-shared
#make
#make install
8. DTS 支援:libdca
ffmpeg已經內含了用來解碼DTS的libdca,所以不用安裝,也沒有要入加的參數。
9. 安裝ffmpeg
安裝完成必要的程式庫之後,終於可以動手安裝ffmpeg本體了。如果您先前曾經安裝過ffmpeg的話,就先把ffmpeg的源碼目錄刪掉,再次 checkout個新版本回來安裝吧。
#svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk/usr/local/src/ffmpeg
#cd /usr/local/src/ffmpeg
#./configure --prefix=/usr --enable-gpl --enable-shared --enable-libmp3lame--enable-libvorbis --enable-libamr-nb --enable-libamr-wb --enable-libxvid --enable-libx264 --enable-liba52--enable-liba52bin --enable-libfaac --enable-libfaad --enable-libfaadbin--enable-pp --enable-pthreads --disable-ffserver --disable-ffplay
#make clean && make
#make install
經過可以去看一節動畫的時間編譯之後,你應該可以在/usr/bin目錄裡找到ffmpeg程式。輸入ffmpeg便會列出用了甚麼參數來編譯這個 ffmpeg和它的版本。米奇試過用以這程序來安裝的ffmpeg來編製和解壓3GP、Xvid、mov、wmv9、msmpeg4、MPEG2+AC3 音源、h264+aac音源的mkv、PSP用的MP4和FLV影片,都沒有問題,只有wmv7的影片無法解碼,相信已經對應得到大部份現時流行的影音格式了。
可以用 ffmpeg -threads [thread_count] -deinterlace -i [input_file] -ac 2-ab [audio_bitrate] -acodec libfaac -vcodec libx264 -b [video_bitrate][output_file] 來產生 H.264+AAC 的mp4 檔案了。
ffmpeg编译及使用
ffmpeg编译及使用
1 ffmpeg介绍
ffmpeg是音视频的分离,转换,编码解码及流媒体的完全解决方案,其中最重要的就是libavcodec库。它被mplayer或者xine使用作为解码器。还有,国内比较流行的播放器影音风暴或MyMPC的后端ffdshow也是使用ffmpeg的解码库的。
ffmpeg软件包经编译过后将生成三个可执行文件,ffmpeg,ffserver,ffplay。其中ffmpeg用于对媒体文件进行处理,ffserver是一个http的流媒体服务器,ffplay是一个基于SDL的简单播放器。
ffmpeg 中有五个库文件,libavcodec,libavformat,libavutil,libswscale,libpostproc,其中库 libavcodec,libavformat用于对媒体文件进行处理,如格式的转换;libavutil是一个通用的小型函数库,该库中实现了CRC校 验码的产生,128位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能;libswscale,libpostproc 暂时不知道何用。
2 ffmpeg下载
最新的ffmpeg可以通过svn下载,SVN辅助的软件有:
SubVersion,从 http://subversion.tigris.org/下载,支持linux。
TortoiseSVN,从 http://tortoisesvn.tigris.org/下载,是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便。
subversion安装,记住最好之前装过apr和apr-util,在apache.org网站能下到
wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
tar zvxf subversion-1.3.2.tar.gz
cd subversion-1.3.2
./configure --with-apr=/usr/local/apr-httpd--with-apr-util=/usr/local/apr-util-httpd/
make
make install
如果安装了FC6,它已经带了svn,不用装了。
ffmpeg的下载:我们就可以通过svn命令获取最新的ffmpeg,命令如下:
svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
3 ffmpeg支持库的安装
* xvid
xvid的获取地址如下:
http://www.xvid.org/
wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz
配置编译
for x86
#./configure --prefix=/usr/local
#make
#make install
for arm
#CC=arm-linux-gcc ./configure--prefix=/usr/local/arm/arm-linux --build=i686-pc-linux --host=arm-linux--target=arm-linux
#make
#make install
* x264
x264的获取地址如下:
svn co svn://svn.videolan.org/x264/trunk x264
配置编译
for x86
#./configure --enable-shared --prefix=/usr/local
#make
#make install
for arm
#CC=arm-linux-gcc ./configure --enable-pthread--enable-shared --host=arm-linux
--prefix=/usr/local/arm/arm-linux
#make
#make install
* 支持mp3
lame的获取地址如下: http://lame.sourceforge.net/index.php
配置编译
for x86
./configure --enable-shared --prefix=/usr/local
* 支持Ogg Vorbis:
* AC3和dts编码的支持
libdts编译参数
./configure --prefix=/usr
make
make install
* mpg4 aac格式支持,如果ffserver服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。这里我们安装faad2和faac就行,下载请到http://www.audiocoding.com/modules/mydownloads/,http://prdownloads.sourceforge.net/faac
FAAD2的编译
cd faad2
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
faac的编译
cd faac
chmod +x bootstrap
./bootstrap
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
在编译ffmpeg,在configure时加上--enable-amr_nb --enable-faad --enable-faac参数。
* 支持3gp格式,这也是现在好多手机支持的格式,所以也得支持编译
编译的时候加上--enable-amr_nb --enable-amr_wb参数就行,根据编译系统的提示,所以我们得下载一些编译3gp所需得文件。
源码网址:http://www.3gpp.org/ftp/Specs
wget http://www.3gpp.org/ftp/Specs/ar ... 6.204/26204-510.zip
解压以后把里面的文件都拷贝到libavcodec/amrwb_float
wget http://www.3gpp.org/ftp/Specs/ar ... 6.104/26104-510.zip
解压以后把里面的文件都拷贝到libavcodec/amr_float
* ffmpeg支持VC1格式
微软ASF格式的三个版本,WMV1,WMV2,WMV3分别对应MediaPlayer的版本7,8和9,所以很多时候会称VC1为WMV3或 WMV9,都是它了,有时候在代码里,也能看到称呼它为VC9的。因为微软还没有正式公开这种格式,所以当前对VC1的支持还很不完善。本文基本是根据Multimedia Mike的一篇博客翻译和完善而来。
(1) 首先要下载 SMPTE VC-1 reference decoder,这个组织是要收费的,可以从这里下载免费的。
(2) 在ffmpeg目录下的libavcodec目录下面,建立目录libvc1。
(3) 将VC1_reference_decoder_release6/decoder/目录中的*.c和*.h文件全部copy到libvc1目录下。
(4) 将VC1_reference_decoder_release6/shared/目录中的*.c和*.h文件全部copy到libvc1目录下。
(5) 将 libvc1-makefile.txt放到libvc1下的Makefile文件。
(6) 将smpte-vc1.c文件放到libavcodec目录下。
(7) 修改libavcodec目录下的vc9.c,将文件最后的wmv3_decoder这个AVCodec的structure,用#if 0和#endif包含起来,也就是使它失效了。
(8) 修改libavcodec目录下的allcodecs.c,将register_avcodec(&wmv3_decoder)上下的注释去掉,使它发挥作用。
(9) 修改libavcodec目录下的Makefile,把OBJS的列表中加入smpte-vc1.o。
(10)修改ffmpeg主目录下的Makefile文件,把-L./libavcodec/libvc1 -lvc1$(BUILDSUF)加入到FFLIBS后面。
(11) 进入ffmpeg/libavcodec/libav1,执行make
(12) 到ffmpeg主目录下,执行config;make;make install。config时根据实际情况带参数。
* 采用ffmpeg转码制作FLV文件的方法
采用ffmpeg转码制作FLV文件,和转码成其它媒体类型的重要差别是一定要有lame库支持,因为FLV的声音编码采用mp3格式,非lame这个东东不行。编译ffmpeg中加入lame库真是一场灾难,特别在windows下,很多参数都不能发挥作用,最后直接手工copy和改一些文件,记录如下:
(1) 如果在Windows下编译,第一步当然是下载MinGW和MSYS来装上了。到http://mingw.sourceforge.net/去下载最新版的MinGW-5.0.2.exe和MSYS-1.0.11-2004.04.30-1.exe。
(2) 先安装MinGW,直接运行MinGW-5.0.2.exe安装,选择目录,譬如选择D:\MinGW为安装目录。安装时需要选择gcc和make模块,安装文件本身很小,会从网上下载模块来安装。
(3) 然后安装MSYS,也是直接运行MSYS-1.0.11-2004.04.30-1.exe安装。安装目录一般选择D:\MinGW\bin \1.0。,安装过程会询问刚才安装MinGW的目录,输入D:\MinGW,其它都回答'Y'就搞定了。如果不清楚,可以看这个图片效果。
(4) 运行MSYS,桌面上有个图标,双击就运行了,运行结果是一个模拟unix的命令窗口,后面的编译都在这种状态下进行。前面4步在linux不需要。
(5) 到http://lame.sourceforge.net/去下载最新版的lame-3.97b2.tar.gz,copy到你认为合适的地方,解压后进入lame解压出来的目录中。执行
./configure--prefix=PREFIX
make
make install
(6) 就把编译出来的include下的lame目录copy到/usr/include目录下,把lib下的几个库文件都copy到/usr/lib目录 下。这里注意有个变化,如果只copy lib目录下的静态库到/usr/lib下,就是只copy libmp3lame.a文件,编译出来的ffmpeg最终就不会对libmp3lame的动态库有依赖关系,这是因为编译首先找动态库,动态库没有才找静态库。如果不做这个copy,后面编译ffmpeg时无论如何指定参数,都会报错LAME not found,不知道是哪里的bug。
(7) 从http://ffmpeg.mplayerhq.hu/取得最新的ffmpeg,现在自由软件都大量采用SVN了,要先装一个SVN,可以去http://tortoisesvn.tigris.org/下载windows版的SVN,去http://subversion.tigris.org/下载linux版的SVN。SVN如何编译安装这里就省略了。
(8) 如果在windows下,打开解压后的ffmpeg目录下的Makefile文件,在FFLIBS的那一行后面加上-lmp3lame$(BUILDSUF)。这个也不知道是哪个bug引起的,搞了好长时间才搞出来,郁闷。Linux下不用这样。
4 ffmpeg的编译
配置编译
for x86
#./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
补充1:
关于3gp的编译,如果大家要编译--enable-amr_nb-fixed,那就不能跟--enable-amr_nb同时编译,我不大清楚这两者到底有什么区别,似乎
fixed是修正版,管他呢,编译的方法:
wget http://www.3gpp.org/ftp/Specs/ar ... 6.073/26073-510.zip
解压以后把里面的文件都拷贝到libavcodec/amr目录下
修改libavcodec/amr/makefile 找到CFLAGS =-Wall -pedantic-errors -I. $(CFLAGS_$(MODE)) -D$(VAD) 换成CFLAGS = -Wall -I.
$(CFLAGS_$(MODE)) -D$(VAD) -DMMS_IO
整体编译参数就是
#./configure --prefix=/usr --enable-gpl --enable-shared--enable-mp3lame --enable-amr_nb-fixed --enable-amr_wb --enable-amr_if2--enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin--enable-dts --enable-pp --enable-faad --enable-faadbin --enable-faac--enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay
make
make install
for x86的简易配置
#./configure --prefix=./install --disable-shared--enable-pthreads --enable-libx264 --enable-libxvid --arch=i686 --enable-gpl
#make
#make install
for arm
配置编译
#./configure--prefix=/home/zht/redhatzht/sources/image-colletct/ffmpeg/install--enable-static --disable-shared --enable-libx264 --enable-libxvid--cross-compile --cc=arm-linux-gcc --arch=arm --enable-gpl --disable-strip--disable-network --disable-ipv6 --disable-vhook --disable-audio-beos--disable-audio-oss --disable-mpegaudio-hp--enable-pthreads--enable-small --disable-parsers --disable-debug
#make
#make install
注意:
(1)“/home/zht/redhatzht/sources/image-colletct/ffmpeg”为ffmpeg源码所在目录。
(2)“/usr/local/arm”为arm-linux-gcc交叉编译器所在目录。
(3) 如果库文件安装在/usr/local/lib目录中导致配置失败,可以在/etc/ld.so.conf文件中添加/usr/local/lib目录,然后执行#ldconfig。
x86上的ldconfig不能在arm上运行,arm上的ldconfig工具是在建立交叉编译器时,编译glibc是产生的,可以拷贝到arm-linux中。
(4) 本文大部分内容来自网络,其中xvid,x264的库,我亲手安装过,ffmpeg的配置编译for x86的简易配置,for arm,我亲手配置编译过,并在x86,arm上可用,编译配置都是采用静态库。
5 ffmpeg用法
ffmpeg作为媒体文件处理软件,基本用法如下:
ffmpeg -i INPUTfile [OPTIONS] OUTPUTfile
输入输出文件通常就是待处理的多媒体文件了。可以是纯粹的音频文件,纯粹的视频文件,或者混合的。ffmpeg支持绝大部分的常见音频,视频格式,象常见的 各种mpeg,AVI封装的DIVX和Xvid等等,具体的格式支持列表可以使用ffmpeg -formats查看或直接查阅文档。
另外,由于Linux把设备视为文件,因此-i选项后可以跟设备名。比如DV,视频卡,光驱或者其它的各类设备。输出的内容通过
Options调整,其主要的选项如下:
-vcodec视频流编码方式
-b 视频流码率(默认只有200k,一般都需要手动设置,具体的数值视codec选择而定)
-r 视频流帧数(一般说来PAL制式通常用25,NTSC制式通常用29)
-s 视频解析度(分辨率,也要视codec和你的需要而定。另:具体写法使用“数字x数字”的形式)
-t 处理持续时间。
-acodec 音频流编码方式
-ab 音频流码率(默认是同源文件码率,也需要视codec而定)
-ar 音频流采样率(大多数情况下使用44100和48000,分别对应PAL制式和NTSC制式,根据需要选择)
-vn屏蔽视频流
-an屏蔽音频流
-author设置媒体文件的作者
-title设置媒体文件的题目
-f强制使用某种格式
-target type 使用预置的格式转换(可以转成dvd,vcd或svcd)
除此之外还有些更高级的选项,如设定vbr,或设定high quality,或者设定vbr的buff和max/min码率,象一般我们自用的dvd抓轨啦,DV转vcd dvd啦,网上下载的电影转成vcd或dvd都不一定需要用到它们。
常用命令选项说明
-fromats 显示可用的格式
-f fmt 强迫采用格式fmt
-I filename 输入文件
-y 覆盖输出文件
-t duration 设置纪录时间hh:mm:ss[.xxx]格式的记录时间也支持(截图需要)
-ss position 搜索到指定的时间[-]hh:mm:ss[.xxx]的格式也支持
-title string 设置标题
-author string 设置作者
-copyright string 设置版权
-comment string 设置评论
-target type 设置目标文件类型(vcd,svcd,dvd),所有的格式选项(比特率,编解码以及缓冲区大小)自动设置,只需要输入如下的就可以了:ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-hq 激活高质量设置
-b bitrate 设置比特率,缺省200kb/s
-r fps 设置帧频,缺省25
-s size 设置帧大小,格式为WXH,缺省160X128.下面的简写也可以直接使用:Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 设置横纵比 4:316:9 或 1.3333 1.7777
-croptop/botton/left/right size 设置顶部切除带大小,像素单位
-padtop/botton/left/right size 设置顶部补齐的大小,像素单位
-padcolor color 设置补齐条颜色(hex,6个16进制的数,红:绿:蓝排列,比如 000000代表黑色)
-vn 不做视频记录
-bt tolerance 设置视频码率容忍度kbit/s
-maxrate bitrate设置最大视频码率容忍度
-minrate bitreate 设置最小视频码率容忍度
-bufsize size 设置码率控制缓冲区大小
-vcodec codec 强制使用codec编解码方式. 如果用copy表示原始编解码数据必须被拷贝.(很重要)
-ab bitrate 设置音频码率
-ar freq 设置音频采样率
-ac channels 设置通道,缺省为1
-an 不使能音频纪录
-acodec codec 使用codec编解码
-vd device 设置视频捕获设备,比如/dev/video0
-vc channel 设置视频捕获通道DV1394专用
-tvstd standard 设置电视标准 NTSC PAL(SECAM)
-dv1394 设置DV1394捕获
-av device 设置音频设备 比如/dev/dsp
-map file:stream 设置输入流映射
-debug 打印特定调试信息
-benchmark 为基准测试加入时间
-hex 倾倒每一个输入包
-bitexact 仅使用位精确算法 用于编解码测试
-ps size 设置包大小,以bits为单位
-re 以本地帧频读数据,主要用于模拟捕获设备
-loop 循环输入流。只工作于图像流,用于ffserver测试
5 example
(1) ffmpeg的使用
"Video and Audio grabbing"
FFmpeg can use a video4linux compatible video sourceand any Open Sound System audio source:
ffmpeg/tmp/out.mpg
Note that you must activate the right video source andchannel before launching ffmpeg. You can use any TV viewer such as
xawtv (
levels with a standard mixer.
"Video and Audio file format conversion"
* You can input from YUV files:
ffmpeg -i /tmp/test%d.Y/tmp/out.mpg
The Y files usetwice the resolution of the U and V files. They are raw files, without header.They can be generated by all decent video decoders. You must specify the sizeof the image with the -s option if ffmpeg cannot guess it.
* You can input from a RAW YUV420P file:
ffmpeg -i/tmp/test.yuv /tmp/out.avi
The RAW YUV420P is a file containing RAW YUV planar,for each frame first come the Y plane followed by U and V planes, which arehalf vertical and horizontal resolution.
* You can output to a RAW YUV420P file:
ffmpeg -imydivx.avi -o hugefile.yuv
* You can set several input files and outputfiles:
ffmpeg -i/tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
Convert the audio file a.wav and the raw yuv video filea.yuv to mpeg file a.mpg
* You can also do audio and video conversions at thesame time:
ffmpeg -i/tmp/a.wav -ar 22050 /tmp/a.mp2
Convert the sample rate of a.wav to 22050 Hz and encodeit to MPEG audio.
* You can encode to several formats at the same timeand define a mapping from input stream to output streams:
ffmpeg -i/tmp/a.wav -ab 64 /tmp/a.mp2 -ab 128 /tmp/b.mp2 -map 0:0 -map 0:0
Convert a.wav to a.mp2 at 64 kbits and b.mp2 at 128kbits. "-map file:index" specify which input stream is used for eachoutput stream, in the order of the definition of output streams.
* You can transcode decrypted VOBs
ffmpeg -isnatch_1.vob -f avi -vcodec mpeg4 -b 800 -g 300 -bf 2 -acodec mp3 -ab 128snatch.avi
This is a typical DVD ripper example, input from a VOBfile, output to an AVI file with MPEG-4 video and MP3 audio, note that in this command we use B frames so theMPEG-4 stream is DivX5 compatible, GOP size is 300 that means an INTRA frameevery 10
seconds for 29.97 fps input video.Also theaudio stream is MP3 encoded so you need LAME support which is enabled using--enable-mp3lame when configuring.The mapping is particularlyuseful for DVD transcoding to get the desired audio language.
NOTE: to see the supported input formats, use ffmpeg-formats.
(2) ffplay的使用
ffplay - FFplay media player
SYNOPSIS
ffplay [options] input_file
DESCRIPTION
FFplay is a very simple and portable media player usingthe FFmpeg libraries and the SDL library. It is mostly used as a test bench forthe various APIs of FFmpeg.
OPTIONS
"Main options"
show help force displayed width force displayed heightdisable audio disable video disable graphical display force format
"Advanced options"
show the stream duration, the codec parameters, thecurrent position in the stream, and the audio/video synchronisation drift.force RTP/TCP protocol usage instead of RTP/UDP. It is only meaningful if youare doing stream with the RTSP protocol.
set the master clock to audio ( type=audio), video (type=video) or external ( type=ext). Default is audio. The master clock is usedto control audio-video synchronization. Most media players use audio as masterclock, but in some cases (streaming or high quality broadcast) it is necessaryto change that. This option is mainly used for debugging purposes.
(3) ffserver的使用
ffsserver - FFserver video server
SYNOPSIS
ffserver [options]
DESCRIPTION
FFserver is a streaming server for both audio andvideo. It supports several live feeds, streaming from files and time shiftingon live feeds (you can seek to positions in the past on each live feed,provided you specify a big enough feed
storage in ffserver.conf).
This documentation covers only the streaming aspects offfserver / ffmpeg. All questions about parameters for ffmpeg, codec questions,etc. are not covered here. Read ffmpeg-doc.html for more information.
OPTIONS
print the license print the help use configfile insteadof /etc/ffserver.conf
6 其他(参考)
(1)mencoder篇
首先获取mplayer软件包极其mplayer官网上自带的codecs.如果喜欢mplayer,也可以下载gui和font.关于mplayer-1.0rc1在71.21的/home/zhengyu/tools中能找到.如果需要网上下载,可以去官网:http://www.mplayerhq.hu/de...下载rc1地址如
下:http://www1.mplayerhq.hu/M...最新的svn版本:http://www1.mplayerhq.hu/M...官网同时也给出了一些codec,其中就有rm格式的codec:http://www1.mplayerhq.hu/M... xplore也提供下载,mplayer1.0rc1下载,codec下载.
下载完成之后,将tar vxjf essential-20061022.tar.bz2;sudo mkdir -p/usr/lib/codecs;sudo cp -rf essential-20061022/*
/usr/lib/codecs;然后解包mplayer,按如下方式编译:
./configure --prefix=/usr/local --enable-gui--enable-largefiles--enable-gif --enable-png --enable-jpeg--language=zh_CN --with-codecsdir=/usr/lib/codecs/
make
(sudo make install)
然后就可以使用mencoder,当然也有一个没有gui的mplayer可以播放各种视频了.不过我们需要的是mencoder.至此,ffmpeg+mencoder搭建完成.
(2) 常见操作说明
对于ffmpeg,可以将除swf,rmvb,wmav9以外的视频/音频格式转换成flv/mp3,同时可以截取这些视频文件中的某个时间的该帧图片.这些实际上就是一个视频播客显示的部分.对于mencoder,支持各种常见格式的视频/音频转换成flv/mp3.或者转换成avi.
1) ffmpeg进行操作的常用方法:
* 转换成flv文件:ffmpeg -i infile.* -y (-ss second_offset -ar ar -ab ab -r vr -b vb-s vsize) outfile.flv
其中second_offset是从开始的多好秒钟.可以支持**:**:**格式,至于ar,ab是音频的参数,可以指定ar= 22050,24000,44100(PAL制式),48000(NTSC制式),后两种常见,ab=56(视音频协议的codec而定,如果要听高品质,则80以上).vr,vb,vsize是视频参数,可以指定vr=15,25(PAL),29(NTSC),vb=200,500,800,1500 (视视频协议的codec而定,可以通过查看专业的codec说明文档获取,如果你手头有一份详细的各种codec的文档,请提供一份给我,不胜感 激.),还有一些参数-acodec ac -vcodec vc(ac指定音频codec,ar和ab可以省去,vc指定视频codec,vr和vb可以省去,自动采用相应的codec参数)还有很多高级参数,如 -qmin,-qcale等,请查看详细文档。还有-an和-vn参数,分别从多媒体文件中提取出纯粹视频和音频。另,如果你是用shell批量处理,请使用-y参数覆盖生成flv.
* 截取图片:ffmpeg-i infile.* -y (-ss second_offset) -t 0.001 -s msize (-f image_fmt) outfile.jpg
其中second_offset同上,msize同vsize,图片大小.image_fmt=image2强制使用 jpg,image_fmt=gif,强制使用gif格式.还可以用-vframes fn指定截取某帧图片,fn=1,2,3,...
2)mencoder操作
mencoder的作用主要在视频转码方面.在安装完mplayer后,mencoder也编译生成了.可以man mencoder获取mencoder的说明文档. mencoder的参数更加复杂,不过也无非是音频处理视频处理两个方面,可以参看网络例子:http://www.masoncn.com/pos...这里不作详细的列举了.
mencoder进行操作的常用方法: mencoder infile.* -o outfile.* [-ovc 目标视频格式] [-oac 目标音频格式] [-of 目标文件格式]
* 转换成flv文件: mencoder infile.* -o outfile.flv -of lavf -oac mp3lame -lameoptsabr:br=56 -ovc lavc -lavcopts
vcodec=flv:vbitrate=150:mbd=2:mv0:trell:v4mv:cbp:last_pred=3-srate 22050
* 转换成avi文件: mencoder infile.* -o outfile.avi -of avi -oac mp3lame -lameoptspreset=64 -ovc xvid -xvidencopts
bitrate=600
* 转换成wmv文件(复杂写法,其中高级参数可以省去): mencoder infile.* -o outfile.wmv -of lavf -ofps 25 -oac mp3lame-lameopts
cbr:preset=128 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=768:mbd=2:mv0:trell:v4mv:cbp:last_pred=3-vf scale=320:240 -srate
22050 -sws 9 -subcp cp936 -subpos 0 -subalign 0-subfont-text-scale 3 -lavfopts i_certify_that_my_video_strea
其中-ovc,-oac和-of是必须的,-ovc是指定视频codec,指定了ovc之后通常带一个该codec的opt参数,-oac是指定音频 codec,也会在其后带一个codec的opt参数.可以指定细节以决定视频音频质量和转换速率.具体的细节可以参看专业的技术文档.
7ffmpeg配置选项
[root@web ffmpeg]# ./configure --help
Usage: configure [options]
Options: [defaults in brackets after descriptions]
Standard options: 基本选项参数
--help 显示此帮助信息|print this message
--log[=FILE|yes|no] 记录测试并输出到config.err文件|log tests and output to FILE [config.err]
--prefix=PREFIX 安装程序到指定目录(默认/usr/local)|install in PREFIX [/usr/local]
--libdir=DIR 安装库到指定目录(默认prefix/lib)|install libs in DIR [PREFIX/lib]
--shlibdir=DIR 指定共享库路径(默认prefix/lib)|install shared libs in DIR [PREFIX/lib]
--incdir=DIR 指定includes路径(默认prefix/include/ffmpeg)|installincludes in DIR[PREFIX/include/ffmpeg]
--mandir=DIR 指定man page路径(默认prefix/man)install manpage in DIR [PREFIX/man]
--enable-mp3lame 启用mp3编码libmp3lame(默认关闭)enableMP3 encoding via libmp3lame[default=no]
--enable-libogg 启用ogg支持libogg(默认关闭)enable Oggsupport via libogg [default=no]
--enable-vorbis 启用Vorbis支持libvorbis(默认关闭)enableVorbis support via libvorbis [default=no]
--enable-faad 启用faad支持libfaad(默认关闭)enable FAADsupport via libfaad [default=no]
--enable-faadbin 启用faad运行时链接支持(默认关闭)build FAAD support with runtime linking[default=no]
--enable-faac 启用faac支持libfaac(默认关闭)enable FAACsupport via libfaac [default=no]
--enable-libgsm 启用GSM支持libgsm(默认关闭)enable GSMsupport via libgsm [default=no]
--enable-xvid 启用xvid支持xvidcore(默认关闭)enableXviD support via xvidcore [default=no]
--enable-x264 启用H.264编码(默认关闭)enable H.264 encoding via x264 [default=no]
--enable-mingw32 启用MinGW本地/交叉win环境编译|enable MinGW native/cross Windows compile
--enable-mingwce 启用MinGW本地/交叉winCE环境编译enable MinGW native/cross WinCE compile
--enable-a52 启用A52支持(默认关闭)enable GPLed A52 support [default=no]
--enable-a52bin 启用运行时打开liba52.so.0(默认关闭)open liba52.so.0 at runtime [default=no]
--enable-dts 启用DTS支持(默认关闭)enable GPLed DTS support [default=no]
--enable-pp 启用后加工支持(默认关闭)enableGPLed postprocessing support [default=no]
--enable-static 构建静态库(默认启用)buildstatic libraries [default=yes]
--disable-static 禁止构建静态库(默认关闭)donot build static libraries [default=no]
--enable-shared 构建共享库(默认关闭)buildshared libraries [default=no]
--disable-shared 禁止构建共享库(默认启用)donot build shared libraries [default=yes]
--enable-amr_nb 启用amr_nbfloat音频编解码器|enable amr_nbfloat audio codec
--enable-amr_nb-fixed 启用fixed amr_nb codec | use fixed point for amr-nb codec
--enable-amr_wb 启用amr_wbfloat音频编解码器|enable amr_wbfloat audio codec
--enable-amr_if2 启用amr_wb IF2音频编解码器|enable amr_wb IF2 audio codec
--enable-sunmlib 启用Sunmedialib(默认关闭) | use Sunmedialib [default=no]
--enable-pthreads 启用pthreads(多线程)(默认关闭)use pthreads [default=no]
--enable-dc1394 启用libdc1394、libraw1394抓取IIDC-1394(默认关闭)enable IIDC-1394 grabbing using libdc1394 and
libraw1394 [default=no]
--enable-swscaler 启用计数器支持?(默认关闭)softwarescaler support [default=no]
--enable-avisynth 允许读取AVISynth脚本本件(默认关闭)allow reading AVISynth script files [default=no]
--enable-gpl 允许使用GPL(默认关闭)allow use of GPL code, the resulting libav* and ffmpeg will be underGPL
[default=no]
Advanced options (experts only): 高级选项参数(供专业人员使用)
--source-path=PATH 源码的路径(当前为/root/flv/ffmpeg)| path to source code [/root/flv/ffmpeg]
--cross-prefix=PREFIX 为编译工具指定路径 | use PREFIX for compilation tools []
--cross-compile 假定使用了交叉编译 |assume a cross-compiler is used
--cc=CC 指定使用何种C编译器(默认gcc)use C compiler CC [gcc]
--make=MAKE 使用特定的make |use specified make [make]
--extra-cflags=ECFLAGS 添加ECFLAGS到CFLAGS | add ECFLAGSto CFLAGS []
--extra-ldflags=ELDFLAGS 添加ELDFLAGS到LDFLAGS(默认-Wl,--as-needed)| add ELDFLAGS to LDFLAGS [ -Wl,--as-needed]
--extra-libs=ELIBS 添加ELIBS | add ELIBS[]
--build-suffix=SUFFIX 为专用程序添加后缀 | suffix for application specific build []
--arch=ARCH 选择机器架构(默认x86)select architecture[x86]
--cpu=CPU 选用最低的cpu(影响指令的选择,可以在老CPU上出错) | selects theminimum cpu required (affects
instruction selection, may crash on older CPUs)
--powerpc-perf-enable 启用PPC上面的性能报告(需要启用PMC)enable performance report on PPC
(requires enabling PMC)
--disable-mmx 禁用MMX |disable MMX usage
--disable-armv5te 禁用armv5te | disablearmv5te usage
--disable-iwmmxt 禁用iwmmxt |disable iwmmxt usage
--disable-altivec 禁用AltiVec | disableAltiVec usage
--disable-audio-oss 禁用OSS音频支持(默认启用)disable OSS audio support [default=no]
--disable-audio-beos禁用BeOS音频支持(默认启用)disable BeOS audio support [default=no]
--disable-v4l 禁用video4linux提取(默认启用)disable video4linux grabbing [default=no]
--disable-v4l2 禁用video4linux2提取(默认启用)disable video4linux2 grabbing [default=no]
--disable-bktr 禁用bktr视频提取(默认启用)disable bktr video grabbing [default=no]
--disable-dv1394 禁用DV1394提取(默认启用)disable DV1394 grabbing [default=no]
--disable-network 禁用网络支持(默认支持)disablenetwork support [default=no]
--disable-ipv6 禁用ipv6支持(默认支持)disable ipv6 support [default=no]
--disable-zlib 禁用zlib(默认支持)disable zlib [default=no]
--disable-simple_idct 禁用simple IDCT例程(默认启用)disablesimple IDCT routines [default=no]
--disable-vhook 禁用videohooking支持 | disable videohooking support
--enable-gprof enable profiling with gprof [no]
--disable-debug 禁用调试符号 |disable debugging symbols
--disable-opts 禁用编译器最优化 |disable compiler optimizations
--disable-mpegaudio-hp 启用更快的解码MPEG音频(但精确度较低)(默认禁用)faster(but less accurate) MPEG audio decoding
[default=no]
--disable-protocols 禁用 I/O 协议支持(默认启用)disable I/O protocols support [default=no]
--disable-ffserver 禁用生成ffserver |disable ffserver build
--disable-ffplay 禁用生成ffplay |disable ffplay build
--enable-small 启用优化文件尺寸大小(牺牲速度)optimize for size instead of speed
--enable-memalign-hack 启用模拟内存排列,由内存调试器干涉? | emulate memalign, interferes with memory debuggers
--disable-strip 禁用剥离可执行程序和共享库| disable stripping of executables and shared libraries
--disable-encoder=NAME 禁用XX编码器 | disablesencoder NAME
--enable-encoder=NAME 启用XX编码器 | enables encoderNAME
--disable-decoder=NAME 禁用XX解码器 | disablesdecoder NAME
--enable-decoder=NAME 启用XX解码器 | enables decoderNAME
--disable-encoders 禁用所有编码器 | disablesall encoders
--disable-decoders 禁用所有解码器 | disablesall decoders
--disable-muxer=NAME禁用XX混音器 | disables muxer NAME
--enable-muxer=NAME 启用XX混音器 | enables muxer NAME
--disable-muxers 禁用所有混音器 |disables all muxers
--disable-demuxer=NAME 禁用XX解轨器 | disablesdemuxer NAME
--enable-demuxer=NAME 启用XX解轨器 | enables demuxerNAME
--disable-demuxers 禁用所有解轨器 | disablesall demuxers
--enable-parser=NAME启用XX剖析器 | enables parser NAME
--disable-parser=NAME 禁用XX剖析器 | disables parserNAME
--disable-parsers 禁用所有剖析器 | disablesall parsers
8 参考资料
ffmpeg的编译大全
ffmpeg的使用
ffmpeg_mencoder环境搭建和视频处理总结
自译的ffmpeg ./configure参数
mplayer 使用手册(中文)
MPlayer
名称
概要
说明
一般注记
播放选项 ( 仅用于 MPLAYER)
分路器 / 媒体流选项
OSD/ 字幕选项
音频输出选项 ( 仅用于 MPLAYER)
视频输出选项 ( 仅用于 MPLAYER)
解码 / 滤镜选项
编码选项 ( 仅用于 MENCODER)
键盘控制
SLAVE 模式协议
文件
示例
BUGS
作者
标准声明
名称
mplayer − Linux下的电影播放器
mencoder − Linux下的电影编码器
概要
mplayer [选项] [ 文件 | URL | 播放列表 | - ]
mplayer [全局选项] 文件1 [特定选项] [文件2] [特定选项]
mplayer [全局选项] {一组文件和选项} [针对该组的特定选项]
mplayer [dvd|vcd|cdda|cddb|tv]://title [选项]
mplayer [mms[t]|http|http_proxy|rt[s]p]:// [用户名:密码@]URL[:端口] [选 项]
mencoder [选项] [ 文件 | URL | - ] [−o 输出文件]
gmplayer [选项] [−skinskin]
说明
mplayer 是一个LINUX下的电影播放器, (也能运行在许多其它的Unices 和非x86 的CPU 上, 参看文档). 它能使用本地的, XAnim, Win32 DLL的编解码器播放绝大 部分的MPEG/VOB, AVI, ASF/WMA/WMV, RM, QT/MOV/MP4, OGG/OGM, VIVO, FLI,NuppelVideo, yuv4mpeg, FILM 和RoQ 文件. 你还能观看VideoCD,SVCD,DVD, 3ivx, DivX 3/4/5甚至WMV电影(不需要使用avifile库).
MPlayer 的另一个优越的特性是对输出设备的广泛的支持. 它可以使 用X11, XV,DGA, OpenGL, SVGAlib, fbdev, AAlib, DirectFB, 但你也可以使用GGI, SDL(由 此可以使用他们的所有驱动),VESA(所有VESA兼容的显卡,甚至可以 没有X11), 某 些 低级的显卡相关的驱动(Matrox,3Dfx和ATI)和一些硬件MPEG解码器卡, 比 如Siemens DVB,DXR2和DXR3/Hollywood+. 它们中绝大多数支持软件或硬件缩放, 所以你可以 享 受全屏电影.
MPlayer 具有onscreendisplay(OSD)功能, 用来显示状态信息, 清晰放大反锯齿 带阴影的字幕和键盘控制的视觉反馈. 支持的字体包括欧洲语种/ISO8859-1,2 ( 匈 牙 利语, 英语, 捷克语等等), 西里尔语和韩语, 可以播放10种格式的字幕文件(MicroDVD, SubRip, SubViewer, Sami, VPlayer, RT, SSA, AQTitle,JACOsub 和 我 们 自 己 的: MPsub)和DVD字幕(SPU流, VobSub和隐藏字幕数据 表(ClosedCaptions)).
mencoder (MPlayer的电影编码器)是一个简单的电影编码器, 设计用来把MPlayer 可以播放的电影(见上面)编码成另一些MPlayer可以播放的格式(见下面). 它可 以通过1, 2或者3 pass的方式编码DivX4, XviD,libavcodec的编解码器支持的视 频格式和PCM/MP3/VBRMP3的音频. 进一步的它还拥有流复制的能力, 一个强大的插件系统(crop, expand, flip, postprocess, rotate, scale, noise, rgb/yuv 转换)和更多.
gmplayer 是使用图形用户界面的MPlayer.它使用跟MPlayer相同的参数.
一般注记
参见HTML文档!
每个’flag’选项都有一个对应的’noflag’选项, 比如−fs选项的对应选项是−nofs.
你可以把所有选项放在配置文件中, mplayer每次运行时都会读取它们. 系统范围的配置文件’mplayer.conf’在你的配置目录中, (比如/etc/mplayer或者/usr/local/etc/mplayer), 用户特定的配置文件是’~/.mplayer/config’.用户特定的选项优先于系统范围的选项, 而命令行选项优先于这两者. 配置文件的语法是’选项=<参数>’, ’#’后面的都认为是注释. 启用没有参数的选项可以把参数设为’yes’ 或者’1’, 而如果要禁用就把它们设置为’no’或者’0’. 甚至子选项也可以通过这种方式设定.
示例:
# 默认使用Matrox驱动.
vo=xmga
# 我喜欢在看片子的时候练习倒立.
flip=yes
# 从多个png文件解码/编码, 以-mf启动
mf= type=png:fps=25
你也可以制作针对特定文件的配置文件. 如果你希望’movie.avi’这个文件有自己的配置文件, 创建一个叫’movie.avi.conf’的文件, 写上针对该文件的选项, 把它放在~/.mplayer中或者该文件同一目录下.
播放选项 ( 仅用于 MPLAYER)
−, −use-stdin
从标准输入读取数据. −idx选项无法与这个选项同时工作.
−autoq <质量> (与−vf pp一起使用)
根据可用的CPU空闲时间动态调整后期处理的级别. 你设定的数字是允许使用的最高级别. 一般来说你可以使用一些比较大的数字. 你必须使用不带参数的−vf pp才能使用它.
−autosync <因子>
基于音频延迟的检测逐步调整A/V同步. 设定−autosync 0, 也就是默 认值, 将导致帧记时完全基于音频延迟的检测. 设定−autosync 1也是一 样, 但将会微妙的改变所使用的A/V修正算法. 设置大于1的值对那些视频帧速率不均匀, 但用−nosound可以正常播放的电影一般会有帮助. 这 个值越大, 记时方法越接近于−nosound. 对于没有好的音频延迟检测功 能的声卡驱动试试用−autosync 30来平滑这个问题. 使用这个值时, 如 果出现大的A/V同步偏移, 只需要1或2秒就可以摆平. 对于任何声卡驱动, 打开这个选项的唯一缺点就是对于突然的A/V偏移的反应延迟时间.
−benchmark
在终端显示一些CPU使用率和丢帧数的统计信 息. 与−nosound 和−vo null联合使用可以用来评测视频解码器.
−edl <文件名>
在播放时启用编辑决定列表(EDL)的动作. 根据所给文件的内容, 可以跳 过视频, 静音和取消静音. 具 体 内 容 和 使 用 方 法 参 见DOCS/documentation.html#edl.
−edlout <文件名>
建立一个新文件并写入编辑决定列表(EDL)的记录. 在播放时, 当用户按 下’i’, 一个跳过下面两秒的记录将写入文件. 用户以后可以以此作为调 整EDL记录的出发点. 具体内容参见DOCS/documentation.html#edl.
−enqueue (仅用于GUI)
将命令行中的文件加入播放序列而不是立刻播放它们.
−fixed-vo (BETA代码!)
对多个文件使用一个固定的视频系统(对所有文件初始化/释放一次). 所以对所有文件只使用一个窗口, 目前fixed-vo兼容的驱 动 有: x11, xv,xvidix, xmga, gl2, and svga.
−framedrop (参见−hardframedrop)
跳过一些帧从而在慢的机器上实现A/V同步.视频滤镜不会应用到这些帧上. 对于B帧解码也会完全跳过.
−h, −help, −−help
显示简短的选项摘要.
−hardframedrop
丢掉更多的帧(破坏解码). 导致图像破损!
−identify
用容易分析的格式显示文件参数. 调用的TOOLS/midentify脚本将滤除mplayer的其它输出而(但愿能)留下文件名.
−input <命令>
这个选项可以用来配置输入系统的特定部分. 路径相对于~/.mplayer/.
注意:
自动重复功能目前只有游戏操纵杆支持.
可用的命令有:
conf=<文件>
读取另外的input.conf. 如果没有给出路径名, 将假设是~/ .mplayer.
ar−delay
在开始自动重复一个键之前等待多少毫秒(0代表禁用).
ar−rate
当自动重复是每秒重复多少次.
keylist
列出所有可以被绑定的键.
cmdlist
列出所有可以被绑定的命令.
js−dev
指定可用的游戏操纵杆设备(默认为/dev/input/js0).
file
从指定文件读取命令, 用于命名管道很有效.
−lircconf <文件>
指定LIRC(Linux Infrared Remote Control, 参见http://www.lirc.org)的配置文件, 如果你不喜欢默认的~/.lircrc的话.
−loop <数字>
重复播放电影<数字>遍. 0表示不断重复.
−menu (BETA代码)
打开OSD菜单支持.
−menu-root <参数> (BETA代码)
指定主菜单.
−menu-cfg <文件> (BETA代码)
使用另外的menu.conf.
−nojoystick
关闭游戏操纵杆的支持. 默认是只要编译了就会打开.
−nolirc
关闭LIRC支持.
−nortc
关闭使用Linux的RTC(real-time clock− /dev/rtc)作为计时 器的功能.
−playlist <文件>
根据播放列表播放文件(每行一个文件或者Winamp或ASX格式).
−quiet
显示较少的输出和状态信息.
−really−quiet
显示更少的输出和状态信息.
−sdp
指定输入文件为描述一个RTP会话 的SDP(’SessionDescription Protocol’)文件, (参见http://www.live.com/mplayer/).
−shuffle
以随机顺序播放文件.
−skin
从指定目录中装载skin(没有路径名).
示例:
−skin fittyfene
尝试Skin/fittyfene. 将 会 首 先 察 看/usr/local/share/mplayer/,然后是~/.mplayer/.
−slave
这个选项打开slave模式. 这用来将MPlayer作为其它程序的后 端. MPlayer将从他的标准输入读取简单命令行, 而不再截获键盘事件. SLAVE模式协议部分将解释其语法.
−softsleep
使用高质量的软件计时器. 跟RTC同样精确且不需要特别权限. 代价是更 高的CPU消耗.
−speed <0.01−100>
设置播放速率.
−sstep <秒>
设定各帧显示之间的时间间隔. 用于幻灯片播放.
分路器 / 媒体流选项
−aid <标识> (参见 −alang选项)
选择音频频道 [MPEG: 0−31 AVI/OGM: 1−99 ASF/RM: 0−127 VOB(AC3): 128−159VOB(LPCM): 160−191] MPlayer在冗长(-v)模式下会显示可用的标识.
−alang <两个字母的国家代码>(参见−aid选项)
仅用于DVD播放. 它选择DVD的音频语言并总是尝试播放与所给代码符合 的语言. 加上−v参数观察输出可以获得可用语言的列表.
示例:
−alang hu,en
播放匈牙利语, 英语在没有匈牙利语时备用.
−audio−demuxer <数字> (仅用于−audiofile)
指定用于−audiofile的分路器. 分路器的标识在demuxers.h 中. 使用−audio−demuxer 17将指定.mp3检测.
−audiofile <文件名>
在看电影时播放外部文件(WAV, MP3或Ogg Vorbis)的音频.
-audiofile-cache
对-audiofile的文件流启用缓存, 使用指定大小的内存.
−bandwidth <参数>
设定网络流的最大带宽(用于服务器可以以不同带宽传送内容的情况).当你以慢速连接观看流媒体实况时有用.
−cdrom−device <设备路径>
替代默认的CDROM设备名/dev/cdrom.
−cache
这个选项设定用多少内存(以kBytes为单位)作为播放文件/URL的预缓冲. 对速度慢的媒体特别有用(默认为−nocache).
−cdda <选项1:选项2>
这个选项用来调整MPlayer的CD音频读取特性.
可用选项有:
speed=<参数>
设定CD转速
paranoia=<0−2>
设定谨慎级别
0: 关闭检测
1: 只进行重叠检测(默认)
2: 完全数据修正和校检
generic-dev=<参数>
使用指定的通用SCSI设备
sector-size=<参数>
单位读取量
overlap=<参数>
将校检时的最小重叠搜索设置为<参数>个扇区.
toc-bias
假定TOC中报告的第1音轨的起始偏移量将按照LBA 0定位. 有些
toc-offset=<参数>
给定位音轨时在报告的扇区数上再加上<参数>个扇区. 可以是负 数.
(no)skip
(不)接受不完整的数据重建.
−channels <数字>
改变播放的声道数, 如果没有设定默认值为’2’. 如果输出声道数比输入声道数多时, 将插入空声道(但在将单声道混合为立体声时, 会把单声道 复 制到两个输出声道). 如果输出声道比输入声道少, 结果取决与所用 的音频解码器(−afm).MPlayer会要求解码器把音频解码到跟指定数 量的声道. 由解码器来实现这个要求. 如果解码器的输出比要求的多, 多 余的声道会被去掉. 这个选项通常只有在播放AC3音频(比如DVD)的视频 时才显得重要. 在那时默认使用liba52解码并把音频适当的混合到需要 的输出声道.
注意:
这个选项可以被解码器(仅用于AC3)滤镜(surround)和音频输出驱动( 至少OSS可以)接受.
可用选项有:
2
Stereo
4
Surround
6
Full 5.1
−chapter <场景标识>[-<结束的场景标识>]
设定从哪个场景开始播放. 也可以设定在哪个场景结束播放(默认值: 1). 示例可以在下面找到.
−csslib <文件名>
(老式DVD选项)这个选项用来替代libcss.so的默认位置.
−cuefile <文件名> (参见−vcd)
从指定的文件中描述的, CDRwin的(bin/cue文件格式)光盘 镜 像 中 播 放(S)VCD.
−demuxer <参数>
指定分路器类型. 分路器的标识定义在demuxers.h中. 使用−demuxer 17将指定.mp3检测.
−dumpaudio (仅用于MPLAYER)
将原始的音频压缩流复制到./stream.dump(用于mpeg/ac3).
−dumpfile <文件名> (仅用于MPLAYER)
指定MPlayer复制的输出文件. 应该与−dumpaudio / −dumpvideo / −dumpstream一起使用.
−dumpstream (仅用于MPLAYER)
将原始流复制到./stream.dump. 当从DVD或网络上rip时候有用.
−dumpvideo (仅用于MPLAYER)
将原始的视频压缩流复制到./stream.dump(不是十分好用).
vd://<节目标识>
告诉MPlayer播放哪个电影(通过节目标识指定). 比如有时’1’是一部预告片, 而’2’才是真正的电影.
注意:
有时DVD播放时需要进行交错/逐行扫描转换, 参见−vf pp=0x20000选项.
−dvd−device <设备路径>
替代默认的DVD设备名/dev/dvd.
−dvdangle <视角标识>
有些DVD 碟 片中的场景可以从多个视角观看. 通过这个选项你可以告 诉MPlayer使用那个视角(默认值: 1). 示例可以在下面找到.
−dvdauth
(老式DVD选项)打开指定设备的DVD认证.
−dvdkey
(老式DVD选项)当解码一个由DVD上复制的未解密的VOB文件时, 用这个选项提供解码VOB需要的CSS密钥(密钥在−dvdauth通过DVD设备认证时会显 示出来).
−dvdnav (BETA代码!)
强行使用libdvdnav.
−forceidx
指定重新生成索引. 对索引损坏的文件(不同步等等)有用. 可以进行收缩. 你能使用MEncoder永久性的修复索引(参见文档).
−fps <参数>
替代帧速率(如果文件头中没有该参数/参数是错误的)(浮点数).
−frames <参数>
只播放/转换前<参数>帧, 然后退出.
−hr−mp3−seek (仅用于MP3)
高精度mp3搜索. 默认为: 在播放外部MP3文件时启用, 因为我们需要搜 索到非常精确的位置来保持A/V同步. 这种方法在后退搜索时特别 慢 − 它需要绕回开头来找到准确的帧.
−idx (参见−forceidx)
在没有找到索引的情况下重建AVI文件的索引, 从而允许搜索. 对于损 坏的/不完整的下载, 或制作低劣的AVI.
−mc <每帧秒数>
每帧的最大A-V同步修正(以秒为单位).
−mf <选项1:选项2:...>
用来从多个PNG或JPEG文件解码.
可用选项有:
on
打开多文件支持
w=<参数>
输出的宽度(自动检测)
h=<参数>
输出的高度(自动检测)
fps=<参数>
输出的帧速率(默认值: 25)
type=<参数>
输入文件的类型(可用类型: jpeg, png, tga,sgi)
−ni (仅用于AVI)
指定使用非交错的AVI分析器(用来处理某些质量差的AVI文件的播放).
−nobps (仅用于AVI)
不使用平均比特率值来维持A−V同步(AVI). 对某些文件头损坏的AVI文件 有帮助.
−noextbased
禁用基于后缀名的分路器选择机制. 默认情况下, 当文件类型(分路器) 无法可靠检测时, (文件没有头部或者不够可靠), 将使用后缀名来选择分路器. 后备的基于内容的分路器总是可用的.
−passwd <密码> (参见−user选项)
设置http认证的密码.
−rawaudio <选项1:选项2:...>
用这个选项你可以播放原始音频文件. 也可以用来播放不是44KHz 16Bit立体声的音频CD.
可用选项有:
on