ffmpeg裁剪

http://it6655.com/2012/09/ffmpeg-9-2-html

1 configure參數html

1 通用選項linux

在linux下進入終端,找到ffmpeg解壓位置,輸入以下命令: root@web ffmpeg]# ./configure –help 獲得configure的基本選項參數,其並無中文解釋。web

--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]app

--incdir=DIR 指定includes路徑(默認prefix/include/ffmpeg)|install includes in DIR[PREFIX/include/ffmpeg]less

--mandir=DIR 指定man page路徑(默認prefix/man)install man page in DIR [PREFIX/man]ide

--enable-mp3lame 啓用mp3編碼libmp3lame(默認關閉)enable MP3 encoding via libmp3lame[default=no]

--enable-libogg 啓用ogg支持libogg(默認關閉)enable Ogg support via libogg [default=no]

--enable-vorbis 啓用Vorbis支持libvorbis(默認關閉)enable Vorbis support via libvorbis [default=no]

--enable-faad 啓用faad支持libfaad(默認關閉)enable FAAD support via libfaad [default=no]

--enable-faadbin 啓用faad運行時連接支持(默認關閉)build FAAD support with runtime linking[default=no]

--enable-faac 啓用faac支持libfaac(默認關閉)enable FAAC support via libfaac [default=no]

--enable-libgsm 啓用GSM支持libgsm(默認關閉)enable GSM support via libgsm [default=no]

--enable-xvid 啓用xvid支持xvidcore(默認關閉)enable XviD 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 啓用後加工支持(默認關閉)enable GPLed postprocessing support [default=no]

--enable-static 構建靜態庫(默認啓用)build static libraries [default=yes]

--disable-static 禁止構建靜態庫(默認關閉)do not build static libraries [default=no]

--enable-shared 構建共享庫(默認關閉)build shared libraries [default=no]

--disable-shared 禁止構建共享庫(默認啓用)do not build shared libraries [default=yes]

--enable-amr_nb 啓用amr_nb float音頻編解碼器|enable amr_nb float audio codec

--enable-amr_nb-fixed 啓用fixed amr_nb codec | use fixed point for amr-nb codec

--enable-amr_wb 啓用amr_wb float音頻編解碼器|enable amr_wb float audio codec

--enable-amr_if2 啓用amr_wb IF2音頻編解碼器|enable amr_wb IF2 audio codec

--enable-sunmlib 啓用Sun medialib(默認關閉) | use Sun medialib [default=no]

--enable-pthreads 啓用pthreads(多線程)(默認關閉)use pthreads [default=no]

--enable-dc1394 啓用libdc139四、libraw1394抓取IIDC-1394(默認關閉)enable IIDC-1394 grabbing using libdc1394 and libraw1394 [default=no]

