1唤殴、官網(wǎng)地址
http://ffmpeg.org/download.html
2潦蝇、linux下載ffmpeg
下載:
wget https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
解壓:
tar xvf ffmpeg-snapshot.tar.bz2
3癣疟、FFmpeg ./configure編譯參數(shù)匯總
解壓 ffmpeg-snapshot.tar.bz2 之后摸袁,在根目錄下有配置文件:configure悼潭,執(zhí)行該文件可以生成Makefile庇忌,configure文件中記錄了configure的編譯參數(shù)。
【1】Help options 幫助選項
--help 打印顯示幫助信息
--quiet 禁止顯示信息輸出
--list-decoders 顯示所有可用的解碼器
--list-encoders 顯示所有可用的編碼器
--list-hwaccels 顯示所有可用的硬件加速器
--list-demuxers 顯示所有可用的解復(fù)用器
--list-muxers 顯示所有可用的復(fù)用器
--list-parsers 顯示所有可用的解析器
--list-protocols 顯示所有可用的協(xié)議
--list-bsfs 顯示所有可用的比特流過濾器
--list-indevs 顯示所有可用的輸入設(shè)備
--list-outdevs 顯示所有可用的輸出設(shè)備
--list-filters 顯示所有可用的過濾器
【2】 Standard options 標(biāo)準(zhǔn)選項
--logfile=FILE 記錄測試并輸出到 指定文件FILE 舰褪,默認(rèn)為ffbuild/config.log
--disable-logging 不記錄配置調(diào)試信息
--fatal-warnings 如果生成任何配置警告皆疹,則失敗
--prefix=PREFIX 安裝在指定路徑PREFIX,默認(rèn)為/usr/local
--bindir=DIR 在指定路徑DIR 中安裝二進(jìn)制文件抵知,默認(rèn)為PREFIX/bin
--datadir=DIR 在指定路徑DIR中安裝數(shù)據(jù)文件墙基,默認(rèn)為PREFIX/share/ffmpeg
--docdir=DIR 在指定路徑DIR中安裝文檔,默認(rèn)為PREFIX/share/doc/ffmpeg
--libdir=DIR 在指定路徑安裝庫刷喜,默認(rèn)為PREFIX/lib
--shlibdir=DIR 在指定路徑安裝共享庫残制,默認(rèn)為LIBDIR,即PREFIX/lib
--incdir=DIR 在指定路徑安裝包含文件掖疮,默認(rèn)為PREFIX/include
--mandir=DIR 在指定路徑安裝手冊頁初茶,默認(rèn)為PREFIX/share/man
--pkgconfigdir=DIR 在指定路徑安裝pkg-config 文件,默認(rèn)為LIBDIR/pkgconfig
--enable-rpath 使用rpath允許在不屬于動態(tài)鏈接器搜索路徑的路徑中安裝庫鏈接程序時使用rpath(小心使用)
--install-name-dir=DIR Darwin 已安裝目標(biāo)的目錄名稱
【3】Licensing options 證書選項
--enable-gpl 允許使用GPL代碼浊闪,編譯的庫和二進(jìn)制文件處于GPL許可下恼布,默認(rèn)為否
--enable-version3 升級(L)GPL到版本3,默認(rèn)為否
--enable-nonfree 允許使用非自由代碼搁宾,并且二進(jìn)制文件將不可再分發(fā)折汞,默認(rèn)為否
【4】Configuration options 配置選項
--disable-static 不構(gòu)建靜態(tài)庫,默認(rèn)為否
--enable-shared 構(gòu)建共享動態(tài)庫盖腿,默認(rèn)為否
--enable-small 優(yōu)化大小而不是速度
--disable-runtime-cpudetect 禁用在運(yùn)行時檢測 CPU 功能(較小的二進(jìn)制文件)
--enable-gray 啟用全灰度支持(較慢的顏色)
--disable-swscale-alpha 在 swscale 中禁用 alpha 通道支持
--disable-all 禁用構(gòu)建組件爽待、庫和程序
--disable-autodetect 禁用自動檢測到的外部庫,默認(rèn)為否
【5】Program options 程序選項
--disable-programs 不構(gòu)建命令行程序
--disable-ffmpeg 禁用 ffmpeg 構(gòu)建
--disable-ffplay 禁用 ffplay 構(gòu)建
--disable-ffprobe 禁用 ffprobe 構(gòu)建
【6】Documentation options 文檔選項
--disable-doc 不構(gòu)建文檔
--disable-htmlpages 不構(gòu)建 HTML 文檔頁面
--disable-manpages 不構(gòu)建手冊文檔頁面
--disable-podpages 不構(gòu)建 POD 文檔頁面
--disable-txtpages 不構(gòu)建文本文檔頁面
【7】Component options 組件選項
--disable-avdevice 禁用 libavdevice 構(gòu)建
--disable-avcodec 禁用 libavcodec 構(gòu)建
--disable-avformat 禁用 libavformat 構(gòu)建
--disable-swresample 禁用 libswresample 構(gòu)建
--disable-swscale 禁用 libswscale 構(gòu)建
--disable-postproc 禁用 libpostproc 構(gòu)建
--disable-avfilter 禁用 libavfilter 構(gòu)建
--enable-avresample 啟用 libavresample 構(gòu)建(已棄用)翩腐,默認(rèn)為否
--disable-pthreads 禁用 pthreads [自動檢測]
--disable-w32threads 禁用 Win32 線程 [自動檢測]
--disable-os2threads 禁用 OS/2 線程 [自動檢測]
--disable-network 禁用網(wǎng)絡(luò)支持 鸟款,默認(rèn)為否
--disable-dct 禁用 DCT 代碼
--disable-dwt 禁用 DWT 代碼
--disable-error-resilience 禁用錯誤恢復(fù)代碼
--disable-lsp 禁用 LSP 代碼
--disable-lzo 禁用 LZO 解碼器代碼
--disable-mdct 禁用 MDCT 代碼
--disable-rdft 禁用 RDFT 代碼
--disable-fft 禁用 FFT 代碼
--disable-faan 禁用浮點 AAN (I)DCT 代碼
--disable-pixelutils 在 libavutil 中禁用像素工具
【8】Individual component options 獨(dú)立組件選項
--disable-everything 禁用下面列出的所有組件
--disable-encoder=NAME 禁用指定NAME的編碼器
--enable-encoder=NAME 啟用指定NAME的編碼器
--disable-encoders 禁用所有編碼器
--disable-decoder=NAME 禁用指定NAME的解碼器
--enable-decoder=NAME 啟用指定NAME的解碼器
--disable-decoders 禁用所有解碼器
--disable-hwaccel=NAME 禁用指定NAME的硬件
--enable-hwaccel=NAME 啟用指定NAME的硬件
--disable-hwaccels 禁用所有 hwaccels
--disable-muxer=NAME 禁用指定NAME的復(fù)用器
--enable-muxer=NAME 啟用指定NAME的復(fù)用器
--disable-muxers 禁用所有復(fù)用器
--disable-demuxer=NAME 禁用指定NAME的解復(fù)用器
--enable-demuxer=NAME 啟用指定NAME的解復(fù)用器
--disable-demuxers 禁用所有解復(fù)用器
--enable-parser=NAME 啟用指定NAME的解析器
--disable-parser=NAME 禁用指定NAME的解析器
--disable-parsers 禁用所有解析器
--enable-bsf=NAME 啟用指定NAME的比特流過濾器
--disable-bsf=NAME 禁用指定NAME的比特流過濾器
--disable-bsfs 禁用所有比特流過濾器
--enable-protocol=NAME 啟用指定NAME協(xié)議
--disable-protocol=NAME 禁用指定NAME協(xié)議
--disable-protocols 禁用所有協(xié)議
--enable-indev=NAME 啟用指定NAME的輸入設(shè)備
--disable-indev=NAME 禁用指定NAME的輸入設(shè)備
--disable-indevs 禁用輸入設(shè)備
--enable-outdev=NAME 啟用指定NAME的輸出設(shè)備
--disable-outdev=NAME 禁用指定NAME的輸出設(shè)備
--disable-outdevs 禁用輸出設(shè)備
--disable-devices 禁用所有設(shè)備
--enable-filter=NAME 啟用指定NAME的過濾器名稱
--disable-filter=NAME 禁用指定NAME的過濾器名稱
--disable-filters 禁用所有過濾器
【9】External library support 擴(kuò)展庫支持
使用以下任何選項將允許 FFmpeg 鏈接到相應(yīng)的外部庫。
如果滿足所有其他依賴項并且未明確禁用它們茂卦,則依賴于該庫的所有組件都將啟用何什。
例如,--enable-libopus
將啟用與 libopus 的鏈接并允許構(gòu)建 libopus 編碼器等龙,
除非使用 --disable-encoder=libopus
明確禁用它处渣。
--disable-alsa 禁用 ALSA 支持 [自動檢測]
--disable-appkit 禁用 Apple AppKit 框架 [自動檢測]
--disable-avfoundation 禁用 Apple AVFoundation 框架 [自動檢測]
--enable-avisynth 啟用讀取 AviSynth 腳本文件 [否]
--disable-bzlib 禁用 bzlib [自動檢測]
--disable-coreimage 禁用 Apple CoreImage 框架 [自動檢測]
--enable-chromaprint 使用 chromaprint 啟用音頻指紋識別伶贰,默認(rèn)為否
--enable-frei0r 啟用 frei0r 視頻過濾 ,默認(rèn)為否
--enable-gcrypt 啟用 gcrypt霍比,需要 rtmp(t)e 支持幕袱,如果未使用 openssl、librtmp 或 gmp則默認(rèn)為否
--enable-gmp 啟用 gmp悠瞬,需要 rtmp(t)e 支持们豌,如果未使用 openssl 或 librtmp則默認(rèn)為否
--enable-gnutls 啟用 gnutls,需要 https 支持浅妆,如果未使用 openssl望迎、libtls 或 mbedtls則默認(rèn)為否
--disable-iconv 禁用 iconv [自動檢測]
--enable-jni 啟用 JNI 支持,默認(rèn)為否
--enable-ladspa 啟用 LADSPA 音頻過濾凌外,默認(rèn)為否
--enable-libaom 通過 libaom 啟用 AV1 視頻編碼/解碼辩尊,默認(rèn)為否
--enable-libaribb24 通過 libaribb24 啟用 ARIB 文本和字幕解碼,默認(rèn)為否
--enable-libass 啟用 libass 字幕渲染康辑,需要字幕摄欲,默認(rèn)為否
--enable-libbluray 使用 libbluray 啟用藍(lán)光閱讀,默認(rèn)為否
--enable-libbs2b 啟用 bs2b DSP 庫疮薇,默認(rèn)為否
--enable-libcaca 使用 libcaca 啟用文本顯示胸墙,默認(rèn)為否
--enable-libcelt 通過 libcelt 啟用 CELT 解碼,默認(rèn)為否
--enable-libcdio 啟用使用 libcdio 抓取音頻 CD按咒,默認(rèn)為否
--enable-libcodec2 使用 libcodec2 啟用 codec2 編碼/解碼迟隅,默認(rèn)為否
--enable-libdav1d 通過 libdav1d 啟用 AV1 解碼,默認(rèn)為否
--enable-libdavs2 通過 libdavs2 啟用 AVS2 解碼励七,默認(rèn)為否
--enable-libdc1394 使用 libdc1394和libraw1394啟用IIDC-1394 抓取
--enable-libfdk-aac 通過 libfdk-aac 啟用 AAC 解碼/編碼智袭,默認(rèn)為否
--enable-libflite 通過 libflite 啟用 flite(語音合成)支持,默認(rèn)為否
--enable-libfontconfig 啟用 libfontconfig掠抬,對 drawtext 過濾器有用吼野,默認(rèn)為否
--enable-libfreetype 啟用 libfreetype,drawtext 過濾器需要两波,默認(rèn)為否
--enable-libfribidi 啟用 libfribidi箫锤,改進(jìn) drawtext 過濾器,默認(rèn)為否
--enable-libglslang 啟用 GLSL->SPIRV 編譯通過 libglslang雨女,默認(rèn)為否
--enable-libgme 通過 libgme 啟用游戲音樂 Emu,默認(rèn)為否
--enable-libgsm 通過 libgsm 啟用 GSM 解碼/編碼阳准,默認(rèn)為否
--enable-libiec61883 通過 libiec61883 啟用 iec61883氛堕,默認(rèn)為否
--enable-libilbc 通過 libilbc 啟用 iLBC 解碼/編碼,默認(rèn)為否
--enable-libjack 啟用 JACK 音頻聲音服務(wù)器野蝇,默認(rèn)為否
--enable-libklvanc 啟用內(nèi)核實驗室 VANC 處理讼稚,默認(rèn)為否
--enable-libkvazaar 通過 libkvazaar 啟用 HEVC 編碼括儒,默認(rèn)為否
--enable-liblensfun 啟用 lensfun 鏡頭校正,默認(rèn)為否
--enable-libmodplug 通過 libmodplug 啟用 ModPlug锐想,默認(rèn)為否
--enable-libmp3lame 通過 libmp3lame 啟用 MP3 編碼帮寻,默認(rèn)為否
--enable-libopencore-amrnb 通過 libopencore-amrnb 啟用 AMR-NB 解碼/編碼,默認(rèn)為否
--enable-libopencore-amrwb 通過 libopencore-amrwb 啟用 AMR-WB 解碼赠摇,默認(rèn)為否
--enable-libopencv 通過 libopencv 啟用視頻過濾固逗,默認(rèn)為否
--enable-libopenh264 通過 OpenH264 啟用 H.264 編碼,默認(rèn)為否
--enable-libopenjpeg 通過 OpenJPEG 啟用 JPEG 2000 解碼/編碼藕帜,默認(rèn)為否
--enable-libopenmpt 啟用通過 libopenmpt 解碼跟蹤的文件烫罩,默認(rèn)為否
--enable-libopenvino 啟用 OpenVINO 作為 DNN 模塊后端,默認(rèn)為否
--enable-libopus 通過 libopus 啟用 Opus 解碼/編碼洽故,默認(rèn)為否
--enable-libpulse 通過 libpulse 啟用 Pulseaudio 輸入贝攒,默認(rèn)為否
--enable-librabbitmq 啟用 RabbitMQ 庫,默認(rèn)為否
--enable-librav1e 通過 rav1e 啟用 AV1 編碼时甚,默認(rèn)為否
--enable-librist 通過 librist 啟用 RIST隘弊,默認(rèn)為否
--enable-librsvg 通過 librsvg 啟用 SVG 光柵化,默認(rèn)為否
--enable-librubberband 啟用橡皮筋過濾器所需的橡皮筋荒适,默認(rèn)為否
--enable-librtmp 通過 librtmp 啟用 RTMP[E] 支持梨熙,默認(rèn)為否
--enable-libshine 通過 libshine 啟用定點 MP3 編碼,默認(rèn)為否
--enable-libsmbclient 通過 libsmbclient 啟用 Samba 協(xié)議吻贿,默認(rèn)為否
--enable-libsnappy 啟用 Snappy 壓縮串结,需要 hap 編碼,默認(rèn)為否
--enable-libsoxr 啟用libsoxr 重采樣舅列,默認(rèn)為否
--enable-libspeex 通過 libspeex 啟用 Speex 解碼/編碼肌割,默認(rèn)為否
--enable-libsrt 通過 libsrt 啟用 Haivision SRT 協(xié)議,默認(rèn)為否
--enable-libssh 通過 libssh 啟用 SFTP 協(xié)議帐要,默認(rèn)為否
--enable-libsvtav1 通過 SVT 啟用 AV1 編碼把敞,默認(rèn)為否
--enable-libtensorflow 啟用TensorFlow作為基于DNN的過濾器的DNN模塊后端,默認(rèn)為否
--enable-libtesseract 啟用 Tesseract榨惠,ocr 過濾器需要奋早,默認(rèn)為否
--enable-libtheora 通過 libtheora 啟用 Theora 編碼,默認(rèn)為否
--enable-libtls 如果未使用openssl赠橙、gnutls或mbedtls耽装,則啟用https支持所需的LibreSSL,默認(rèn)為否
--enable-libtwolame 通過 libttwolame 啟用 MP2 編碼期揪,默認(rèn)為否
--enable-libuavs3d 通過 libuavs3d 啟用 AVS3 解碼掉奄,默認(rèn)為否
--enable-libv4l2 啟用 libv4l2/v4l-utils,默認(rèn)為否
--enable-libvidstab 使用 vid.stab 啟用視頻穩(wěn)定凤薛,默認(rèn)為否
--enable-libvmaf 通過 libvmaf 啟用 vmaf 過濾器姓建,默認(rèn)為否
--enable-libvo-amrwbenc 通過 libvo-amrwbenc 啟用 AMR-WB 編碼诞仓,默認(rèn)為否
--enable-libvorbis 通過 libvorbis 啟用 Vorbis 編碼/解碼,默認(rèn)為否
--enable-libvpx 通過 libvpx 啟用 VP8 和 VP9 解碼/編碼速兔,默認(rèn)為否
--enable-libwebp 通過 libwebp 啟用 WebP 編碼墅拭,默認(rèn)為否
--enable-libx264 通過 x264 啟用 H.264 編碼,默認(rèn)為否
--enable-libx265 通過 x265 啟用 HEVC 編碼涣狗,默認(rèn)為否
--enable-libxavs 通過 xavs 啟用 AVS 編碼谍婉,默認(rèn)為否
--enable-libxavs2 通過 xavs2 啟用 AVS2 編碼,默認(rèn)為否
--enable-libxcb 使用 XCB 啟用 X11 抓取 [自動檢測]
--enable-libxcb-shm 啟用 X11 抓取 shm 通信 [自動檢測]
--enable-libxcb-xfixes 啟用 X11 抓取鼠標(biāo)渲染 [自動檢測]
--enable-libxcb-shape 啟用 X11 抓取形狀渲染 [自動檢測]
--enable-libxvid 通過 xvidcore 啟用 Xvid 編碼屑柔,存在原生 MPEG-4/Xvid 編碼器屡萤,默認(rèn)為否
--enable-libxml2 使用 C 庫 libxml2 啟用 XML 解析,默認(rèn)為否
--enable-libzimg 啟用 z.lib掸宛,zscale 過濾器需要死陆,默認(rèn)為否
--enable-libzmq 啟用通過 libzmq 傳遞消息,默認(rèn)為否
--enable-libzvbi 通過 libzvbi 啟用圖文電視支持唧瘾,默認(rèn)為否
--enable-lv2 啟用 LV2 音頻過濾措译,默認(rèn)為否
--disable-lzma 禁用 lzma [自動檢測]
--enable-decklink 啟用 Blackmagic DeckLink I/O 支持,默認(rèn)為否
--enable-mbedtls 如果未使用openssl饰序、gnutls或libtls领虹,則啟用https支持所需的mbedTLS,默認(rèn)為否
--enable-mediacodec 啟用 Android MediaCodec 支持求豫,默認(rèn)為否
--enable-mediafoundation 通過 MediaFoundation 啟用編碼
--enable-libmysofa 啟用 libmysofa塌衰,需要 soflizer 過濾器,默認(rèn)為否
--enable-openal 啟用 OpenAL 1.1 捕獲支持蝠嘉,默認(rèn)為否
--enable-opencl 啟用 OpenCL 處理最疆,默認(rèn)為否
--enable-opengl 啟用 OpenGL 渲染,默認(rèn)為否
--enable-openssl 如果未使用gnutls蚤告、libtls 或 mbedtls努酸,則啟用https支持所需的openssl,默認(rèn)為否
--enable-pocketsphinx 啟用 PocketSphinx杜恰,asr 過濾器需要获诈,默認(rèn)為否
--disable-sndio 禁用 sndio 支持 [自動檢測]
--disable-schannel 禁用 SChannel SSP,需要 TLS 支持[自動檢測]
--disable-sdl2 禁用 sdl2 [自動檢測]
--disable-securetransport 禁用安全傳輸心褐,需要 TLS 支持
--enable-vapoursynth 啟用 VapourSynth 解復(fù)用器舔涎,默認(rèn)為否
--enable-vulkan 啟用 Vulkan 代碼,默認(rèn)為否
--disable-xlib 禁用 xlib [自動檢測]
--disable-zlib 禁用 zlib [自動檢測]
以下庫提供各種硬件加速功能:
--disable-amf 禁用 AMF 視頻編碼代碼 [自動檢測]
--disable-audiotoolbox 禁用 Apple AudioToolbox 代碼 [自動檢測]
--enable-cuda-nvcc 啟用 Nvidia CUDA 編譯器逗爹,默認(rèn)為否
--disable-cuda-llvm 使用 clang亡嫌, 禁用 CUDA 編譯[自動檢測]
--disable-cuvid 禁用 Nvidia CUVID 支持 [自動檢測]
--disable-d3d11va 禁用 Microsoft Direct3D 11 視頻加速代碼 [自動檢測]
--disable-dxva2 禁用 Microsoft DirectX 9 視頻加速代碼 [自動檢測]
--disable-ffnvcodec 禁用動態(tài)鏈接的 Nvidia 代碼 [自動檢測]
--enable-libdrm 啟用 DRM 代碼 (Linux),默認(rèn)為否
--enable-libmfx 通過 libmfx 啟用英特爾 MediaSDK(AKA 快速同步視頻)代碼,默認(rèn)為否
--enable-libnpp 啟用基于 Nvidia Performance Primitives 的代碼昼伴,默認(rèn)為否
--enable-mmal 通過 MMAL 啟用 Broadcom 多媒體抽象層 (Raspberry Pi) ,默認(rèn)為否
--disable-nvdec 禁用 Nvidia 視頻解碼加速(通過 hwaccel)[自動檢測]
--disable-nvenc 禁用 Nvidia 視頻編碼代碼 [自動檢測]
--enable-omx 啟用 OpenMAX IL 代碼镣屹,默認(rèn)為否
--enable-omx-rpi 為 Raspberry Pi 啟用 OpenMAX IL 代碼 圃郊,默認(rèn)為否
--enable-rkmpp 啟用瑞芯微媒體處理平臺代碼 ,默認(rèn)為否
--disable-v4l2-m2m 禁用 V4L2 mem2mem 代碼 [自動檢測]
--disable-vaapi 禁用視頻加速 API(主要是 Unix/Intel)代碼 [自動檢測]
--disable-vdpau 禁用適用于 Unix 代碼的 Nvidia Video Decode 和 Presentation API [自動檢測]
--disable-videotoolbox 禁用 VideoToolbox 代碼 [自動檢測]
【10】Toolchain options 工具鏈選項
--arch=ARCH 選擇架構(gòu)
--cpu=CPU 選擇所需的最小CPU(影響指令選擇女蜈,可能會在較舊的 CPU 上崩潰)
--cross-prefix=PREFIX 編譯工具使用 PREFIX
--progs-suffix=SUFFIX 程序名后綴
--enable-cross-compile 使能交叉編譯器
--sysroot=PATH 交叉構(gòu)建樹的根
--sysinclude=PATH 交叉構(gòu)建系統(tǒng)頭文件的位置
--target-os=OS 編譯器目標(biāo) OS
--target-exec=CMD 目標(biāo)上運(yùn)行可執(zhí)行文件的命令
--target-path=DIR 在目標(biāo)上查看構(gòu)建目錄的路徑
--target-samples=DIR 目標(biāo)樣本目錄的路徑
--tempprefix=PATH 強(qiáng)制固定目錄/前綴而不是 mktemp 進(jìn)行檢查
--toolchain=NAME 根據(jù) NAME 設(shè)置工具默認(rèn)值
--nm=NM 使用 nm 工具 NM [nm -g]
--ar=AR 使用存檔工具 AR [ar]
--as=AS 使用匯編器 AS
--ln_s=LN_S 使用符號鏈接工具 LN_S [ln -s -f]
--strip=STRIP 使用剝離工具STRIP [strip]
--windres=WINDRES 使用windows資源編譯器WINDRES [windres]
--x86asmexe=EXE 使用 nasm 兼容的匯編程序 EXE [nasm]
--cc=CC 使用 C 編譯器 CC [gcc]
--cxx=CXX 使用 C 編譯器 CXX [g++]
--objcc=OCC 使用 ObjC 編譯器 OCC [gcc]
--dep-cc=DEPCC 使用依賴生成器 DEPCC [gcc]
--nvcc=NVCC 使用 Nvidia CUDA 編譯器 NVCC 或 clang
--ld=LD 使用鏈接器 LD
--pkg-config=PKGCONFIG 使用 pkg-config 工具 PKGCONFIG [pkg-config]
--pkg-config-flags=FLAGS 將附加標(biāo)志傳遞給 pkgconf
--ranlib=RANLIB 使用ranlib RANLIB
--doxygen=DOXYGEN 使用 DOXYGEN 生成 API doc [doxygen]
--host-cc=HOSTCC 使用主機(jī) C 編譯器 HOSTCC
--host-cflags=HCFLAGS 在為主機(jī)編譯時使用 HCFLAGS
--host-cppflags=HCPPFLAGS 在為主機(jī)編譯時使用 HCPPFLAGS
--host-ld=HOSTLD 使用主機(jī)鏈接器 HOSTLD
--host-ldflags=HLDFLAGS 鏈接主機(jī)時使用 HLDFLAGS
--host-extralibs=HLIBS 鏈接主機(jī)時使用庫 HLIBS
--host-os=OS 編譯器主機(jī)操作系統(tǒng)
--extra-cflags=ECFLAGS 將 ECFLAGS 添加到 CFLAGS
--extra-cxxflags=ECFLAGS 將 ECFLAGS 添加到 CXXFLAGS
--extra-objcflags=FLAGS 將 FLAGS 添加到 OBJCFLAGS
--extra-ldflags=ELDFLAGS 將 ELDFLAGS 添加到 LDFLAGS
--extra-ldexeflags=ELDFLAGS 將 ELDFLAGS 添加到 LDEXEFLAGS
--extra-ldsoflags=ELDFLAGS 將 ELDFLAGS 添加到 LDSOFLAGS
--extra-libs=ELIBS 添加 ELIBS
--extra-version=STRING 版本字符串后綴
--optflags=OPTFLAGS 覆蓋優(yōu)化相關(guān)的編譯器標(biāo)志
--nvccflags=NVCCFLAGS 覆蓋 nvcc 標(biāo)志
--build-suffix=SUFFIX 庫名后綴
--enable-pic 構(gòu)建與位置無關(guān)的代碼
--enable-thumb 編譯 Thumb 指令集
--enable-l 使用鏈接時優(yōu)化
--env=“ENV=override” 覆蓋環(huán)境變量
【11】Advanced options 高級選項
--malloc-prefix=PREFIX 前綴 malloc 和帶有 PREFIX 的相關(guān)名稱
--custom-allocator=NAME 使用支持的自定義分配器
--disable-symver 禁用符號版本控制
--enable-hardcoded-tables 使用硬編碼表而不是運(yùn)行時生成
--disable-safe-bitstream-reader 在位讀取器中禁用緩沖區(qū)邊界檢查(更快持舆,但可能會崩潰)
--sws-max-filter-size=N swscale 使用的最大過濾器大小 ,默認(rèn)為256
【12】Optimization options 優(yōu)化選項
--disable-asm 禁用所有程序集優(yōu)化
--disable-altivec 禁用 AltiVec 優(yōu)化
--disable-vsx 禁用 VSX 優(yōu)化
--disable-power8 禁用 POWER8 優(yōu)化
--disable-amd3dnow 禁用 3DNow伪窖!優(yōu)化
--disable-amd3dnowext 禁用 3DNow逸寓!擴(kuò)展優(yōu)化
--disable-mmx 禁用 MMX 優(yōu)化
--disable-mmxext 禁用 MMXEXT 優(yōu)化
--disable-sse 禁用 SSE 優(yōu)化
--disable-sse2 禁用 SSE2 優(yōu)化
--disable-sse3 禁用 SSE3 優(yōu)化
--disable-ssse3 禁用 SSSE3 優(yōu)化
--disable-sse4 禁用 SSE4 優(yōu)化
--disable-sse42 禁用 SSE4.2 優(yōu)化
--disable-avx 禁用 AVX 優(yōu)化
--disable-xop 禁用 XOP 優(yōu)化
--disable-fma3 禁用 FMA3 優(yōu)化
--disable-fma4 禁用 FMA4 優(yōu)化
--disable-avx2 禁用 AVX2 優(yōu)化
--disable-avx512 禁用 AVX-512 優(yōu)化
--disable-aesni 禁用 AESNI 優(yōu)化
--disable-armv5te 禁用 armv5te 優(yōu)化
--disable-armv6 禁用 armv6 優(yōu)化
--disable-armv6t2 禁用 armv6t2 優(yōu)化
--disable-vfp 禁用 VFP 優(yōu)化
--disable-neon 禁用 NEON 優(yōu)化
--disable-inline-asm 禁用內(nèi)聯(lián)匯編
--disable-x86asm 禁用獨(dú)立 x86 程序集
--disable-mipsdsp 禁用 MIPS DSP ASE R1 優(yōu)化
--disable-mipsdspr2 禁用 MIPS DSP ASE R2 優(yōu)化
--disable-msa 禁用 MSA 優(yōu)化
--disable-msa2 禁用 MSA2 優(yōu)化
--disable-mipsfpu 禁用浮點 MIPS 優(yōu)化
--disable-mmi 禁用龍芯 SIMD 優(yōu)化
--disable-fast-unaligned 考慮未對齊訪問緩慢
【13】開發(fā)人員選項
--disable-debug 禁用調(diào)試符號
--enable-debug=LEVEL 設(shè)置調(diào)試級別
--disable-optimizations 禁用編譯器優(yōu)化
--enable-extra-warnings 啟用更多編譯器警告
--disable-stripping 禁用剝離可執(zhí)行文件和共享庫
--assert-level=level 0(默認(rèn)),1或2覆山,斷言測試的數(shù)量竹伸,2 會導(dǎo)致運(yùn)行時變慢
--enable-memory-poisoning 用任意數(shù)據(jù)填充堆未初始化的分配空間
--valgrind=VALGRIND 通過 valgrind 運(yùn)行“make fate”測試以檢測內(nèi)存泄漏和錯誤,使用指定的 valgrind 二進(jìn)制文件簇宽。不能與 --target-exec 結(jié)合使用
--enable-ftrapv 陷阱算術(shù)溢出
--samples=FATE 測試樣本的路徑位置
--enable-neon-clobber-test 檢查 NEON 寄存器的破壞(應(yīng)該是僅用于調(diào)試目的)
--enable-xmm-clobber-test 檢查 XMM 寄存器的破壞(僅限 Win64勋篓;應(yīng)僅用于調(diào)試目的)
--enable-random 隨機(jī)啟用/禁用組件
--enable-random=LIST 隨機(jī)啟用/禁用特定組件,LIST 是一個逗號分隔的列表 NAME[:PROB] 條目魏割,其中 NAME 是一個組件(group) 和 PROB 相關(guān)的概率 名稱(默認(rèn) 0.5)譬嚣。
--random-seed=VALUE --enable/disable-random 的種子值
--disable-valgrind-backtrace 在 Valgrind 下不打印回溯(僅適用于 --disable-optimizations 構(gòu)建)
--enable-ossfuzz 啟用構(gòu)建模糊器工具
--libfuzzer=PATH libfuzzer 的路徑
--ignore-tests=TESTS 被忽略的測試
--enable-linux-perf 啟用 Linux 性能監(jiān)視器 API
--disable-large-tests 禁用使用大量內(nèi)存的測試
4、ffmpeg shell腳本
#!/bin/bash
NDK_ROOT=/home/zhouyunchong/Android/Sdk/ndk/17.2.4988734
CPU=arm-linux-androideabi
TOOLCHAIN=$NDK_ROOT/toolchains/$CPU-4.9/prebuilt/linux-x86_64
# 打開一個NDK項目钞它,找到build.ninja文件拜银,可以找到FLAGS
# FLAGS="-g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -mstackrealign -D_FORTIFY_SOURCE=2 -Wformat -Werror=format-security -std=c++11 -fno-limit-debug-info -fPIC"
FLAGS="-isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -O0 -fPIC"
INCLUDES=" -isystem $NDK_ROOT/sources/android/support/include"
PREFIX=./android/armeabi-v7a
# 執(zhí)行 configure 生成Makefile
# prefix 安裝路徑默認(rèn)為/usr/local
# --enable-small 優(yōu)化大小
# --disable-programs 不構(gòu)建可執(zhí)行文件
# --disable-avdevice 禁用 libavdevice 構(gòu)建
# --disable-encoders 禁用所有編碼器
# --disable-muxers 禁用所有混合器
# --disable-filters 禁用所有過濾器
# --enable-cross-compile 開啟交叉編譯器
# --cross-prefix 指定交叉編譯的編譯鏈
# --disable-shared 關(guān)閉動態(tài)庫
# --enable-static 開啟靜態(tài)庫
# -isystem 編譯時查找頭文件的路徑
# --sysroot 指定頭文件和庫文件目錄
# --extra-cflags 將 ECFLAGS 添加到 CFLAGS(傳給gcc編譯器的參數(shù))
# --arch 選擇架構(gòu)
# --target-os 編譯器目標(biāo) OS android、linux
# --disable-x86asm 生成編譯相關(guān)的配置
./configure --disable-x86asm
./configure \
prefix=$PREFIX \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/$CPU- \
--disable-shared \
--enable-static \
--sysroot=$NDK_ROOT/platforms/android-21/arch-arm \
--extra-cflags="$FLAGS $INCLUDES" \
--extra-cflags="-isysroot $NDK_ROOT/sysroot/" \
--arch=arm \
--target-os=android \
make clean
make install
以上腳本只能生成在Android端使用的靜態(tài)庫遭垛。
當(dāng)然尼桶,修改下指定參數(shù)可以生成動態(tài)庫或者可執(zhí)行文件。
以上腳本的環(huán)境和條件:
【1】linux(ubuntu)系統(tǒng)
【2】ffmpeg版本:最新的release版本即可(當(dāng)前最高版本是FFmpeg 5.1.2 "Riemann")耻卡,官網(wǎng):http://ffmpeg.org/
【3】NDK版本疯汁,需要 < 19,19及19以上的版本已經(jīng)去除了gcc和g++卵酪,所以不適用以上腳本
【4】腳本需要額外添加 ./configure --disable-x86asm
【5】prefix 前面不能添加 --
【6】當(dāng)前ffmpeg支持clang編譯幌蚊,需要在configure中將cc_default="clang"
改成cc_default="gcc"
5、將編譯出來的靜態(tài)庫在cmake項目中使用
新建一個cmake項目
MainActivity.java
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// Example of a call to a native method
binding.sampleText.text = stringFromJNI()
}
/**
* A native method that is implemented by the 'myplayer' native library,
* which is packaged with this application.
*/
private external fun stringFromJNI(): String
companion object {
// Used to load the 'myplayer' library on application startup.
init {
System.loadLibrary("myplayer")
}
}
}
native-lib.cpp
#include <jni.h>
#include <string>
extern "C"{
#include <libavcodec/avcodec.h>
}
extern "C" JNIEXPORT jstring JNICALL
Java_com_android_myplayer_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(av_version_info());
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.18.1)
add_library(
myplayer
SHARED
native-lib.cpp)
include_directories("ffmpeg-include")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")
message("${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}")
target_link_libraries(
myplayer
avcodec
avfilter
avformat
avutil
swresample
swscale
log)
build.gradle部分配置:
android {
compileSdk 32
defaultConfig {
applicationId "com.android.xxxx"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
externalNativeBuild {
cmake {
cppFlags ""
abiFilters 'armeabi-v7a'
}
}
ndk { // "armeabi-v7a", "arm64-v8a"
abiFilters 'armeabi-v7a'
}
}
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.18.1'
}
}
}
將ffmpeg交叉編譯出來的頭文件和靜態(tài)庫放入項目中:
[本章完...]