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.mzph.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;简单说就是希望他…

【详识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;到底去还是…

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

作为机器学习的基础算法&#xff0c;SVM被反复提及&#xff0c;西瓜书、wiki都能查到详细介绍&#xff0c;但是总是觉得还差那么点&#xff0c;于是决定自己总结一下。 一、什么是SVM&#xff1f; 1、解决什么问题&#xff1f; SVM&#xff0c;最原始的版本是用于最简单的线…

总结 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中…

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 原厂系统自带所有驱动、…

python自动化学习--3.8python操作EXCEL文件python日志收集处理

1、Excel文件处理 安装 openpxl 第三方库 openpxl 模块三大组件: 1、工作簿 &#xff08;包含多个sheet工作表&#xff09; 2、工作表 &#xff08;某个数据包含在某个工作表&#xff09; 3、单元格 1、创建excel工作簿 import openpyxl"""Excel表格的创建…

GotoXy控制台光标的位置更新

光标控制解释 控制台的光标更新方法, 用于控制数据输出位置 void gotoXY(int x, int y)//新函数&#xff1a;更新光标 {COORD c;c.X x;c.Y y;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), c); }代码解释 这段代码定义了一个名为 gotoXY 的函数&#xff0c;…

【Spring Boot】实现全局异常处理

1.定义基础异常接口类 /*** description: 服务接口类* author: MrVK* date: 2021/4/19 21:39*/ public interface BaseErrorInfoInterface {/*** 错误码* return*/String getResultCode();/*** 错误描述* return*/String getResultMsg(); } 2.定义错误处理枚举类 /*** desc…

小伙伴询问AI该怎么学习?本人的一点总结,以思维导图呈现

如有需要思维导图的在后台请留邮箱&#xff0c;相关知识结构目录 部分导图

nn.Linear() 使用提醒

原本以为它是和nn.Conv2d()一样&#xff0c;就看第二个维度的数值&#xff0c;今天才知道&#xff0c;它是只看最后一个维度的数值&#xff01;&#xff01;&#xff01; 例子1 Descripttion: Result: Author: Philo Date: 2024-02-27 14:33:50 LastEditors: Philo LastEditT…

如何使用“Ubuntu 20.04桌面版,安装MariaDB数据库“?win10系统?

1、更新软件包 sudo apt update 2、 安装MariaDB服务器和客户端 sudo apt install mariadb-server mariadb-client 3、 查看MeriaDB是否运行 service mysql status :q"退回命令行状态 4、 设置MariaDB root用户的密码 sudo mysql_secure_installation 5、 MariaD…

斐波那契数列模型----三步问题

面试题 08.01. 三步问题 - 力扣&#xff08;LeetCode&#xff09; 1、状态表示&#xff1a; 题目要求&#xff1a;上到n阶台阶&#xff0c;有多少种方法。那么n逐渐简化&#xff0c;上1阶台阶有多少种方法&#xff1b;上2阶台阶有多少种方法……直到上n阶台阶有多少种方法。 …

代码随想录第45天|● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

文章目录 ● 70. 爬楼梯 &#xff08;进阶&#xff09;思路&#xff1a;- 排列 先value后weight代码&#xff1a; ● 322. 零钱兑换思路&#xff1a;代码 ● 279.完全平方数思路&#xff1a;代码 ● 70. 爬楼梯 &#xff08;进阶&#xff09; 思路&#xff1a;- 排列 先value后…

如何提升计算机性能

04 穿越功耗墙&#xff0c;我们该从哪些方面提升“性能”&#xff1f; 上一讲&#xff0c;在讲 CPU 的性能时&#xff0c;我们提到了这样一个公式&#xff1a; 程序的 CPU 执行时间 指令数CPIClock Cycle Time 这么来看&#xff0c;如果要提升计算机的性能&#xff0c;我们可以…

基于ZYNQ的PCIE高速数据采集卡的设计(一)

作为信息处理的第一步&#xff0c;数据采集的作用越来越重要。目前&#xff0c;数据采集已经在航 空、民用、军事、医疗等领域得到广泛应用。随着相关技术的不断发展&#xff0c;信号频率越 来高&#xff0c;带宽越来越大&#xff0c;使得数据采集技术逐渐向高速大数据的方向…