QT Mingw32/64編譯ffmpeg源碼生成32/64bit庫以及測試

文章目錄

  • 前言
  • 下載
    • 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文件夾中。
QTMingw32編譯器位置
msys2 Mingw32位置
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級(默認),12,斷言測試量,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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/717680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/717680.shtml
英文地址,請注明出處:http://en.pswp.cn/news/717680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

連接 mongodb集群的集中方式

mongodb 連接到復制集 mongodb://node1,node2,node3.../database?[options]mongodb 連接到分片集 mongodb://mongos1,mongos2,mongos3.../database?[options]使用 mongosrv 通過域名解析得到所有的 mongos 或 節點的地址, 而不是把這些寫在連接字符串中. mongodbsrv://se…

經典的算法面試題(1)

題目&#xff1a; 給定一個整數數組 nums&#xff0c;編寫一個算法將所有的0移到數組的末尾&#xff0c;同時保持非零元素的相對順序。 示例: 輸入: [0,1,0,3,12] 輸出: [1,3,12,0,0] 注意&#xff1a;必須在原數組上操作&#xff0c;不能拷貝額外的數組。盡量減少操作次數。 這…

數據處理——一維數組轉列向量(分割時間序列為數據塊時的問題)

記錄在處理數據時被磕絆了一下的一個處理細節。 1.想要達到的要求 在某次滑動窗口取樣時間序列數據時&#xff0c;我得到如下一個以一維數組為元素的列表&#xff1a; 對于如上輸出列表中的每個一維數組&#xff0c;我希望將其轉換為下圖中的形式&#xff0c;簡單說就是希望他…

編程筆記 Golang基礎 042 文件處理

編程筆記 Golang基礎 042 文件處理 一、文件處理二、Go語言文件處理創建文件和寫入內容打開文件并按模式讀寫讀取文件內容更高級的文件和IO操作改變文件權限目錄操作 小結 一、文件處理 文件處理是指在計算機科學中&#xff0c;對存儲在磁盤或其他持久性存儲介質上的文件進行的…

Android Jni添加打印(C++打印)

Android Jni添加打印&#xff08;C打印&#xff09; 文章目錄 Android Jni添加打印&#xff08;C打印&#xff09;一、前言二、添加日志實現1、在某個類上面定義類型和方法2、把日志方法定義在.h文件中定義 myLog.h3、引用打印頭文件的示例代碼&#xff08;1&#xff09; MainA…

【詳識JAVA語言】面向對象程序三大特性之三:多態

多態 多態的概念 多態的概念&#xff1a;通俗來說&#xff0c;就是多種形態&#xff0c;具體點就是去完成某個行為&#xff0c;當不同的對象去完成時會產生出不同的狀態。 多態實現條件 在java中要實現多態&#xff0c;必須要滿足如下幾個條件&#xff0c;缺一不可&#xf…

循環隊列與循環雙端隊列

文章目錄 前言循環隊列循環雙端隊列 前言 1、學習循環隊列和循環雙端隊列能加深我們對隊列的理解&#xff0c;提高我們的編程能力。 2、本文循環隊列使用的是數組&#xff0c;循環雙端隊列用的是雙向鏈表 3、題目連接&#xff1a;設計循環隊列 &#xff0c;設計循環雙端隊列。 …

【機器學習】有監督學習算法之:支持向量機

支持向量機 1、引言2、決策樹2.1 定義2.2 原理2.3 實現方式2.4 算法公式2.5 代碼示例 3、總結 1、引言 小屌絲&#xff1a;魚哥&#xff0c;泡澡啊。 小魚&#xff1a;不去 小屌絲&#xff1a;… 此話當真&#xff1f; 小魚&#xff1a;此話不假 小屌絲&#xff1a;到底去還是…

Linux 網絡接口的混雜模式(Promiscuous mode)認知

寫在前面 博文內容為 混雜模式的簡單認知理解不足小伙伴幫忙指正 認定一件事&#xff0c;即使拿十分力氣都無法完成&#xff0c;也要拿出十二分力氣去努力。 —《劍來》 網絡接口的混雜模式 混雜模式(Promiscuous mode)&#xff0c;簡稱 Promisc mode&#xff0c;俗稱監聽模式…

什么是支持向量機(Support vector machine)和其原理