--enable-swscaler 啓用計數器支持?(默認關閉)software scaler 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 under GPL [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 ECFLAGS to 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 the minimum 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 | disable armv5te usage

--disable-iwmmxt 禁用iwmmxt | disable iwmmxt usage

--disable-altivec 禁用AltiVec | disable AltiVec 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 禁用網絡支持(默認支持)disable network support [default=no]

--disable-ipv6 禁用ipv6支持(默認支持)disable ipv6 support [default=no]

--disable-zlib 禁用zlib(默認支持)disable zlib [default=no]

--disable-simple_idct 禁用simple IDCT例程(默認啓用)disable simple IDCT routines [default=no]

--disable-vhook 禁用video hooking支持| disable video hooking 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編碼器| disables encoder NAME

--enable-encoder=NAME 啓用XX編碼器| enables encoder NAME

--disable-decoder=NAME 禁用XX解碼器| disables decoder NAME

--enable-decoder=NAME 啓用XX解碼器| enables decoder NAME

--disable-encoders 禁用全部編碼器| disables all encoders

--disable-decoders 禁用全部解碼器| disables all decoders

--disable-muxer=NAME 禁用XX混音器| disables muxer NAME

--enable-muxer=NAME 啓用XX混音器| enables muxer NAME

--disable-muxers 禁用全部混音器| disables all muxers

--disable-demuxer=NAME 禁用XX解軌器| disables demuxer NAME

--enable-demuxer=NAME 啓用XX解軌器| enables demuxer NAME

--disable-demuxers 禁用全部解軌器| disables all demuxers

--enable-parser=NAME 啓用XX剖析器| enables parser NAME

--disable-parser=NAME 禁用XX剖析器| disables parser NAME

--disable-parsers 禁用全部剖析器| disables all parsers

 

2 基本選項介紹

如下爲配置ffmpeg的基本選項,其含義以下:

--cache-file=FILE configure會在你的系統上測試存在的特性(或者bug!)。爲了加速隨後進行的配置,測試的結果會存儲在一個cache file裏。當configure到每一個子樹裏都有configure腳本的複雜的源碼樹時,一個很好的cache file的存在會有很大幫助。

--help輸出幫助信息。即便是有經驗的用戶也偶爾須要使用使用--help選項,由於一個複雜的項目會包含附加的選項。例如,GCC包裏的configure腳本就包含了容許你控制是否生成和在GCC中使用GNU彙編器的選項。

--no-create configure中的一個主要函數會製做輸出文件。此選項阻止configure生成這個文件。你能夠認爲這是一種演習(dry run),儘管緩存(cache)仍然被改寫了。

--quiet --silent 當configure進行他的測試時,會輸出簡要的信息來告訴用戶正在做什麼。這樣作是由於configure可能會比較慢,沒有這種輸出的話用戶將會被扔在一旁疑惑正在發生什麼。使用這兩個選項中的任何一個都會把你扔到一旁。(譯註:這兩句話比較有意思,原文是這樣的:If there was no such output, the user would be left wondering what is happening. By using this option, you too can be left wondering!)

--version 打印用來產生'configure'腳本的Autoconf的版本號。

--prefix=PEWFIX --prefix是最經常使用的選項。製做出的Makefile會查看隨此選項傳遞的參數,當一個包在安裝時能夠完全的從新安置他的結構獨立部分。舉一個例子,當安裝一個包,例如說Emacs,下面的命令將會使Emacs Lisp file被安裝到"/opt/gnu/share": $ ./configure --prefix=/opt/gnu --exec-prefix=EPREFIX 與--prefix選項相似,可是他是用來設置結構倚賴的文件的安裝位置。編譯好的emacs二進制文件就是這樣一個問件。若是沒有設置這個選項的話,默認使用的選項值將被設爲和--prefix選項值同樣。

--bindir=DIR 指定二進制文件的安裝位置。這裏的二進制文件定義爲能夠被用戶直接執行的程序。

--sbindir=DIR 指定超級二進制文件的安裝位置。這是一些一般只能由超級用戶執行的程序。

--libexecdir=DIR
指定可執行支持文件的安裝位置。與二進制文件相反,這些文件歷來不直接由用戶
執行,可是能夠被上面提到的二進制文件所執行。

--datadir=DIR 指定通用數據文件的安裝位置。

--sysconfdir=DIR 指定在單個機器上使用的只讀數據的安裝位置。

--sharedstatedir=DIR 指定能夠在多個機器上共享的可寫數據的安裝位置。

--localstatedir=DIR 指定只能單機使用的可寫數據的安裝位置。

--libdir=DIR 指定庫文件的安裝位置。

--includedir=DIR 指定C頭文件的安裝位置。其餘語言如C++的頭文件也可使用此選項。

--oldincludedir=DIR 指定爲除GCC外編譯器安裝的C頭文件的安裝位置。

--infodir=DIR 指定Info格式文檔的安裝位置。Info是被GNU工程所使用的文檔格式。--mandir=DIR 指定手冊頁的安裝位置。

--srcdir=DIR 這個選項對安裝沒有做用。他會告訴configure源碼的位置。通常來講不用指定此選項,由於configure腳本通常和源碼文件在同一個目錄下。

--program-prefix=PREFIX 指定將被加到所安裝程序的名字上的前綴。例如,使用--program-prefix=g來configure一個名爲tar的程序將會使安裝的程序被命名爲gtar。當和其餘的安裝選項一塊兒使用時,這個選項只有當他被Makefile.in文件使用時纔會工做。

--program-suffix=SUFFIX 指定將被加到所安裝程序的名字上的後綴。

--program-transform-name=PROGRAM 這裏的PROGRAM是一個sed腳本。當一個程序被安裝時,他的名字將通過sed -e PROGRAM來產生安裝的名字。

--build=BUILD 指定軟件包安裝的系統平臺。若是沒有指定,默認值將是--host選項的值。

--host=HOST 指定軟件運行的系統平臺。若是沒有指定,將會運行config.guess來檢測。

--target=GARGET' 指定軟件面向(target to)的系統平臺。這主要在程序語言工具如編譯器和彙編器上下文中起做用。若是沒有指定,默認將使用--host選項的值。

--disable-FEATURE一些軟件包能夠選擇這個選項來提供爲大型選項的編譯時配置,例如使用Kerberos認證系統或者一個實驗性的編譯器最優配置。若是默認是提供這些特性,可使用--disable-FEATURE來禁用它,這裏FEATURE是特性的名字。例如: $ ./configure --disable-gui -enable-FEATURE[=ARG] 相反的,一些軟件包可能提供了一些默認被禁止的特性,可使用--enable-FEATURE來起用它。這裏FEATURE是特性的名字。一個特性可能會接受一個可選的參數。例如:

$ ./configure --enable-buffers=128 --enable-FEATURE=no與上面提到的--disable-FEATURE是同義的。

--with-PACKAGE[=ARG] 在自由軟件社區裏,有使用已有軟件包和庫的優秀傳統。當用configure來配置一個源碼樹時,能夠提供其餘已經安裝的軟件包的信息。例如,倚賴於Tcl和Tk的BLT器件工具包。要配置BLT,可能須要給configure提供一些關於咱們把Tcl和Tk裝的何處的信息:

$ ./configure --with-tcl=/usr/local --with-tk=/usr/local --with-PACKAGE=no與下面將提到的--without-PACKAGE是同義的。--without-PACKAGE 有時候你可能不想讓你的軟件包與系統已有的軟件包交互。例如,你可能不想讓你的新編譯器使用GNU ld。經過使用這個選項能夠作到這一點: $ ./configure --without-gnu-ld --x-includes=DIR 這個選項是--with-PACKAGE選項的一個特例。在Autoconf最初被開發出來時,流行使用configure來做爲Imake的一個變通方法來製做運行於X的軟件。

--x-includes選項提供了向configure腳本指明包含X11頭文件的目錄的方法。--x-libraries=DIR 相似的,--x-libraries選項提供了向configure腳本指明包含X11庫的目錄的方法。

     

FFmpeg裁剪優化實例

對ffmpeg的裁剪優化主要是對ffplay的裁剪優化,咱們制定的需求是能播放測試文件(視頻爲mpeg4編碼、音頻爲mp2編碼,且爲AVI複用),根據需求,找到相應的選項,或禁用或啓用,最後的命令以下: ./configure --disable-yasm --disable-parsers --disable-decoders --disable-encoders --enable-decoder=mpeg4 --disable-muxers --disable-demuxers --enable-demuxer=avi --enable-decoder=mp2 --disable-protocols --enable-protocol=file --disable-filters --disable-bsfs

其中針對需求,--disable-parsers爲禁用全部解析器,--disable-decoders爲禁用全部解碼器,--disable-encoders爲禁用全部編碼器,--enable-decoder=mpeg4爲啓用mpeg4的編碼器,--disable-muxers爲禁用全部複用,--disable-demuxers爲禁用全部解複用,--enable-demuxer=avi爲啓用AVI複用,--enable-decoder=mp2爲啓用mp2編碼,--disable-protocols爲禁用全部協議,--enable-protocol=file爲啓用文件協議,--disable-filters爲禁用全部過濾器,--disable-bsfs爲禁用全部碼流過濾器。經過以上配置

以後,編譯,安裝,就生成了咱們要求的ffplay,其大小爲1.8M(1864012字節)。這次是在linux環境下進行的,在之後的配置中,若是須要其餘的什麼編碼器或什麼的,按照選項要求進行配置便可。

裁剪優化先後文件比較

前面已經提到本次裁剪優化的內容。通過裁剪優化以後,對其文件夾進行比較,主要有3個地方不一樣,分別是config.fate、config.h和config.mak。在config.fate中,其記錄的是配置命令,因爲先後兩次配置命令不一樣,故相應內容也不一樣,如圖4-1所示。在config.h中,其主要是根據配置命令來改變相應預約義的值,達到裁剪優化之效果如圖4-2所示。在config.mak中,改變的也是配置命令中須要改變的選項,如圖4-3所示。