1.FFmepg編譯環(huán)境及結(jié)構(gòu)
下載FFmepg
FFmpeg配置選項(xiàng)介紹
下載gas-preprocessor.pl及安裝
編寫(xiě)腳本代碼(執(zhí)行源碼)
執(zhí)行腳本結(jié)果一覽
編譯中出現(xiàn)的問(wèn)題
個(gè)人總結(jié)
2.下載FFmepg
首先呢,我們先下載音視頻框架
這里提供兩種下載方法:
一:官網(wǎng)下載(https://ffmpeg.org)
FFmpeg下載.png
二:執(zhí)行下面的FFmpeg-down(shell腳本文件)(可以到我的github下載)
ffmpeg-down.png
執(zhí)行結(jié)果:在終端執(zhí)行文件ffmpeg-down文件,就可以進(jìn)行下載FFmpeg,下圖正在下載...
ffmpeg_down_結(jié)果.png
注意:把下載后的解壓包放在與shell腳本同一目錄下
3.查看FFmpeg配置選項(xiàng)介紹
首先呢,我們進(jìn)入下載好的FFmpeg框架包中,打開(kāi)終端,cd到目錄下,執(zhí)行如下命令,就可以配置選項(xiàng)的組成
./configure --help
選項(xiàng)(options)介紹:
Help options:FFmpeg幫助選項(xiàng)(幫助文檔)
help options.png
--help 幫組信息(打印此消息)
--quiet? 抑制顯示信息輸出
--list-decoders? 顯示所有可用的解碼器
--list-encoders? 顯示所有可用的編碼器
--list-hwaccesl? 顯示所有可用的硬件加速器
--list-muxers 顯示所有可用的視音頻復(fù)用器
視音頻復(fù)用器(Muxer)即是將視頻壓縮數(shù)據(jù)(例如H.264)和音頻壓縮數(shù)據(jù)(例如AAC)合并到一個(gè)封裝格式數(shù)據(jù)(例如MKV)中去。如圖所示。在這個(gè)過(guò)程中并不涉及到編碼和解碼众眨。
視音頻復(fù)用器(Muxer).jpeg
--list-demuxers? 顯示所有可用的視音頻分離器
--list-parsers 顯示所有可用的解析器
--list-protocols? 顯示所有可用的協(xié)議
--list-bsfs? 顯示所有可用的比特流過(guò)濾
--list-indevs 顯示所有可用的輸入設(shè)備
--list-outdevs 顯示所有可用的輸出設(shè)備
--list-filters 顯示所有可用的過(guò)濾器
Standard options:標(biāo)準(zhǔn)選項(xiàng)
stanard options.png
--logfile=FILE? 記錄測(cè)試并輸出到ffbuild/config.log文件
--disable-logging 沒(méi)有日志配置調(diào)試信息
--fatal-warnigns? 致命的警告,配置警告生成
--prefix=PREFIX? 前綴默認(rèn)[/usr/local]
--bindir=DIR? 二進(jìn)制文件默認(rèn)[PREFIX/bin]
--datadir=DIR 數(shù)據(jù)文件默認(rèn)[PREFIX/share/ffmpeg]
--docdir=DIR? doc文檔默認(rèn)[PREFIX/share/doc/ffmpeg]
--libdir=DIR? 安裝庫(kù)到指定目錄[PREFIX/lib]
--shlibdir=DIR 指定共享庫(kù)路徑[LIBDIR]
--incdir=DIR 指定includes路徑[PREFIX/include]
--mandir=DIR 指定安裝手冊(cè)路徑[PREFIX/share/man]
--pkgconfigdir=DIR 指定配置文件路徑[LIBDIR/pkgconfig]
Licensing options:許可選項(xiàng)(侵權(quán))
licensing options.png
--enable-gpl? 允許使用GPL(默認(rèn)關(guān)閉)
--enable-version3? gpl升級(jí)到版本3(默認(rèn)關(guān)閉)
--enable-nonfree? 允許用戶使用非免費(fèi)代碼(默認(rèn)關(guān)閉)
Configuration options:配置備選選項(xiàng)
configuration options.png
--disable-static 不能編譯靜態(tài)庫(kù)(默認(rèn)關(guān)閉)
--enable-shared 編譯共享庫(kù)(默認(rèn)關(guān)閉)
--enable-small 啟用優(yōu)化文件尺寸大小(犧牲速度)
--disable-runtime-cpudetect? 在運(yùn)行時(shí)禁用cpu檢測(cè)功能
--enable-gray 灰度支持
--disable-swscale-alpha? 禁用在swscale alpha通道支持
--disable-all 禁止編譯組件,庫(kù),代碼
--disable-autodetect? 禁用自動(dòng)檢測(cè)外部庫(kù)(默認(rèn)關(guān)閉)
program options: 程序選項(xiàng)
program options.png
--disable-programs? 不能編譯命令行代碼
--disable-ffmpeg? ? ffmpeg禁止編譯
--disable-ffplay? ffplay禁止編譯
--disable-ffprobe? ffprobe禁止編譯
--disable-ffserver? ffserver禁止編譯
documentation options:文件選項(xiàng)
documentation options.png
--disable-doc 不能編譯文檔
--disable-htmlpages 不能編譯html文檔頁(yè)面
--disable-manpages 不能編譯操作手冊(cè)文檔頁(yè)面
--disable-podpages 不能編譯pod文檔頁(yè)面
--disable-txtpages 不能編譯文本文檔頁(yè)面
component options:組件選項(xiàng)
component options.png
--disable-avdevice? 禁止 libavcodec 構(gòu)造
--disable-avcodec? 禁止 libavcore 構(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? 開(kāi)啟libavresample構(gòu)造(默認(rèn)關(guān)閉)
--disable-pthreads? 禁用 pthreads [默認(rèn):自動(dòng)]
--disable-w32threads? 禁用 Win32 線程[默認(rèn):自動(dòng)]
--disable-os2threads? 禁用0S/2線程[默認(rèn):自動(dòng)]
--disable-network? 禁用網(wǎng)絡(luò)支持[默認(rèn):關(guān)閉]
--disable-dct? 禁用DCT代碼
--disable-dwt 禁用DWT代碼
--disable-error-resilience? 禁用錯(cuò)誤resilience 代碼
--disable-lsp? 禁用LSP代碼
--disable-lzo? 禁用LZO代碼
--disable-mdct 禁用MDCT代碼
--disable-rdft? 禁用RDFT代碼
--disable-fft 禁用FFT代碼
--disable-faan 禁用浮點(diǎn) AAN(I)DCT代碼
Individual component options:個(gè)人組件選項(xiàng)
individual component options.png
--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的硬件加速計(jì)
--enable-hwaccel=NAME 啟用NAME的硬件加速計(jì)
--disable-muxer=NAME 禁用NAME的復(fù)用器
--enable-muxer=NAME 啟用NAME的復(fù)用器
--disable-muxers 禁用所有的復(fù)用器
--disable-demuxer=NAME 禁用NAME的分離器
--enable-demuxer=NAME 啟用NAME的分離器
--disable-demuxers 禁用所有的分離器
--enable-parser=NAME 啟用NAME的解析器
--disable-parser=NAME 禁用NAME的解析器
--disable-parsers 禁用所有的解析器
--enable-bsf=NAME 啟用NAME的比特流過(guò)濾器
--disable-bsf=NAME 禁用NAME的比特流過(guò)濾器
--disable-bsfs 禁用所有的比特流過(guò)濾器
--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-devices 禁用所有的輸出設(shè)備
--enable-filter=NAME 啟用NAME的過(guò)濾器
--disable-filter=NAME 禁用NAME的過(guò)濾器
--disable-filters 禁用所有的過(guò)濾器
--disable-v412_m2m 禁用V4L2 mem2mem代碼 [自動(dòng)]
External library support:外部庫(kù)支持(重點(diǎn))
externalLibrary Support_1.png
--disable-alsa? 禁止ALSA支持[自動(dòng)檢測(cè)]
--disable-appkit 禁止蘋(píng)果AppKit框架[自動(dòng)檢測(cè)]
--disable-avfoundation 禁止蘋(píng)果AVFoundation框架[自動(dòng)檢測(cè)]
--disable-avisynth? 啟用讀取AviSynth腳本文件[默認(rèn)關(guān)閉]
--disable-bzlib? 禁用 bzlib [自動(dòng)檢測(cè)]
--disable-coreimage? 禁用蘋(píng)果CoreImage框架[自動(dòng)檢測(cè)]
--enable-chromaprint? Chromaprint:可提供一個(gè)客戶端的公共庫(kù),能夠通過(guò)特定算法計(jì)算音頻文件的指紋纪铺,是AcoustID項(xiàng)目的核心。[默認(rèn)關(guān)閉]
--enable-freior? 啟用freior視頻過(guò)濾[默認(rèn)關(guān)閉]
--enable-gcrypt? 啟用gcrypt,需要rtmp(t)e支持,如果openssl,librtmp,gmp沒(méi)有被使用[默認(rèn)關(guān)閉]
--enable-gmp? 啟用gmp,需要rtmp(t)e支持,如果openssl或者librtmp沒(méi)有被使用[默認(rèn)關(guān)閉]
--enable-gnutls 啟用gnutls,需要https支持,如果opensll不能使用[默認(rèn)關(guān)閉]
--disable-iconv 禁用iconv[自動(dòng)檢測(cè)]
--disable-jack? 禁用libjack支持[自動(dòng)檢測(cè)]
--enable-jni 啟用JNI支持[默認(rèn)關(guān)閉]
--enable-ladspa 啟用LADSPA 視頻過(guò)濾[默認(rèn)關(guān)閉]
--enable-libass? 啟用libass字幕渲染,需要字幕和ass過(guò)濾[默認(rèn)關(guān)閉]
externalLibrary Support_2.png
--enable-libbluray? 啟用藍(lán)光,使用libbluray [默認(rèn)關(guān)閉]
--enable-libbs2b? 啟用bs2b DSP庫(kù)[默認(rèn)關(guān)閉]
--enable-libcaca 啟用文本顯示,使用libcaca[默認(rèn)關(guān)閉]
--enable-libcelt 啟用CELT通過(guò)解碼libcelt[默認(rèn)關(guān)閉]
--enable-libcdio 啟用視頻CD,使用libcdio[默認(rèn)關(guān)閉]
--enable-libdc1394? 啟用 IIDC-1394 ,使用libdc1394和libraw1394[默認(rèn)關(guān)閉]
--enable-libfdk-aac 啟用AAC 編碼/解碼通過(guò)libfdk-aac[默認(rèn)關(guān)閉]
--enable-libflite 啟用過(guò)濾器支持通過(guò)libflite
--enable-libfontconfig? 啟用libfontconfig,用于drawtext過(guò)濾器[默認(rèn)關(guān)閉]
--enable-libfreetype 啟用libfreetype,需要darwtext過(guò)濾器[默認(rèn)關(guān)閉]
--enable-libfribidi 啟用libfribidi ,優(yōu)化darwtext過(guò)濾器[默認(rèn)關(guān)閉]
--enable-libgme 啟用游戲音樂(lè)通過(guò)libgme[默認(rèn)關(guān)閉]
--enable-libgsm 啟用GSM 編碼/解碼 通過(guò)libgsm[默認(rèn)關(guān)閉]
--enable-libiec61883 啟用 iec61883 通過(guò)使用libiec61883[默認(rèn)關(guān)閉]
--enable-libilbc 啟用iLBC 編碼/解碼通過(guò)libilbc[默認(rèn)關(guān)閉]
--enable-libkvazaar 啟用HEVC 編碼通過(guò)使用libkvazaar[默認(rèn)關(guān)閉]
--enable-libmodplug 啟用ModPlug 通過(guò)libmodplug[默認(rèn)關(guān)閉]
--enable-libmp3lame 啟用MP3編碼通過(guò)libmp3lame[默認(rèn)關(guān)閉]
--enable-libopencore-amrnb 啟用AMR-NB 編碼/解碼通過(guò)使用libopencore-amrnb[默認(rèn)關(guān)閉]
--enable-libopencore-amrwb 啟用AMR-WB編碼通過(guò)libopencore-amrwb[默認(rèn)關(guān)閉]
--enable-libopnecv 啟用視頻過(guò)濾器通過(guò)使用libopencv[默認(rèn)關(guān)閉]
--enable-libopenh264 啟用H.264編碼通過(guò)OpenH264[默認(rèn)關(guān)閉]
--enable-libopenjpeg 啟用 JPEG 2000 編碼/解碼通過(guò)OpenJPEG[默認(rèn)關(guān)閉]
--enable-libopenmpt 啟用編碼追蹤文件通過(guò)libopenmpt[默認(rèn)關(guān)閉]
--enable-libopus 啟用Opus 編碼/解碼通過(guò)libpulse[默認(rèn)關(guān)閉]
--enable-libpulse 啟用音頻脈沖輸入通過(guò)使用libpulse[默認(rèn)關(guān)閉]
--enable-librsvg 啟用SVG 柵格化通過(guò)使用librsvg[默認(rèn)關(guān)閉]
--enable-librubberband 啟用拖框需要拖框過(guò)濾器[默認(rèn)關(guān)閉]
--enable-librtmp 啟用RTMP[E]支持通過(guò)使用librtmp[默認(rèn)關(guān)閉]
--enable-libshine 啟用固定點(diǎn)MP3編碼通過(guò)使用librsvg[默認(rèn)關(guān)閉]
--enable-libsmbclient 啟用Samba協(xié)議通過(guò)使用libsmbclient[默認(rèn)關(guān)閉]
--enable-libsnappy 啟用Snappy壓縮,需要hap編碼[默認(rèn)關(guān)閉]
--enable-libsoxr 啟用libsoxr重采樣[默認(rèn)關(guān)閉]
--enable-libspeex 啟用speex 編碼/解碼通過(guò)使用libspeex[默認(rèn)關(guān)閉]
--enable-libssh 啟用SFTP協(xié)議通過(guò)使用libspeex[默認(rèn)關(guān)閉]
--enable-libtesseract 啟用Tesseract,需要ocr過(guò)濾器[默認(rèn)關(guān)閉]
--enable-libtheora 啟用Theora編碼通過(guò)使用libtheora[默認(rèn)關(guān)閉]
--enable-libtwolame 啟用MP2編碼通過(guò)使用libtwolame[默認(rèn)關(guān)閉]
--enable-lib412 啟用libv412/v4l-utils[默認(rèn)關(guān)閉]
--enable-libvidstab 啟用基于視頻圖像穩(wěn)定,通過(guò)使用vid.stab[默認(rèn)關(guān)閉]
--enable-libvmaf 啟用vmaf過(guò)濾器通過(guò)使用libvmaf[默認(rèn)關(guān)閉]
--enable-libvo-amrwbenc 啟用AMR-WB編碼通過(guò)使用libvo-amrwbenc[默認(rèn)關(guān)閉]
--enable-libvorbis 啟用Vorbis編碼/解碼通過(guò)libvorbis,本地已經(jīng)實(shí)現(xiàn)[默認(rèn)關(guān)閉]
--enable-libvpx 啟用VP8和VP9編碼/解碼通過(guò)使用libvpx[默認(rèn)關(guān)閉]
--enable-libwavpack 啟用wavpack編碼通過(guò)使用libwavpack[默認(rèn)關(guān)閉]
--enable-libwebp 啟用WebP編碼通過(guò)使用libwebp[默認(rèn)關(guān)閉]
--enable-libx264 啟用H.264編碼通過(guò)使用x264[默認(rèn)關(guān)閉]
--enable-libx265 啟用HEVC編碼通過(guò)使用x265[默認(rèn)關(guān)閉]
--enable-libxavs 啟用AVS編碼通過(guò)使用xavs[默認(rèn)關(guān)閉]
--enable-libxcb? 啟用X11抓取XCB[自動(dòng)檢測(cè)]
--enable-libxcb-shm 啟用X11抓取shm交互[自動(dòng)檢測(cè)]
--enable-libxcb-xfixes 啟用X11抓取mouse渲染[自動(dòng)檢測(cè)]
--enable-libxcb-shape 啟用X11抓取圖像渲染[自動(dòng)檢測(cè)]
--enable-libxvid 啟用Xvid編碼通過(guò)使用xvidcore,本地MPEG-4/Xvid編碼已經(jīng)存在[默認(rèn)關(guān)閉]
externalLibrary Support_3.png
--enable-libxml2 啟用XML解析,使用C語(yǔ)言庫(kù)libxml2[默認(rèn)關(guān)閉]
--enable-libzimg 啟用z.lib 需要zscale過(guò)濾器[默認(rèn)關(guān)閉]
--enable-libzmq 啟用消息傳遞通過(guò)使用libzmq[默認(rèn)關(guān)閉]
--enable-libzvbi 啟用點(diǎn)在文本支持通過(guò)使用llibzvbi[默認(rèn)關(guān)閉]
--disable-lzma 禁用lzma[自動(dòng)檢測(cè)]
--enable-decklink? 啟用黑魔法 DeckLind I/O支持[默認(rèn)關(guān)閉]
--enable-libndi_newtek 啟用Newteck NDI I/O支持[默認(rèn)關(guān)閉]
--enable-mediacodec 啟用安卓媒體編解碼器支持[默認(rèn)關(guān)閉]
--enable-libmysofa 啟用libmysofa,需要sofalizer過(guò)濾器[默認(rèn)關(guān)閉]
--enable-openal 啟用OpenAL 1.1 捕獲支持[默認(rèn)關(guān)閉]
--enable-onencl 啟用OpenCl代碼
--enable-opengl 啟用OpenGL渲染[默認(rèn)關(guān)閉]
--enable-openssl 啟用openssl,需要https支持,如果沒(méi)有使用[默認(rèn)關(guān)閉]
--disable-sndio 禁用sndio支持[自動(dòng)檢測(cè)]
--disable-schannel 禁用 schannel SSP,需要TLS支持在Windows,如果openssl 和gnutls沒(méi)有使用[自動(dòng)檢測(cè)]
--disable-sdl2 禁用sdl2[自動(dòng)檢測(cè)]
--disable-securetransport 禁用 安全傳輸,需要TLS支持在OSX如果openssl和gnutls沒(méi)有使用[自動(dòng)檢測(cè)]
--disable-xlib 禁用xlib[自動(dòng)檢測(cè)]
--disable-zlib 禁用zlib[自動(dòng)檢測(cè)]
--disable-audiotoolbox 禁用蘋(píng)果AUdioToolbox代碼[自動(dòng)檢測(cè)]
--disable-cuda? 禁用動(dòng)態(tài)鏈接Nvidia CUDA代碼[自動(dòng)檢測(cè)]
--enable-cuda-sdk 啟用CUDA特性,需要CUDA SDK[自動(dòng)檢測(cè)]
--disable-cuvid 禁用 Nvidia CUVID 支持[自動(dòng)檢測(cè)]
--disable-d3d11va 禁用Microsof Direct3D 11 視頻加速器代碼[自動(dòng)檢測(cè)]
--disable-dxva2 禁用Microsof DirectX 9 視頻加速器代碼[自動(dòng)檢測(cè)]
--enable-libdrm? 啟用DRM代碼(Linux)[默認(rèn)關(guān)閉]
--enable-libmfx 啟用Intel MediaSDK代碼通過(guò)時(shí)會(huì)用libmfx[默認(rèn)關(guān)閉]
--enable-libnpp 啟用Nvidia性能基本代碼[默認(rèn)關(guān)閉]
--enable-mmal 啟用多媒體抽象層通過(guò)使用MMAL[默認(rèn)關(guān)閉]
--disable-nvenc 禁用Nvidi視頻編碼代碼[自動(dòng)檢測(cè)]
--enable-omx 啟用OpenMAX IL 代碼[默認(rèn)關(guān)閉]
--enable-omx-rpi 啟用OpenMAX IL 代碼樹(shù)莓派[默認(rèn)關(guān)閉]
--enable-rkmpp 啟用媒體平臺(tái)代碼[默認(rèn)關(guān)閉]
--disable-vaapi 禁用視頻加速器API代碼[自動(dòng)檢測(cè)]
--disable-vda 禁用蘋(píng)果視頻解碼加速器代碼[自動(dòng)檢測(cè)]
--disable-vdpau 禁用Nvidia視頻解碼和展示Unix代碼的API[自動(dòng)檢測(cè)]
--disable-videotoolbox 禁用VideoToolbox代碼[自動(dòng)檢測(cè)]
Toolchain options:工具鏈選項(xiàng)(指定需要編譯平臺(tái)CPU架構(gòu)類型,arm64,x86,arm7等等)
toolchain options.png
--arch=ARCH 選擇體系結(jié)構(gòu)
--cpu=CPU 選擇最小需要的CPU
--cross-prefix=PREFIX 使用前綴為編譯的工具
--progs-cross-compile? 程序名后綴
--sysroot=PATH 根交叉構(gòu)建樹(shù)
--sysinclude=PATH 編譯系統(tǒng)頭文件的路徑
--target-os=OS 編譯平臺(tái)系統(tǒng)
--target-exec=CMD 執(zhí)行的目標(biāo)文件
--target-path=DIR 編譯母的的路徑
--target-samples=DIR 樣例目錄的路徑
--tempprefix=PATH? 固定目錄/前綴代替mktmep的檢查
--toolchain=NAME 設(shè)置tool默認(rèn)名
--nm=NM 使用nm工具NM[nm -g]
--ar=AR? 使用歸檔工具AR[ar]
--as=AS 使用匯編程序AS
--ln_s=LN_S 使用特殊符號(hào)鏈接工具LN_S[ln -s -f]
--strip=STRIP? 使用帶工具條工具STRIP[strip]
--windres=WINDRES 使用windows資源編譯WINDRES[windres]
--x86asmexe=EXE 使用nasm-compatible匯編程序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[nvcc]
--ld=LD 使用鏈接者LD[]
--pkg-config=PKGCONFIG 使用包配置工具PKGCONFIG[pkg-config]
--pkg-config-flags=FLAGS 通過(guò)額外的標(biāo)志到pkgconf []
--ranlib=RANLIB 使用ranlib RANLIB[ranlib]
--doxygen=DOXYGEN 使用DOXYGEN生成API文檔[doxygen]
--host-cc=HOSTCC 使用host C 編譯HOSTCC
--host-cflags=HCFLAGS? 使用HCFLAGS編譯host
--host-cpflags= HCPPELAGS 使用HCPPELAGS編譯host
--host-ld=HOSTLD 使用host鏈接HOSTLD
--host-ldflags=HLDFLAGS 使用HLDFLAGS 鏈接host
--host-libs=HLIBS? 使用庫(kù)HLIBS鏈接host
--host-os=OS? 編譯host系統(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-ldlibflags=ELDFLAGS 添加ELDFLAGS 到LDLIBFLAGS []
--extra-libs=ELIBS 添加ELIBS []
--extra-version=STRING 版本字符串后綴[]
--optflags=OPTFLAGS 重載優(yōu)化相關(guān)的編譯器
--nvccflags=OPTFLAGS 重載nvcc [-gencode arch=compute_30,code=sm_30 -02]
--build-suffix=SUFFIX 庫(kù)名的后綴 []
--enable-pic 編譯位置獨(dú)立的代碼
--enable-thumb 編譯thumb指令集
--enable-lto? 使用鏈接時(shí)優(yōu)化
--env="ENV=override" 重載環(huán)境變量
Advanced options:高級(jí)選項(xiàng)
advanced options.png
--malloc-prefix=PREFIX? 分配內(nèi)存與相關(guān)名字的前綴
--custom-allocator=NAME? 使用受支持的自定義分配程序
--disable-symver 禁用符號(hào)版本控制
--enable-hardcoded-tables? 使用硬編碼表代替運(yùn)行時(shí)生成
--disable-safe-bitstream-reader? 在bitread時(shí),禁止緩沖器邊界check
--sws-max-filter-size=N? 最大過(guò)濾size[默認(rèn)256]
Optimization options (experts only):優(yōu)化選項(xiàng)
optimization options.png
--disable-asm 禁止所有優(yōu)化
--disable-altivec 禁止單指令流多數(shù)據(jù)流優(yōu)化
--disable-vsx 禁止VSX優(yōu)化
--disable-power8 禁止POWER8優(yōu)化
--disable-amd3dnow 禁止3DNow!優(yōu)化
--disable-amd3nowext? 禁止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-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-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-mipsfpu 禁止浮點(diǎn)MIPS優(yōu)化
--disable-mmi 禁止處理器SIMD優(yōu)化
--disable-fast-unaligned 考慮未對(duì)齊的訪問(wèn)緩慢
Developer options:開(kāi)發(fā)者選項(xiàng)
developer options.png
--disable-debug 禁止調(diào)試
--enable-debug=LEVEL 設(shè)置調(diào)試等級(jí)
--disable-optimizations 禁止編譯器優(yōu)化
--enable-extra-warnings 啟用多個(gè)編譯器警告
--disable-stripping 刪除可執(zhí)行文件和共享庫(kù)
--assert-level=level 0(默認(rèn)),1或者2,斷言測(cè)試的數(shù)量,2導(dǎo)致運(yùn)行時(shí)減速
--enable-memory-poisoning? 用任意的數(shù)據(jù)運(yùn)行填充未初始化的空間碟渺,通過(guò)valgrind進(jìn)行測(cè)試鲜锚,以使用指定的valgrind二進(jìn)制代碼來(lái)檢測(cè)內(nèi)存泄漏和錯(cuò)誤。
--valgrind=VALGRIND 運(yùn)行測(cè)試通過(guò)valgrind檢測(cè)內(nèi)存泄漏和錯(cuò)誤,使用指定的valgrind二進(jìn)制
--enable-ftrapv 算術(shù)溢出
--samples=PATH? 測(cè)試樣品路徑,如果在調(diào)用是時(shí)間沒(méi)有設(shè)置$FATE_SAMPLES
--enable-neon-clobber-test? 檢查NEON寄存器(僅用于調(diào)試目的)
--enable-xmm-clobber-test? 檢查XMM寄存器(僅僅Win64,僅用于調(diào)試目的)
--enable-random? 任意地啟用組件
--disable-random 任意地禁用組件
--enable-random=LIST 隨機(jī)啟用特定組件或組件組,列表是一個(gè)以逗號(hào)分隔的名稱[:PROB],PROB與組件名相關(guān),默認(rèn)值是0.5
--disable-random=LIST 隨機(jī)禁用特定組件或組件組,列表是一個(gè)以逗號(hào)分隔的名稱[:PROB],PROB與組件名相關(guān),默認(rèn)值是0.5
--random-seed=VALUE 根據(jù)值來(lái)啟用/禁用random
--disable-valgrind-backtrace? 不能在Valgrind下輸出向后追蹤
--enable-osfuzz 支持構(gòu)建fuzzer工具
--libfuzzer=PATH libfuzzer的路徑
--ignore-tests=TESTS 測(cè)試列表的結(jié)果是可以忽略
--enable-linux-perf? 使用Linux性能監(jiān)視器API
把這些options(選項(xiàng))終于翻譯完了,到這一步,筆者確實(shí)累了.
1.要把英文翻譯過(guò)來(lái),
2.結(jié)合技術(shù)詞匯進(jìn)行翻譯.
這里選項(xiàng)大家根據(jù)自己需要各取所需,加入到自己編譯shell中.
4.下載gas-preprocessor.pl及安裝
下載
同樣有兩種辦法:
一: github地址:https://github.com/libav/gas-preprocessor
二: 到我的github下載:請(qǐng)查看文章底部
把gas-preprocessor.pl文件與執(zhí)行sh文件放到同一目錄下.
sh_pl同一目錄.png
安裝
同樣兩種辦法:
一:
1. 下載最新的gas-preprocessor.pl
2.右鍵點(diǎn)Finder->前往文件夾苫拍,輸入/usr芜繁,
在里面新建local文件夾,進(jìn)入local文件夾中![C compiler test failed.png]
(http://upload-images.jianshu.io/upload_images/2960658-41ad8a2bf4758ada.png?
imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
再新建bin文件夾绒极,
拷貝下載的gas-preprocessor.pl到該目錄下浆洗;
3. 打開(kāi)終端,輸入 chmod 777 /usr/local/bin/gas-preprocessor.pl
二:
1.下載gas-preprocessor安裝包
2.復(fù)制gas-preprocessor.pl到/usr/sbin下
3.chmod 777 /usr/local/bin/gas-preprocessor.pl
5.編寫(xiě)腳本代碼
定義下載庫(kù)名稱
source="ffmpeg-3.4"
定義".h/.mm/.c文件編譯的結(jié)果目錄"
cache="cache"
定義.a靜態(tài)庫(kù)保存目錄
staticdir=`pwd`/"lk-ffmpeg-iOS"
添加FFmpeg配置選項(xiàng)->默認(rèn)配置
Toolchain options:工具鏈選項(xiàng)(指定我們需要編譯平臺(tái)CPU架構(gòu)類型)
--enable-cross-compile:交叉編譯
--enable-pic:允許建立與位置無(wú)關(guān)代碼
Developer options:開(kāi)發(fā)者選項(xiàng)
--disable-debug:禁止使用調(diào)試模式
Program options選項(xiàng)
--disable-programs:禁用程序(不允許建立命令行程序)
Documentation options:文檔選項(xiàng)
--disable-doc:不需要編譯文檔
configure_flags="--enable-cross-compile --disable-debug --disable-programs
--disable-doc --enable-pic"
定義默認(rèn)CPU平臺(tái)架構(gòu)類型
arm64 armv7->真機(jī)->CPU架構(gòu)類型
x86_64 i386->模擬器->CPU架構(gòu)類型
archs="arm64 armv7 x86_64 i386"
指定我們的這個(gè)庫(kù)編譯系統(tǒng)版本-iOS系統(tǒng)7.0以及以上版本使用這個(gè)靜態(tài)庫(kù)
targetversion="7.0"
接受命令后輸入?yún)?shù)
動(dòng)態(tài)接受命令輸入CPU平臺(tái)架構(gòu)類型
if [ "$*" ]
then
#存在輸入?yún)?shù),也就說(shuō):外部指定需要編譯CPU架構(gòu)類型
archs="$*"
fi
安裝匯編器->yasm
下載yasm最新版本:http://www.tortall.net/projects/yasm/releases/
首先判斷是否存在匯編器,然后通過(guò)軟件管理器,下載安裝匯編器
if [? ! `which yasm` ]
then
if [ ! `which brew` ]
then
echo "安裝brew"
ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)" || exit 1
fi
echo "安裝yasm"
brew install yasm || exit 1
fi
for循環(huán)編譯FFmpeg靜態(tài)庫(kù)
currentdir=`pwd`
for arch in #archs
do
echo "開(kāi)始編譯"
#創(chuàng)建目錄
mkdir -p "$cache/$arch"
#進(jìn)入這個(gè)目錄
cd "$cache/$arch"
#配置編譯CPU架構(gòu)類型->指定當(dāng)前編譯CPU架構(gòu)類型
archflags="-arch $arch"
#判定一下是編譯的模擬器.a靜態(tài)庫(kù),還是真機(jī).a靜態(tài)庫(kù)
if [ "$arch" = "i386" -o "$arch" = "x86_64"]
then
#模擬器
platform="iPhoneSimulator"
#支持最小系統(tǒng)版本->iOS系統(tǒng)
archflags="$archflags -mios-simulator-version-min=$targetversion"
else
#真機(jī)(mac,iOS都支持)
platform="iPhoneOS"
#支持最小系統(tǒng)版本->iOS系統(tǒng)
archflags="$archflags -mios-version-min=$targetversion -
fembed-bitcode"
#優(yōu)化處理
#如果架構(gòu)類型是"arm64",那么
if [ "$arch" = "arm64" ]
then
#程序運(yùn)行時(shí),變量訪問(wèn)越界問(wèn)題
EXPORT="GASPP_FIX_XCODE5=1"
fi
fi
編譯
將platform->轉(zhuǎn)成大寫(xiě)或者小寫(xiě)
XCRUN_SDK=`echo $platform | tr '[:upper:]''[:lower:]'`
編譯器->編譯平臺(tái)
CC="xcrun -sdk $XCRUN_SDK clang"
架構(gòu)類型->arm64
if [ "$arch" = "arm64" ]
then
#preprocessor.pl幫助我們編譯FFmpeg->arm64位靜態(tài)庫(kù)
AS="gas-preprocessor.pl -arch aarch64 -- $CC"
else
#默認(rèn)編譯平臺(tái)
AS="$CC"
fi
--target-os:目錄系統(tǒng)->darwin(mac系統(tǒng)早期版本)
--arch:CPU平臺(tái)架構(gòu)類型
--cc:指定編譯器類型選項(xiàng)
--as:匯編程序
$configure_flags最初配置
--extra-cflags
--prefix:靜態(tài)庫(kù)輸出目錄
TMPDIR=${TMPDIR/%\/} $currentdir/$source/configure \
--target-os=darwin \
--arch=$arch \
--cc="$CC" \
--as="$AS" \
$configure_flags \
--extra-cflags="$archflags" \
--extra-ldflags="$archflags" \
--prefix="$staticdir/$arch" \
|| exit 1
#執(zhí)行命令 安裝導(dǎo)出靜態(tài)庫(kù)
make -j3 install $EXPORT || exit 1
#回到了我們的腳本文件目錄
cd $currentdir
done
6.執(zhí)行腳本結(jié)果一覽
執(zhí)行成功后,這里需要等待一小會(huì)時(shí)間,此時(shí),你可以放首音樂(lè)聽(tīng)聽(tīng),等待一下
我們可以在文件夾中看到
運(yùn)行結(jié)果1.jpg
運(yùn)行結(jié)果2.jpg
運(yùn)行結(jié)果_3.png
運(yùn)行結(jié)果_4.png
7.編譯過(guò)程中遇到的問(wèn)題
執(zhí)行文件報(bào)警告
執(zhí)行shell提示.png
這里需要您給腳本授權(quán)
一.
chmod +x 腳本名
二.
chmod 777 腳本名
把我的源碼下載后,編譯時(shí)出錯(cuò)了
編譯報(bào)錯(cuò).png
沒(méi)有這樣的文件和路徑
此時(shí)文件夾內(nèi)容.png
你沒(méi)有把下載的MMpage壓縮包放在該目錄下,可見(jiàn)不報(bào)錯(cuò)都難.
語(yǔ)法錯(cuò)誤
特別注意:雖然把代碼寫(xiě)完了,進(jìn)行編譯的時(shí)候老是出錯(cuò),你又很難檢查出錯(cuò)誤.注意下圖語(yǔ)法變動(dòng),正確的使用,確保你的編譯通過(guò),否則反反復(fù)復(fù)修改,還是找不到問(wèn)題的關(guān)鍵.
語(yǔ)法錯(cuò)誤1.jpg
語(yǔ)法錯(cuò)誤2.jpg
GNU assembler not found, install/update gas-preprocessor
GNU assembler not found, install:update gas-preprocessor.png
如果這一步出錯(cuò),因?yàn)闆](méi)有把pl文件放在同一目錄下,才導(dǎo)致的錯(cuò)誤.
所以您可以最新下載的pl文件,放在同一目錄下進(jìn)行編譯.
那就需要您查看第四步操作進(jìn)行下載和安裝
C compiler test failed
C compiler test failed.png
1.打開(kāi)終端集峦。
輸入并回車
cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.
platform/developer/SDKs/
然后輸入
ls
可以查看到你當(dāng)前iOS SDK的版本
2.修改iOS SDK版本。
3.再次執(zhí)行腳本
8.個(gè)人總結(jié)
好了,到這里呢?
您就完成了FFmepg--靜態(tài)庫(kù)的編譯,
容易出錯(cuò)的地方呢?
文件未授權(quán)
語(yǔ)法錯(cuò)誤
下載的文件并沒(méi)有放在同一目錄下
gas-preprocessor.pl
FFmepg解壓包
...
當(dāng)您完成這些操作,還是蠻有成就的,
編譯自己想要的靜態(tài)庫(kù),需要花費(fèi)時(shí)間,需要靜心等待,
編譯出錯(cuò)就需要您想辦法解決,
個(gè)人覺(jué)得寫(xiě)編譯腳本不是一件困難的事,關(guān)鍵是遇到了編譯出錯(cuò)的問(wèn)題,你是否可以自己解決.
考驗(yàn)了一下個(gè)人能力時(shí)候到了,如果您覺(jué)得對(duì)您有幫助,請(qǐng)您來(lái)一波鮮花和贊.