作為機器學習的基礎算法&#xff0c;SVM被反復提及&#xff0c;西瓜書、wiki都能查到詳細介紹&#xff0c;但是總是覺得還差那么點&#xff0c;于是決定自己總結一下。 一、什么是SVM&#xff1f; 1、解決什么問題&#xff1f; SVM&#xff0c;最原始的版本是用于最簡單的線…

藍橋杯備賽第五篇(動態規劃)

1.數位dp public class Main {static long[] limit;static int length;static long[][] dp;public static long dfs(int pos, int pre, boolean flag, boolean lead) {if (pos length) return 1;if (!flag && !lead && dp[pos][pre] ! -1) return dp[pos][pr…

總結 HashTable, HashMap, ConcurrentHashMap 之間的區別

1.多線程環境使用哈希表 HashMap 不行,線程不安全 更靠譜的,Hashtable,在關鍵方法上加了synchronized 后來標準庫又引入了一個更好的解決方案;ConcurrentHashMap 2.HashMap 首先HashMap本身線程不安全其次HashMap的key值可以為空&#xff08;當key為空時&#xff0c;哈希會…

【Java數據結構】——五道算法題讓你靈活運用Map和Set

目錄 一.只出現一次的數字 二.寶石與石頭 三.舊鍵盤 四.給定一個數組&#xff0c;統計每個元素出現的次數 五.前K個高頻單詞 一.只出現一次的數字 136. 只出現一次的數字 - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a;我們將nums中每個元素都存入到set中…

C/C++嵌入式開發環境搭建,Qt交叉編譯,cmake交叉編譯,clion/vscode遠程開發

目錄 交叉編譯簡介cmake 交叉編譯clion 交叉編譯vscode 遠程嵌入式開發Qt交叉編譯1.安裝交叉編譯工具2.交叉編譯qt庫3.將交叉編譯的Qt庫復制到板子上4.安裝和配置 Qt Creator&#xff0c;支持交叉編譯5.QT嵌入式開發6.QT嵌入式開發報錯解決QIconvCodec::convertToUnicode: usin…

ASUS華碩天選5筆記本電腦FX607JV原裝出廠Win11系統下載

ASUS TUF Gaming F16 FX607JV天選五原廠Windows11系統 適用型號&#xff1a; FX607JU、FX607JI、FX607JV、 FX607JIR、FX607JVR、FX607JUR 下載鏈接&#xff1a;https://pan.baidu.com/s/1l963wqxT0q1Idr98ACzynQ?pwd0d46 提取碼&#xff1a;0d46 原廠系統自帶所有驅動、…

TypeScript中 “ <> “ 語法 和 “ : “ 怎么使用

在 TypeScript 中&#xff0c;尖括號語法(<Type>)和as關鍵字(value as Type)都是用于類型斷言&#xff0c;而冒號(:)用于類型注解。這三種語法在不同的場景下使用&#xff1a; 尖括號語法和as關鍵字&#xff1a; 尖括號語法(<Type>value)&#xff1a; 這種語法在…

[LeetBook]【學習日記】鏈表反轉

來源于「Krahets」的《圖解算法數據結構》 https://leetcode.cn/leetbook/detail/illustration-of-algorithm/ 鏈表反轉的遞歸要點 遞歸終止條件為當前節點為空&#xff0c;表明遍歷到了鏈表尾部遞歸函數傳入參數為當前節點的下一個節點按照是否重新開辟存儲空間分類下面只寫…

python自動化學習--3.8python操作EXCEL文件python日志收集處理

1、Excel文件處理 安裝 openpxl 第三方庫 openpxl 模塊三大組件: 1、工作簿 &#xff08;包含多個sheet工作表&#xff09; 2、工作表 &#xff08;某個數據包含在某個工作表&#xff09; 3、單元格 1、創建excel工作簿 import openpyxl"""Excel表格的創建…

【簡說八股】Spring事務失效可能是哪些原因?

Spring事務介紹 Spring事務是指在Spring框架中對數據庫操作進行管理的一種機制&#xff0c;它確保一組數據庫操作要么完全執行成功&#xff08;提交&#xff09;&#xff0c;要么完全不執行&#xff08;回滾&#xff09;&#xff0c;從而保持數據一致性和完整性。 Spring框架…

GotoXy控制臺光標的位置更新

光標控制解釋 控制臺的光標更新方法, 用于控制數據輸出位置 void gotoXY(int x, int y)//新函數&#xff1a;更新光標 {COORD c;c.X x;c.Y y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c); }代碼解釋 這段代碼定義了一個名為 gotoXY 的函數&#xff0c;…