文章目錄
- 前言
- 下載
- msys2
- ysam
- FFmpeg
- 搭建編譯環境
- 安裝msys2
- 安裝QT Mingw編譯器到msys環境中
- 安裝ysam
- 測試
- 編譯FFmpeg
- 測試
前言
FFmpeg不像VLC有支持QT的庫文件,它僅提供源碼,需要使用者自行編譯成對應的庫,當使用QT+FFmpeg實現播放視頻以及視頻流時,需要使用QT自帶的Mingw對FFmpeg進行編譯,下面我們來介紹如何使用QT Mingw編譯FFmpeg源碼。
下載
首先需要下載幾個工具用于FFmpeg的編譯,工具名稱以及下載地址如下:
msys2
MSYS2 (Minimal SYStem 2) 是一個MSYS的獨立改寫版本,集成了 shell 命令行開發環境。它也是一個在Cygwin (POSIX 兼容性層) 和 MinGW-w64(從MinGW-生成)基礎上產生的,追求更好的互操作性的 Windows 軟件。
MSYS2 [1]是MSYS的一個升級版,準確的說是集成了pacman和Mingw-w64的Cygwin升級版, 提供了bash shell等linux環境、版本控制軟件(git/hg)和MinGW-w64 工具鏈。與MSYS最大的區別是移植了 Arch Linux的軟件包管理系統 Pacman(其實是與Cygwin的區別)。
下載地址:https://www.msys2.org/ 此地址在國內下載較慢,可以使用下面的鏈接快速下載:
阿里映像:https://mirrors.aliyun.com/msys2/distrib/x86_64/
我下載的版本是:msys2-x86_64-20240113.exe
ysam
Yasm是一個完全重寫的NASM匯編。它支持x86和AMD64指令集。接受NASM和GNU匯編器(gas)語法,產出二進制, ELF32 , ELF64 , COFF , Mach - O的( 32和64 ) , RDOFF2 ,的Win32和Win64對象的格式,并生成STABS 調試信息的來源,DWARF 2 ,CodeView 8格式。
下載地址:http://www.tortall.net/projects/yasm/releases/
我下載的版本是:yasm-1.3.0-win32.exe
FFmpeg
FFmpeg是一套可以用來記錄、轉換數字音頻、視頻,并能將其轉化為流的開源計算機程序。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多code都是從頭開發的。
下載地址:http://www.ffmpeg.org/releases/
我下載的版本是:ffmpeg-6.1.1.tar.xz
搭建編譯環境
安裝msys2
點擊下載好的程序,選擇安裝位置,后面一直點擊下一步即可。
我安裝的位置是:D:/msys64
安裝QT Mingw編譯器到msys環境中
32bit:
將QT中Mingw32編譯器復制到msys2安裝路徑的mingw32文件夾中,下圖展示了QT Mingw32編譯器位置以及msys2需要拷貝到的位置,相同的可以拷貝QTMingw64的編譯器到msys2的mingw64文件夾中。
64bit:
將QT中Mingw64編譯器復制到msys2安裝路徑的mingw64文件夾中。
安裝ysam
32bit:
將下載的yasm-1.3.0-win32.exe文件名稱更改為yasm.exe,然后拷貝到msys2的mingw32的安裝路徑中,具體路徑如下:
64bit:
將下載的yasm-1.3.0-win64.exe文件名稱更改為yasm.exe,然后拷貝到msys2的mingw64的安裝路徑中
測試
32bit:
運行msys2安裝路徑下的mingw32.exe,路徑如下:
雙擊后在命令行中輸入gcc -v,返回出正確的qt中mingw的編譯器即可。
64bit:
運行msys2安裝路徑下的mingw64.exe,
編譯FFmpeg
拷貝下載好的ffmpeg源碼到如下路徑,并解壓:
源碼放置位置:D:\msys64\home\計算機名
在ffmpeg源碼文件夾中新建configure.sh,內容如下:
32bit:
./configure \--prefix="/usr/local/ffmpeg" \--enable-shared --disable-static \--enable-w32threads --disable-debug --disable-everything \--enable-gpl --disable-network \--enable-encoder=bmp,mjpeg,jpeg2000,mpeg4 \--enable-decoder=h264,hevc,mpeg4,mjpeg,bmp \--enable-demuxer=h264,hevc,avi,matroska,image2,image_bmp_pipe \--enable-muxer=h264,hevc,avi,matroska,mp4,mjpeg,image2 \--enable-parser=h264,hevc,mjpeg,bmp \--enable-protocol=file \--enable-filter=scale \--disable-indevs \--disable-hwaccels \--extra-libs=-lmsvcrt
64bit:
./configure \--prefix="/usr/local/ffmpeg" \--enable-shared --disable-static \--disable-w32threads --disable-debug --disable-everything \--enable-gpl --disable-network \--enable-encoder=bmp,mjpeg,jpeg2000,mpeg4 \--enable-decoder=h264,hevc,mpeg4,mjpeg,bmp \--enable-demuxer=h264,hevc,avi,matroska,image2,image_bmp_pipe \--enable-muxer=h264,hevc,avi,matroska,mp4,mjpeg,image2 \--enable-parser=h264,hevc,mjpeg,bmp \--enable-protocol=file \--enable-filter=scale \--disable-indevs \--disable-hwaccels \--extra-libs=-lmsvcrt
configure的選項具體含義如下:
幫助選項:--help 打印此消息--quiet 抑制顯示信息輸出--list-decoders 顯示所有可用的解碼器--list-encoders 顯示所有可用的編碼器--list-hwaccels 顯示所有可用的硬件加速器--list-demuxers 顯示所有可用的解復用器--list-muxers 顯示所有可用的復用器--list-parsers 顯示所有可用的解析器--list-protocols 顯示所有可用的協議--list-bsfs 顯示所有可用的比特流過濾器--list-indevs 顯示所有可用的輸入設備--list-outdevs 顯示所有可用的輸出設備--list-filters 顯示所有可用的過濾器 標準選項:--logfile = FILE日志測試并輸出到FILE [ffbuild / config.log]--disable-logging不記錄配置調試信息- 如果生成任何配置警告,則-fatal-warnings將失敗--prefix = PREFIX安裝在PREFIX [/ usr / local]-bindir = DIR在DIR [PREFIX / bin]中安裝二進制文件-datadir = DIR在DIR中安裝數據文件[PREFIX / share / ffmpeg]-docdir = DIR中的DIR安裝文檔[PREFIX / share / doc / ffmpeg]--libdir = DIR在DIR [PREFIX / lib]中安裝庫--shlibdir = DIR在DIR [LIBDIR]中安裝共享庫--incdir = DIR安裝包含在DIR [PREFIX / include]中--mandir =在DIR安裝手冊頁[PREFIX / share / man]--pkgconfigdir = DIR在DIR中安裝pkg-config文件[LIBDIR / pkgconfig]--enable-rpath使用rpath允許在路徑中安裝庫不屬于動態鏈接器搜索路徑的一部分鏈接程序時使用rpath(USE WITH CARE)--install-name-dir =已安裝目標的DIR Darwin目錄名
許可選項:--enable-gpl允許使用GPL代碼,生成的庫和二進制文件將在GPL下[no]--enable-version3升級(L)GPL到版本3 [no]--enable-nonfree允許使用非自由代碼,生成的庫和二進制文件將是不可分發的[不]
配置選項:--disable-static不構建靜態庫[no]--enable-shared構建共享庫[no]--enable-small優化尺寸而不是速度--disable-runtime-cpudetect禁用在運行時檢測CPU功能(較小的二進制)--enable-grey啟用全灰度支持(較慢的顏色)--disable-swscale-alpha禁用swscale中的alpha通道支持--disable-all禁用構建組件,庫和程序--disable-autodetect禁用自動檢測到的外部庫[no]
計劃選項:--disable-programs不構建命令行程序--disable-ffmpeg禁用ffmpeg構建--disable-ffplay禁用ffplay構建--disable-ffprobe禁用ffprobe構建
文檔選項:--disable-doc不構建文檔--disable-htmlpages不構建HTML文檔頁面--disable-manpages不構建man文檔頁面--disable-podpages不構建POD文檔頁面--disable-txtpages不構建文本文檔頁面
組件選項:--disable-avdevice禁用libavdevice構建--disable-avcodec禁用libavcodec構建--disable-avformat禁用libavformat構建--disable-swresample禁用libswresample build--disable-swscale禁用libswscale構建--disable-postproc禁用libpostproc構建--disable-avfilter禁用libavfilter構建--enable-avresample啟用libavresample build(不建議使用)[no]--disable-pthreads禁用pthreads [autodetect]--disable-w32threads禁用Win32線程[autodetect]--disable-os2threads禁用OS / 2線程[autodetect]--disable-network禁用網絡支持[否]--disable-dct禁用DCT代碼--disable-dwt禁用DWT代碼--disable-error-resilience禁用錯誤恢復代碼--disable-lsp禁用LSP代碼--disable-lzo禁用LZO解碼器代碼--disable-mdct禁用MDCT代碼--disable-rdft禁用RDFT代碼--disable-fft禁用FFT代碼--disable-faan禁用浮點AAN(I)DCT代碼--disable-pixelutils禁用libavutil中的pixel utils
個別組件選項:--disable-everything禁用下面列出的所有組件--disable-encoder = NAME禁用編碼器名稱--enable-encoder = NAME啟用編碼器NAME--disable-encoders禁用所有編碼器--disable-decoder = NAME禁用解碼器NAME--enable-decoder = NAME啟用解碼器NAME--disable-decoders禁用所有解碼器--disable-hwaccel = NAME禁用hwaccel NAME--enable-hwaccel = NAME啟用hwaccel NAME--disable-hwaccels禁用所有hwaccel--disable-muxer = NAME禁用muxer NAME--enable-muxer = NAME啟用muxer NAME--disable-muxers禁用所有復用器--disable-demuxer = NAME禁用demuxer NAME--enable-demuxer = NAME啟用解復用程序NAME--disable-demuxers禁用所有解復用器--enable-parser = NAME啟用解析器NAME--disable-parser = NAME禁用解析器NAME--disable-parsers禁??用所有解析器--enable-bsf = NAME啟用比特流過濾器NAME--disable-bsf = NAME禁用比特流過濾器NAME--disable-bsfs禁用所有比特流過濾器--enable-protocol = NAME啟用協議NAME--disable-protocol = NAME禁用協議名稱--disable-protocols禁用所有協議--enable-indev = NAME啟用輸入設備NAME--disable-indev = NAME禁用輸入設備NAME--disable-indevs禁用輸入設備--enable-outdev = NAME啟用輸出設備NAME--disable-outdev = NAME禁用輸出設備NAME--disable-outdevs禁用輸出設備--disable-devices禁用所有設備--enable-filter = NAME啟用過濾器NAME--disable-filter = NAME禁用過濾器名稱--disable-filters禁用所有過濾器
外部庫支持:
使用以下任何一個開關將允許FFmpeg鏈接到
相應的外部庫。所有組件都依賴于該庫
如果所有其他依賴項都得到滿足而未滿足,則將啟用
明確禁用。例如。 –enable-libwavpack將啟用鏈接
libwavpack并允許構建libwavpack編碼器,除非它是
使用–disable-encoder = libwavpack專門禁用。請注意,僅自動檢測系統庫。所有其他外部
必須明確啟用庫。另請注意,以下幫助文本描述了庫的用途
他們自己并非所有功能都必須由FFmpeg使用。--disable-alsa禁用ALSA支持[autodetect]--disable-appkit禁用Apple AppKit框架[autodetect]--disable-avfoundation禁用Apple AVFoundation框架[autodetect]--enable-avisynth可以讀取AviSynth腳本文件[no]--disable-bzlib disable bzlib [autodetect]--disable-coreimage禁用Apple CoreImage框架[autodetect]--enable-chromaprint啟用帶色度的音頻指紋識別[no]--enable-frei0r啟用frei0r視頻過濾[no]--enable-gcrypt啟用gcrypt,rtmp(t)e支持所需如果沒有使用openssl,librtmp或gmp [no]--enable-gmp啟用gmp,rtmp(t)e支持所需如果沒有使用openssl或librtmp [no]--enable-gnutls支持https支持所需的gnutls如果沒有使用openssl或libtls [no]--disable-iconv禁用iconv [autodetect]--enable-jni啟用JNI支持[no]--enable-ladspa啟用LADSPA音頻過濾[否]--enable-libaom通過libaom啟用AV1視頻編碼/解碼[no]--enable-libass啟用libass字幕渲染,字幕和屁股過濾所需[no]--enable-libbluray使用libbluray啟用BluRay讀取[no]--enable-libbs2b啟用bs2b DSP庫[no]--enable-libcaca使用libcaca啟用文本顯示[no]--enable-libcelt通過libcelt啟用CELT解碼[no]--enable-libcdio啟用音頻CD抓取libcdio [no]--enable-libcodec2使用libcodec2啟用codec2 en / decode [no]--enable-libdc1394使用libdc1394啟用IIDC-1394和libraw1394 [no]--enable-libfdk-aac通過libfdk-aac啟用AAC de / encoding [no]--enable-libflite通過libflite啟用flite(語音合成)支持[no]--enable-libfontconfig啟用libfontconfig,對drawtext過濾器很有用[no]--enable-libfreetype啟用libfreetype,drawtext過濾器需要[no]--enable-libfribidi啟用libfribidi,改進了drawtext過濾器[no]--enable-libgme通過libgme啟用游戲音樂Emu [no]--enable-libgsm通過libgsm啟用GSM de / encoding [no]--enable-libiec61883通過libiec61883啟用iec61883 [no]--enable-libilbc通過libilbc啟用iLBC de / encoding [no]--enable-libjack啟用JACK音頻聲音服務器[否]--enable-libkvazaar通過libkvazaar啟用HEVC編碼[no]--enable-libmodplug通過libmodplug啟用ModPlug [no]--enable-libmp3lame通過libmp3lame啟用MP3編碼[no]--enable-libopencore-amrnb通過libopencore-amrnb啟用AMR-NB de / encoding [no]--enable-libopencore-amrwb通過libopencore-amrwb啟用AMR-WB解碼[no]--enable-libopencv通過libopencv啟用視頻過濾[no]--enable-libopenh264通過OpenH264啟用H.264編碼[no]--enable-libopenjpeg通過OpenJPEG啟用JPEG 2000 de / encoding [no]--enable-libopenmpt通過libopenmpt啟用解碼跟蹤文件[no]--enable-libopus通過libopus啟用Opus de / encoding [no]--enable-libpulse通過libpulse啟用Pulseaudio輸入[no]--enable-librsvg通過librsvg啟用??SVG光柵化[no]--enable-librubberband啟用橡皮帶過濾器所需的橡皮帶[no]--enable-librtmp通過librtmp [no]啟用RTMP [E]支持--enable-libshine通過libshine啟用定點MP3編碼[no]--enable-libsmbclient通過libsmbclient啟用Samba協議[no]--enable-libsnappy啟用Snappy壓縮,用于hap編碼[no]--enable-libsoxr enable包含libsoxr重采樣[no]--enable-libspeex通過libspeex啟用Speex de / encoding [no]--enable-libsrt通過libsrt啟用Haivision SRT協議[no]--enable-libssh通過libssh啟用SFTP協議[no]--enable-libtesseract啟用tesseract,ocr過濾器需要[no]--enable-libtheora通過libtheora啟用Theora編碼[no]--enable-libtls啟用了LibreSSL(通過libtls),這是https支持所必需的如果沒有使用openssl或gnutls [no]--enable-libtwolame通過libtwolame啟用MP2編碼[no]--enable-libv4l2啟用libv4l2 / v4l-utils [no]--enable-libvidstab使用vid.stab [no]啟用視頻穩定--enable-libvmaf通過libvmaf啟用vmaf過濾器[no]--enable-libvo-amrwbenc通過libvo-amrwbenc [no]啟用AMR-WB編碼--enable-libvorbis通過libvorbis啟用Vorbis en /解碼,本機實現存在[否]--enable-libvpx通過libvpx啟用VP8和VP9 de / encoding [no]--enable-libwavpack通過libwavpack啟用wavpack編碼[no]--enable-libwebp通過libwebp啟用WebP編碼[no]--enable-libx264通過x264啟用H.264編碼[no]--enable-libx265通過x265啟用HEVC編碼[no]--enable-libxavs通過xavs啟用AVS編碼[no]--enable-libxcb使用XCB啟用X11抓取[autodetect]--enable-libxcb-shm啟用X11抓取shm通信[autodetect]--enable-libxcb-xfixes啟用X11抓取鼠標渲染[autodetect]--enable-libxcb-shape啟用X11抓取形狀渲染[autodetect]--enable-libxvid通過xvidcore啟用Xvid編碼,原生MPEG-4 / Xvid編碼器存在[no]--enable-libxml2使用C庫libxml2 [no]啟用XML解析--enable-libzimg啟用z.lib,zscale過濾器需要[no]--enable-libzmq啟用通過libzmq傳遞的消息[no]--enable-libzvbi通過libzvbi啟用圖文電視支持[no]--enable-lv2啟用LV2音頻過濾[否]--disable-lzma disable lzma [autodetect]--enable-decklink啟用Blackmagic DeckLink I / O支持[no]--enable-libndi_newtek啟用Newteck NDI I / O支持[no]--enable-mediacodec支持Android MediaCodec [no]--enable-libmysofa啟用libmysofa,sofalizer過濾器需要[no]--enable-openal啟用OpenAL 1.1捕獲支持[no]--enable-opencl啟用OpenCL處理[no]--enable-opengl啟用OpenGL渲染[no]--enable-openssl啟用openssl,https支持所需如果不使用gnutls或libtls [no]--disable-sndio禁用sndio支持[autodetect]--disable-schannel禁用SChannel SSP,需要TLS支持Windows如果沒有使用openssl和gnutls [autodetect]--disable-sdl2禁用sdl2 [autodetect]--disable-securetransport禁用TLS支持所需的安全傳輸在OSX上如果沒有使用openssl和gnutls [autodetect]--disable-xlib禁用xlib [autodetect]--disable-zlib禁用zlib [autodetect]
以下庫提供各種硬件加速功能:--disable-amf禁用AMF視頻編碼代碼[autodetect]--disable-audiotoolbox禁用Apple AudioToolbox代碼[autodetect]--enable-cuda-sdk啟用需要CUDA SDK的CUDA功能[否]--disable-cuvid禁用Nvidia CUVID支持[autodetect]--disable-d3d11va禁用Microsoft Direct3D 11視頻加速代碼[autodetect]--disable-dxva2禁用Microsoft DirectX 9視頻加速代碼[autodetect]--disable-ffnvcodec禁用動態鏈接的Nvidia代碼[autodetect]--enable-libdrm啟用DRM代碼(Linux)[no]--enable-libmfx通過libmfx [no]啟用Intel MediaSDK(AKA快速同步視頻)代碼--enable-libnpp啟用基于Nvidia Performance Primitives的代碼[no]--enable-mmal通過MMAL啟用Broadcom多媒體抽象層(Raspberry Pi)[no]--disable-nvdec禁用Nvidia視頻解碼加速(通過hwaccel)[autodetect]--disable-nvenc禁用Nvidia視頻編碼代碼[autodetect]--enable-omx啟用OpenMAX IL代碼[no]--enable-omx-rpi為Raspberry Pi啟用OpenMAX IL代碼[no]--enable-rkmpp啟用Rockchip Media Process Platform代碼[no]--disable-v4l2-m2m禁用V4L2 mem2mem代碼[autodetect]--disable-vaapi禁用視頻加速API(主要是Unix / Intel)代碼[autodetect]--disable-vdpau禁用Nvidia Video Decode和Presentation API for Unix code [autodetect]--disable-videotoolbox禁用VideoToolbox代碼[autodetect]
工具鏈選項:
--arch = ARCH select architecture []--cpu = CPU選擇所需的最小CPU(影響指令選擇,可能會在較舊的CPU上崩潰)--cross-prefix = PREFIX使用PREFIX編譯工具[]--progs-suffix = SUFFIX程序名后綴[]--enable-cross-compile假設使用了交叉編譯器--sysroot =交叉構建樹的PATH根--sysinclude =交叉構建系統頭的PATH位置--target-os = OS編譯器目標OS []--target-exec = CMD命令在目標上運行可執行文件--target-path =在目標上查看構建目錄的DIR路徑--target-samples =目標上樣本目錄的DIR路徑--tempprefix = PATH強制修復dir /前綴而不是mktemp進行檢查--toolchain = NAME根據NAME設置工具默認值(gcc-asan,clang-asan,gcc-msan,clang-msan,gcc-tsan,clang-tsan,gcc-usan,clang-usan,valgrind-massif,valgrind-memcheck,msvc,icl,gcov,llvm-cov,hardened)--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 [nvcc]--ld = LD使用鏈接器LD []--pkg-config = PKGCONFIG使用pkg-config工具PKGCONFIG [pkg-config]--pkg-config-flags = FLAGS將附加標志傳遞給pkgconf []--ranlib = RANLIB使用ranlib RANLIB [ranlib]--doxygen = DOXYGEN使用DOXYGEN生成API doc [doxygen]--host-cc = HOSTCC使用主機C編譯器HOSTCC--host-cflags = HCFLAGS在編譯主機時使用HCFLAGS--host-cppflags = HCPPFLAGS在編譯主機時使用HCPPFLAGS--host-ld = HOSTLD使用主機鏈接器HOSTLD--host-ldflags = HLDFLAGS在鏈接主機時使用HLDFLAGS--host-libs = HLIBS在鏈接主機時使用libs HLIBS--host-os = OS編譯器主機OS []--extra-cflags = ECFLAGS將ECFLAGS添加到CFLAGS []--extra-cxxflags = ECFLAGS將ECFLAGS添加到CXXFLAGS []--extra-objcflags = FLAGS將標志添加到OBJCFLAGS []--extra-ldflags = ELDFLAGS將ELDFLAGS添加到LDFLAGS []--extra-ldexeflags = ELDFLAGS將ELDFLAGS添加到LDEXEFLAGS []--extra-ldsoflags = ELDFLAGS將ELDFLAGS添加到LDSOFLAGS []--extra-libs = ELIBS add ELIBS []--extra-version = STRING版本字符串后綴[]--optflags = OPTFLAGS覆蓋與優化相關的編譯器標志--nvccflags = NVCCFLAGS覆蓋nvcc標志[-gencode arch = compute_30,code = sm_30 -O2]--build-suffix = SUFFIX庫名后綴[]--enable-pic構建與位置無關的代碼Thumb指令集的--enable-thumb編譯--enable-lto使用鏈接時優化--env =“ENV = override”覆蓋環境變量
高級選項(僅限專家):--malloc-prefix = PREFIX前綴malloc和PREFIX的相關名稱--custom-allocator = NAME使用受支持的自定義分配器--disable-symver禁用符號版本控制--enable-hardcoded-tables使用硬編碼表而不是運行時生成- 禁用安全比特流閱讀器在bitreaders中禁用緩沖區邊界檢查(更快,但可能會崩潰)--sws-max-filter-size = N swscale使用的最大過濾器大小[256]
優化選項(僅限專家):--disable-asm禁用所有程序集優化--disable-altivec禁用AltiVec優化--disable-vsx禁用VSX優化--disable-power8禁用POWER8優化--disable-amd3dnow禁用3DNow!優化--disable-amd3dnowext禁用3DNow!擴展優化--disable-mmx禁用MMX優化--disable-mmxext禁用MMXEXT優化--disable-sse禁用SSE優化--disable-sse2禁用SSE2優化--disable-sse3禁用SSE3優化--disable-ssse3禁用SSSE3優化--disable-sse4禁用SSE4優化--disable-sse42禁用SSE4.2優化--disable-avx禁用AVX優化--disable-xop禁用XOP優化--disable-fma3禁用FMA3優化--disable-fma4禁用FMA4優化--disable-avx2禁用AVX2優化--disable-avx512禁用AVX-512優化--disable-aesni禁用AESNI優化--disable-armv5te禁用armv5te優化--disable-armv6禁用armv6優化--disable-armv6t2禁用armv6t2優化--disable-vfp禁用VFP優化--disable-neon禁用NEON優化--disable-inline-asm禁用內聯匯編--disable-x86asm禁用獨立x86程序集--disable-mipsdsp禁用MIPS DSP ASE R1優化--disable-mipsdspr2禁用MIPS DSP ASE R2優化--disable-msa禁用MSA優化--disable-mipsfpu禁用浮點MIPS優化--disable-mmi禁用龍芯SIMD優化--disable-fast-unaligned認為未對齊的訪問速度很慢
開發人員選項(在處理FFmpeg時很有用):--disable-debug禁用調試符號--enable-debug = LEVEL設置調試級別[]--disable-optimizations禁用編譯器優化--enable-extra-warnings可以啟用更多編譯器警告--disable-stripping禁用剝離可執行文件和共享庫--assert-level = 0級(默認),1或2,斷言測試量,2導致運行時減速。--enable-memory-poisoning fill heap未初始化的已分配空間和任意數據--valgrind = VALGRIND通過valgrind運行“make fate”測試來檢測內存泄漏和錯誤,使用指定的valgrind二進制文件。不能與--target-exec結合使用--enable-ftrapv陷阱算術溢出--samples = FATE的測試樣本的PATH位置,如果沒有設置使用make調用時的$ FATE_SAMPLES。--enable-neon-clobber-test檢查NEON寄存器用于破壞(應該是僅用于調試目的)--enable-xmm-clobber-test檢查XMM注冊用于clobbering(僅限Win64;應該只用于調試目的)--enable-random隨機啟用/禁用組件--disable隨機--enable-random = LIST隨機啟用/禁用特定組件或--disable-random = LIST組件組。 LIST是以逗號分隔的列表NAME是組件的NAME [:PROB]條目(組)和PROB相關的概率NAME(默認為0.5)。--random-seed = --enable / disable-random的VALUE種子值--disable-valgrind-backtrace不會在Valgrind下打印回溯(僅適用于--disable-optimizations構建)--enable-osfuzz啟用構建模糊工具--libfuzzer = libfuzzer的路徑--ignore-tests = TESTS以逗號分隔的列表(沒有“fate-”前綴在名稱中)的結果被忽略的測試--enable-linux-perf啟用Linux性能監視器API
32bit:
雙擊 D:\msys64\mingw32.exe,在命令行中使用cd命令打開ffmpeg源代碼文件夾,在文件夾路徑運行編譯指令
cd D:\msys64\home\計算機名xxx\ffmpeg-6.1.1./configure.shmingw32-makemingw32-make install
64bit:
cd D:\msys64\home\計算機名xxx\ffmpeg-6.1.1./configure.shmingw32-makemingw32-make install
make 32bit與64bit執行的命令相同。
運行./configure.sh時會提示找不到pkg-config以及command not found,不用管,繼續執行mingw32-make和mingw32-make,編譯好的庫和頭文件會安裝到D:\msys64\usr\local\ffmpeg中,拷貝lib和include到QT工程中,拷貝bin中的dll到QT的構建目錄中。
如上,QT Mingw編譯ffmpeg成功。
測試
新建QT項目,在Widget構建函數中添加如下代碼:
unsigned version = avcodec_version();qDebug()<<"ffmpeg version:"<< version;
打印如下即代表調用正常:
ffmpeg version: 3940198
如果執行時報錯:程序崩潰,則將編譯好的bin下面的dll庫拷貝到構建目錄中即可。
參考文章:https://blog.csdn.net/dashuo0501/article/details/128166736