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.sh
    mingw32-make
    mingw32-make install

64bit:

    cd D:\msys64\home\计算机名xxx\ffmpeg-6.1.1
    ./configure.sh
    mingw32-make
    mingw32-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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/425801.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知识图谱1——neo4j

2024年要搞知识图谱&#xff0c;因此没有办法&#xff0c;只能将我之前固守的JDK1.8&#xff0c;升级到JDK21&#xff0c;因为JDK21也是LTS版本&#xff0c;neo4j高版本就不支持JDK8&#xff0c;因此没有办法&#xff0c;只有升级了。写这篇只是一个搭建笔记&#xff0c;我的初…

随机生成验证码

随机生成验证码 需求&#xff1a;随机生成一个任意位的验证码包含数字、大写字母和小写字母 1.代码实现 package com.ham;import java.util.Random;public class case2 {public static void main(String[] args) {System.out.println(code(4));}public static String code(i…

深入了解Java虚拟机(JVM)

Java虚拟机&#xff08;JVM&#xff09;是Java程序运行的核心组件&#xff0c;它负责解释执行Java字节码&#xff0c;并在各种平台上执行。JVM的设计使得Java具有跨平台性&#xff0c;开发人员只需编写一次代码&#xff0c;就可以在任何支持Java的系统上运行。我们刚开始学习Ja…

考研数学——高数:微分方程

一、一阶线性微分方程 两种形式&#xff1a; 非齐次&#xff1a; 齐次&#xff1a; 推导过程 推导公式的过程一般由特殊到一般&#xff1a;所以先求解齐次方程的解 &#xff08;然后对等式两边同时积分&#xff09; 再来求非齐次方程的解&#xff0c;由…

小程序图形:echarts-weixin 入门使用

去官网下载整个项目&#xff1a; https://github.com/ecomfe/echarts-for-weixin 拷贝ec-canvs文件夹到小程序里面 index.js里面的写法 import * as echarts from "../../components/ec-canvas/echarts" const app getApp(); function initChart(canvas, width, h…

[数据结构]栈

1.栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出的原则。 压栈&#xff1a;栈的插入操作叫做进栈/压栈/入栈&#…

XUbuntu22.04之显示实时网速(二百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

差分题练习(区间更新)

一、差分的特点和原理 对于一个数组a[]&#xff0c;差分数组diff[]的定义是: 对差分数组做前缀和可以还原为原数组: 利用差分数组可以实现快速的区间修改&#xff0c;下面是将区间[l, r]都加上x的方法: diff[l] x; diff[r 1] - x;在修改完成后&#xff0c;需要做前缀和恢复…

C++_红黑树

目录 1、红黑树的规则 2、红黑树节点的定义 3、红黑树插入节点的调整操作 3.1 情况一 3.2 情况二 3.3 情况三 4、红黑树的实现 结语 前言&#xff1a; 在C中&#xff0c;红黑树是二叉搜索树的另一种优化版本&#xff0c;他与AVL树的区别在于保持树的平衡方式不同&…

Unity游戏输入系统(新版+旧版)

使用新版还是旧版 旧版 using System.Collections; using System.Collections.Generic; using UnityEngine;public class c5 : MonoBehaviour {void Start(){}void Update(){// 注意要在游戏中 点鼠标键盘进行测试// 鼠标// 0左键 1右键 2滚轮if (Input.GetMouseButtonDown(0)…

Java二叉树(1)

&#x1f435;本篇文章将对二叉树的相关概念、性质和遍历等知识进行讲解 一、什么是树 在讲二叉树之前&#xff0c;先了解一下什么是树&#xff1a;树是一种非线性结构&#xff0c;其由许多节点和子节点组成&#xff0c;整体形状如一颗倒挂的树&#xff0c;比如下图&#xff1…

基于springboot+vue的党员教育和管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Springboot+vue的制造装备物联及生产管理ERP系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的制造装备物联及生产管理ERP系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的制造装备物联及生产管理ERP系统&#xff0c;采用M&#xff…

C++ opencv 学习

文章目录 1、创建窗口2、读取图片3、视频采集4、Mat的使用5、异或操作6、通道分离&#xff0c;通道合并7、色彩空间转换8、最大值、最小值9、绘制图像10、多边形绘制11、随机数12、鼠标实时绘制矩形13、归一化14、resize操作15、旋转翻转16、视频操作17、模糊操作18、高斯模糊操…

力扣110 平衡二叉树 Java版本

文章目录 题目描述代码 题目描述 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,…

LaTeX中的多行数学公式

目录 参考链接 一、gather以及gather*环境编排公式 1、 gather环境 2、 gather*环境 3、 阻止编号 二、align以及align*环境设定公式对齐方式 1、align环境 2、align*环境 三、split环境实现一个公式多行排版 四、cases环境实现分段函数 参考链接 LaTeX中的多行数学…

OpenCV 4基础篇| OpenCV图像的拼接

目录 1. Numpy (np.hstack&#xff0c;np.vstack)1.1 注意事项1.2 代码示例 2. matplotlib2.1 注意事项2.2 代码示例 3. 扩展示例&#xff1a;多张小图合并成一张大图4. 总结 1. Numpy (np.hstack&#xff0c;np.vstack) 语法结构&#xff1a; retval np.hstack(tup) # 水平…

Endnote x9 最快方法批量导入.enw格式文件

按照网上看到的一个方法直接选中所有enw批量拖拽到 All references 附件不行啊&#xff0c; 以为只能写bat脚本方式了 经过一番尝试&#xff0c;惊人的发现拖到下面这个符号的地方就行了&#xff01;&#xff01;&#xff01; 如果不成功的话&#xff0c;可能&#xff1a; 我…

C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)

和黛玉学编程呀&#xff0c;大家一起努力呀............. 结构体类型的声明 回顾一下 struct tag { member-list; }variable-list; 创建和初始化 我们知道&#xff0c;在C语言中&#xff0c;对于一些数据是必须初始化的&#xff0c;但是结构体怎么创建并且初始化呢&#xff1…

码垛工作站:食品生产企业的转型助推器

在当今高度自动化的工业生产中&#xff0c;码垛工作站的应用正逐渐成为一种趋势。某食品生产企业在面临市场竞争加剧、人工成本上升等多重压力下&#xff0c;决定引入码垛工作站&#xff0c;以期实现生产流程的升级与变革。 一、码垛工作站引入背景 该企业主要从事休闲食品的…