FFMPEG开发环境搭建


准备编译环境

需要安装的软件和工具:

Visual Studio 2022
MSYS2 + CMake

Visual Studio 2022安装

image.png
image.png
image.png
image.png
image.png

MSYS2安装

下载

链接:
百度网盘 请输入提取码
提取码:dl9w

修改源地址

源文件目录:E:\Jesse\FFMPEG\MSYS2\etc\pacman.d
mirrorlist.msys 文件最前面修改:

##
## MSYS2 repository mirrorlist
##

## Primary
## msys2.org
## 清华大学
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
## 中科大
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch
## 原文件自带的源(国外)
Server = http://repo.msys2.org/msys/$arch/
Server = https://sourceforge.net/projects/msys2/files/REPOS/MSYS2/$arch/
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/
Server = https://mirror.yandex.ru/mirrors/msys2/msys/$arch/

mirrorlist.mingw32 文件最前面修改:

##
## 32-bit Mingw-w64 repository mirrorlist
##

## Primary
## msys2.org 
##  清华大学
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686
## 中科大
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686
## 下边是源文件自带的源(国外)
Server = http://repo.msys2.org/mingw/i686/
Server = https://sourceforge.net/projects/msys2/files/REPOS/MINGW/i686/
Server = http://www2.futureware.at/~nickoe/msys2-mirror/mingw/i686/
Server = https://mirror.yandex.ru/mirrors/msys2/mingw/i686/

mirrorlist.mingw64

##
## 64-bit Mingw-w64 repository mirrorlist
##

## Primary
## msys2.org
## 清华大学
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
## 中科大
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64
## 下边是原文件默认的源(国外)
Server = http://repo.msys2.org/mingw/x86_64/
Server = https://sourceforge.net/projects/msys2/files/REPOS/MINGW/x86_64/
Server = http://www2.futureware.at/~nickoe/msys2-mirror/mingw/x86_64/
Server = https://mirror.yandex.ru/mirrors/msys2/mingw/x86_64/

常用命令

pacman -S #安装软件

pacman -Sy #获取最新打软件情况,如果已经是最新了,直接会提示已经更新到最新了。

pacman -Syy #强行更新你的应用的软件库(源)

pacman -Su #更新所有软件

pacman -Syu --ignore=firefox #更新软件源并更新你的软件,忽略firefox

pacman -Syyu #强行更新一遍,再更新软件

## 查询一个软件

pacman -Ss package_name # 查询所有软件名里面带有<pkg_name>相关的软件。并且查询名支持正则表达

pacman -Sc # 清理未安装的包文件,下载的包文件位于 /var/cache/pacman/pkg/ 目录

pacman -Scc # 删除所有缓存的包

pacman -R package_name #删除软件

pacman -Rs package_name #删除软件,并删除<pkg>所有的依赖包

pacman -Rns package_name #删除软件,并删除<pkg>所有的依赖,并删掉<pkg>的全局配置文件。 推荐!!

pacman -Rdd package_name #删除被其他软件依赖的软件,且不删除依赖其的软件

pacman -Rc package_name #删除所有依赖其的软件

pacman -Q #显示出所有软件 sudo pacman -Q | wc -l 查询数量

pacman -Qe #查询所有自己安装的软件

pacman -Qeq #查询所有自己安装的软件,只显示包名,不显示版本号等

pacman -Qs package_name #查询本地安装的所有带<pkg_name>的软件

pacman -Qdt #查询所有孤儿软件,不再被需要的。

pacman -Qdtq #查询所有不再被依赖的包名

 # 只会删除当前未安装的软件包缓存,或是已安装包的旧版本包文件缓存,而不会删除目前系统中正安装着的包的包文件缓存
pacman -Sc
yay  -Sc
#该命令不仅会删除未安装或旧版本的包文件缓存,也会将安装着的包的包文件缓存也一并删除。因此,执行此命令后,如果需要重新安装已安装的包,就需要重新下载相应的包文件。
pacman -Scc
yay  -Scc
#系统中可能还存在作为其他软件包依赖而安装的包,而依赖该包的包已被卸载的情况
pacman -R $(sudo pacman -Qdtq) # 查询孤儿软件并删除掉他们
#查看~/.cache缓存情况
du -h -d 1 ~/.cache | sort -rh  
#根据情况删除相应目录
rm -rf ~/.cache/Google/AndroidStudio2022.2


修改msys64

打开 msys2_shell.cmd 文件,将该文件第 17 行代码的注释打开,即去掉 rem 关键字,如下所示:
image.png
找到 x64 Native Tools Command Prompt for VS 2022 命令窗口,该命令窗口中输入下面的命令启动 MSYS2 软件:
image.png
pacman 是 MSYS2的 包安装工具;而 diffutils、make…都是编译 FFmpeg 时需要用的编译工具。
image.png

编译FFMPEG

# ffmpeg源码目录
cd /E/Jesse/FFMPEG/ffmpeg
# 使用 mscv 作为 FFmpeg 的编译工具链;编译出的 FFmpeg 库被放到 /usr/local/ffmpeg 目录下;编译的库是动态库,在 Windows 下就是 DLL 库;
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-shared --disable-ffprobe --toolchain=msvc

image.png

make -j4 && make install

image.png
编译错误(该问题是因为在 Windows下无法识别 CC_IDENT 导致的,只需将包括 CC_IDENT 关键字的那行代码注释掉即可):
image.png
image.png
编译成功,生成文件:
image.png

编译FFMPEG依赖库

编译SDL库

下载SDL源码

git clone https://github.com/libsdl-org/SDL.git
git checkout release-2.26.x

需要注意的是,SDL现在已经发布了3.0版本,而ffmpeg目前只能用SDL2版本,所以在拉取代码后,需要切换到2.26这个版本

下载CMake

下载好 SDL2 源码后,我们需要使用 CMake 为其生成 VS 工程,并将其安装到 Windows 系统上。
链接:
百度网盘 请输入提取码
提取码:15we

编译SDL

输入SDL源码路径和在cmake安装路径创建SDL bin目录,并点击”Configure“
image.png
点击”Generate“
image.png
点击”Open Project“,生成VS工程
image.png

分别在Release和Debug模式下,重新生成一些ALL_BUILD子项目

编译错误提示:无法启动程序all_build拒绝访问
原因是项目配置没有设置好。在vs界面中,选中一个解决方案,比如ALL_BUILD,然后选择生成->批生成,如下图所示:
image.png

编译完成后查看目录

D:\Program Files\CMake\usr\local\sdl\Release
image.png
D:\Program Files\CMake\usr\local\sdl\Debug
image.png
为了满足要求,我们需要在指定输出目录下创建 lib 目录,并将 SDL2.lib 和 SDL2.dll 文件拷贝到 lib 目录下。同时在 lib 目录下创建 pkgconfig 目录,将 sdl2.pc 文件拷贝到该目录中。
最终完整的目录结构如下所示:

/usr/local/sdl2
 |------------ lib
 |              |-- sdl2.lib
 |              |-- sdl2.dll
 |              |-- pkgconfig
 |                     |----- sdl2.pc
 |------------ include

此外,我们还要修改 sdl2.pc 中的内容,将其中的库路径修改为指定的输出路径

image.png

编译x264

下载源码

git clone https://code.videolan.org/videolan/x264.git

MSYS2安装编译工具

通过VS X64 Native… 窗口打开MSYS2:
image.png
安装生成Makefile的工具:

$ pacman -S automake autoconf libtool

image.png

编译

生成Makefile:

CC=cl ./configure --prefix=/usr/local/x264 --enable-shared --disable-asm

image.png
编译:

make -j 4 && make install

image.png
通过上面的命令就可以将 x264 编译出来了。x264 编译好后,其输出的目录结构与 ffmepg 是一样的,在 /usr/local/x264 中包括了 include、lib、bin 等目录。

库文件重命名

:::info

要特别强调的一点是,我们需要将 lib 目录下的 libx264.dll.lib 文件名修改为 libx264.lib,否则 ffmpeg 编译时会报 “无法找到该库” 的错误。
:::
image.png

编译FDK-AAC

fdk-aac 的编译与 SDL 类似,它同样要使用 CMake 生成 VS 工程文件,之后再通过 VS 编译该库。

源码

git clone https://github.com/mstorsjo/fdk-aac.git

生成VS工程文件

打开 CMake-GUI,在 CMake-GUI 中指定 SDL 源码所在路径(E:\Jesse\FFMPEG\fdk-aac)以及编译后的输出路径(D:\Program Files\CMake\usr\local\fdk-aac)
点击”Configure“:
image.png
点击”Generate“
image.png
点击”Open Project“,生成VS工程
image.png
VS2022 来编译 FDK-AAC
image.png

生成文件

Debug
image.png
Release
image.png
但是这里发现一个问题,就是目录下没有 include 目录
为了解决这个问题,我又用 MSYS2+mingw 的方式重新编译了一遍 fdk-aac,这种方式是可以生成 include 头文件的

打开MSYS2 MINGW64
image.png

安装mingw gcc

pacman -S mingw-w64-x86_64-gcc

image.png

编译

在fdk-aac源码目录下执行如下命令:

./autogen.sh
./configure --prefix=/usr/local/fdk-aac --enable-shared
make -j4 && make install

生成include目录
image.png

创建输出目录

为了满足要求,我们需要在指定输出目录下创建 lib 目录,并将 fdk-aac.lib 和 fdk-aac.dll 文件拷贝到 lib 目录下。同时在 lib 目录下创建 pkgconfig 目录,将 fdk_aac.pc 文件拷贝到该目录中。
最终完整的目录结构如下所示:

/usr/local/fdk-aac
 |------------ lib
 |              |-- fdk-aac.lib
 |              |-- fdk-aac.dll
 |              |-- pkgconfig
 |                     |----- fdk-aac.pc
 |------------ include

拷贝fdk-aac.pc,修改路径
image.png

FFMPEG使用第三方库

设置环境变量 PKG_CONFIG_PATH

安装vim

image.png

添加环境变量

在 MSYS2 窗口中使用vim打开 .bashrc,添加下面内容:

export PKG_CONFIG_PATH=/usr/local/sdl2/lib/pkgconfig:/usr/local/x264/lib/pkgconfig:/usr/local/fdk-aac/lib/pkgconfig:$PKG_CONFIG_PATH 

生效环境变量

image.png

重新编译FFMPEG源码

./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-ffprobe --disable-doc --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --toolchain=msvc
make -j4 && make install
Admin@Jesse MSYS /e/Jesse/FFMPEG/ffmpeg
$ ./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-ffprobe --disable-doc --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --toolchain=msvc
install prefix            /usr/local/ffmpeg
source path               .
C compiler                cl.exe
C library                 msvcrt
ARCH                      x86 (generic)
big-endian                no
runtime cpu detection     yes
standalone assembly       yes
x86 assembler             yasm
MMX enabled               yes
MMXEXT enabled            yes
3DNow! enabled            yes
3DNow! extended enabled   yes
SSE enabled               yes
SSSE3 enabled             yes
AESNI enabled             yes
AVX enabled               yes
AVX2 enabled              yes
AVX-512 enabled           yes
AVX-512ICL enabled        yes
XOP enabled               yes
FMA3 enabled              yes
FMA4 enabled              yes
i686 features enabled     yes
CMOV is fast              yes
EBX available             no
EBP available             no
debug symbols             yes
strip symbols             no
optimize for size         no
optimizations             yes
static                    no
shared                    yes
postprocessing support    yes
network support           yes
threading support         w32threads
safe bitstream reader     yes
texi2html enabled         no
perl enabled              yes
pod2man enabled           yes
makeinfo enabled          no
makeinfo supports HTML    no
xmllint enabled           yes

External libraries:
libfdk_aac              libx264                 mediafoundation         schannel

External libraries providing hardware acceleration:
d3d11va                 d3d12va                 dxva2

Libraries:
avcodec                 avfilter                avutil                  swresample
avdevice                avformat                postproc                swscale

Programs:
ffmpeg

Enabled decoders:
aac                     cri                     mp1float                s302m
aac_fixed               cscd                    mp2                     sami
aac_latm                cyuv                    mp2float                sanm
aasc                    dca                     mp3                     sbc
ac3                     dds                     mp3adu                  scpr
ac3_fixed               derf_dpcm               mp3adufloat             sdx2_dpcm
acelp_kelvin            dfa                     mp3float                sga
adpcm_4xm               dfpwm                   mp3on4                  sgi
adpcm_adx               dirac                   mp3on4float             sgirle
adpcm_afc               dnxhd                   mpc7                    sheervideo
adpcm_agm               dolby_e                 mpc8                    shorten
adpcm_aica              dpx                     mpeg1video              simbiosis_imx
adpcm_argo              dsd_lsbf                mpeg2video              sipr
adpcm_ct                dsd_lsbf_planar         mpeg4                   siren
adpcm_dtk               dsd_msbf                mpegvideo               smackaud
adpcm_ea                dsd_msbf_planar         mpl2                    smacker
adpcm_ea_maxis_xa       dsicinaudio             msa1                    smc
adpcm_ea_r1             dsicinvideo             msmpeg4v1               smvjpeg
adpcm_ea_r2             dss_sp                  msmpeg4v2               snow
adpcm_ea_r3             dst                     msmpeg4v3               sol_dpcm
adpcm_ea_xas            dvaudio                 msnsiren                sonic
adpcm_g722              dvbsub                  msp2                    sp5x
adpcm_g726              dvdsub                  msrle                   speedhq
adpcm_g726le            dvvideo                 mss1                    speex
adpcm_ima_acorn         dxtory                  mss2                    srt
adpcm_ima_alp           dxv                     msvideo1                ssa
adpcm_ima_amv           eac3                    mszh                    stl
adpcm_ima_apc           eacmv                   mts2                    subrip
adpcm_ima_apm           eamad                   mv30                    subviewer
adpcm_ima_cunning       eatgq                   mvc1                    subviewer1
adpcm_ima_dat4          eatgv                   mvc2                    sunrast
adpcm_ima_dk3           eatqi                   mvdv                    svq1
adpcm_ima_dk4           eightbps                mxpeg                   svq3
adpcm_ima_ea_eacs       eightsvx_exp            nellymoser              tak
adpcm_ima_ea_sead       eightsvx_fib            notchlc                 targa
adpcm_ima_iss           escape124               nuv                     targa_y216
adpcm_ima_moflex        escape130               on2avc                  text
adpcm_ima_mtf           evrc                    opus                    theora
adpcm_ima_oki           fastaudio               osq                     thp
adpcm_ima_qt            ffv1                    paf_audio               tiertexseqvideo
adpcm_ima_rad           ffvhuff                 paf_video               tiff
adpcm_ima_smjpeg        ffwavesynth             pam                     tmv
adpcm_ima_ssi           fic                     pbm                     truehd
adpcm_ima_wav           fits                    pcm_alaw                truemotion1
adpcm_ima_ws            flac                    pcm_bluray              truemotion2
adpcm_ms                flic                    pcm_dvd                 truemotion2rt
adpcm_mtaf              flv                     pcm_f16le               truespeech
adpcm_psx               fmvc                    pcm_f24le               tscc2
adpcm_sbpro_2           fourxm                  pcm_f32be               tta
adpcm_sbpro_3           fraps                   pcm_f32le               twinvq
adpcm_sbpro_4           frwu                    pcm_f64be               txd
adpcm_swf               ftr                     pcm_f64le               ulti
adpcm_thp               g723_1                  pcm_lxf                 utvideo
adpcm_thp_le            g729                    pcm_mulaw               v210
adpcm_vima              gdv                     pcm_s16be               v210x
adpcm_xa                gem                     pcm_s16be_planar        v308
adpcm_xmd               gif                     pcm_s16le               v408
adpcm_yamaha            gremlin_dpcm            pcm_s16le_planar        v410
adpcm_zork              gsm                     pcm_s24be               vb
agm                     gsm_ms                  pcm_s24daud             vble
aic                     h261                    pcm_s24le               vbn
alac                    h263                    pcm_s24le_planar        vc1
alias_pix               h263i                   pcm_s32be               vc1image
als                     h263p                   pcm_s32le               vcr1
amrnb                   h264                    pcm_s32le_planar        vmdaudio
amrwb                   hap                     pcm_s64be               vmdvideo
amv                     hca                     pcm_s64le               vmix
anm                     hcom                    pcm_s8                  vmnc
ansi                    hdr                     pcm_s8_planar           vnull
anull                   hevc                    pcm_sga                 vorbis
apac                    hnm4_video              pcm_u16be               vp3
ape                     hq_hqa                  pcm_u16le               vp4
aptx                    hqx                     pcm_u24be               vp5
aptx_hd                 huffyuv                 pcm_u24le               vp6
arbc                    hymt                    pcm_u32be               vp6a
argo                    iac                     pcm_u32le               vp6f
ass                     idcin                   pcm_u8                  vp7
asv1                    idf                     pcm_vidc                vp8
asv2                    iff_ilbm                pcx                     vp9
atrac1                  ilbc                    pfm                     vplayer
atrac3                  imc                     pgm                     vqa
atrac3al                imm4                    pgmyuv                  vqc
atrac3p                 imm5                    pgssub                  vvc
atrac3pal               indeo2                  pgx                     wady_dpcm
atrac9                  indeo3                  phm                     wavarc
aura                    indeo4                  photocd                 wavpack
aura2                   indeo5                  pictor                  wbmp
av1                     interplay_acm           pixlet                  webp
avrn                    interplay_dpcm          pjs                     webvtt
avrp                    interplay_video         ppm                     wmalossless
avs                     ipu                     prores                  wmapro
avui                    jacosub                 prosumer                wmav1
bethsoftvid             jpeg2000                psd                     wmav2
bfi                     jpegls                  ptx                     wmavoice
bink                    jv                      qcelp                   wmv1
binkaudio_dct           kgv1                    qdm2                    wmv2
binkaudio_rdft          kmvc                    qdmc                    wmv3
bintext                 lagarith                qdraw                   wmv3image
bitpacked               lead                    qoa                     wnv1
bmp                     libfdk_aac              qoi                     wrapped_avframe
bmv_audio               loco                    qpeg                    ws_snd1
bmv_video               m101                    qtrle                   xan_dpcm
bonk                    mace3                   r10k                    xan_wc3
brender_pix             mace6                   r210                    xan_wc4
c93                     magicyuv                ra_144                  xbin
cavs                    mdec                    ra_288                  xbm
cbd2_dpcm               media100                ralf                    xface
ccaption                metasound               rawvideo                xl
cdgraphics              microdvd                realtext                xma1
cdtoons                 mimic                   rka                     xma2
cdxl                    misc4                   rl2                     xpm
cfhd                    mjpeg                   roq                     xsub
cinepak                 mjpegb                  roq_dpcm                xwd
clearvideo              mlp                     rpza                    y41p
cljr                    mmvideo                 rtv1                    ylc
cllc                    mobiclip                rv10                    yop
comfortnoise            motionpixels            rv20                    yuv4
cook                    movtext                 rv30                    zero12v
cpia                    mp1                     rv40

Enabled encoders:
a64multi                dvvideo                 pcm_f32le               rv10
a64multi5               dxv                     pcm_f64be               rv20
aac                     eac3                    pcm_f64le               s302m
aac_mf                  ffv1                    pcm_mulaw               sbc
ac3                     ffvhuff                 pcm_s16be               sgi
ac3_fixed               fits                    pcm_s16be_planar        smc
ac3_mf                  flac                    pcm_s16le               snow
adpcm_adx               flv                     pcm_s16le_planar        sonic
adpcm_argo              g723_1                  pcm_s24be               sonic_ls
adpcm_g722              gif                     pcm_s24daud             speedhq
adpcm_g726              h261                    pcm_s24le               srt
adpcm_g726le            h263                    pcm_s24le_planar        ssa
adpcm_ima_alp           h263p                   pcm_s32be               subrip
adpcm_ima_amv           h264_mf                 pcm_s32le               sunrast
adpcm_ima_apm           hdr                     pcm_s32le_planar        svq1
adpcm_ima_qt            hevc_mf                 pcm_s64be               targa
adpcm_ima_ssi           huffyuv                 pcm_s64le               text
adpcm_ima_wav           jpeg2000                pcm_s8                  tiff
adpcm_ima_ws            jpegls                  pcm_s8_planar           truehd
adpcm_ms                libfdk_aac              pcm_u16be               tta
adpcm_swf               libx264                 pcm_u16le               ttml
adpcm_yamaha            libx264rgb              pcm_u24be               utvideo
alac                    ljpeg                   pcm_u24le               v210
alias_pix               magicyuv                pcm_u32be               v308
amv                     mjpeg                   pcm_u32le               v408
anull                   mlp                     pcm_u8                  v410
aptx                    movtext                 pcm_vidc                vbn
aptx_hd                 mp2                     pcx                     vc2
ass                     mp2fixed                pfm                     vnull
asv1                    mp3_mf                  pgm                     vorbis
asv2                    mpeg1video              pgmyuv                  wavpack
avrp                    mpeg2video              phm                     wbmp
avui                    mpeg4                   ppm                     webvtt
bitpacked               msmpeg4v2               prores                  wmav1
bmp                     msmpeg4v3               prores_aw               wmav2
cfhd                    msrle                   prores_ks               wmv1
cinepak                 msvideo1                qoi                     wmv2
cljr                    nellymoser              qtrle                   wrapped_avframe
comfortnoise            opus                    r10k                    xbm
dca                     pam                     r210                    xface
dfpwm                   pbm                     ra_144                  xsub
dnxhd                   pcm_alaw                rawvideo                xwd
dpx                     pcm_bluray              roq                     y41p
dvbsub                  pcm_dvd                 roq_dpcm                yuv4
dvdsub                  pcm_f32be               rpza

Enabled hwaccels:
av1_d3d11va             h264_dxva2              mpeg2_d3d12va           vp9_d3d11va2
av1_d3d11va2            hevc_d3d11va            mpeg2_dxva2             vp9_d3d12va
av1_d3d12va             hevc_d3d11va2           vc1_d3d11va             vp9_dxva2
av1_dxva2               hevc_d3d12va            vc1_d3d11va2            wmv3_d3d11va
h264_d3d11va            hevc_dxva2              vc1_d3d12va             wmv3_d3d11va2
h264_d3d11va2           mpeg2_d3d11va           vc1_dxva2               wmv3_d3d12va
h264_d3d12va            mpeg2_d3d11va2          vp9_d3d11va             wmv3_dxva2

Enabled parsers:
aac                     dolby_e                 h264                    qoi
aac_latm                dpx                     hdr                     rv34
ac3                     dvaudio                 hevc                    sbc
adx                     dvbsub                  ipu                     sipr
amr                     dvd_nav                 jpeg2000                tak
av1                     dvdsub                  jpegxl                  vc1
avs2                    evc                     misc4                   vorbis
avs3                    flac                    mjpeg                   vp3
bmp                     ftr                     mlp                     vp8
cavsvideo               g723_1                  mpeg4video              vp9
cook                    g729                    mpegaudio               vvc
cri                     gif                     mpegvideo               webp
dca                     gsm                     opus                    xbm
dirac                   h261                    png                     xma
dnxhd                   h263                    pnm                     xwd

Enabled demuxers:
aa                      filmstrip               live_flv                rm
aac                     fits                    lmlm4                   roq
aax                     flac                    loas                    rpl
ac3                     flic                    lrc                     rsd
ac4                     flv                     luodat                  rso
ace                     fourxm                  lvf                     rtp
acm                     frm                     lxf                     rtsp
act                     fsb                     m4v                     s337m
adf                     fwse                    matroska                sami
adp                     g722                    mca                     sap
ads                     g723_1                  mcc                     sbc
adx                     g726                    mgsts                   sbg
aea                     g726le                  microdvd                scc
afc                     g729                    mjpeg                   scd
aiff                    gdv                     mjpeg_2000              sdns
aix                     genh                    mlp                     sdp
alp                     gif                     mlv                     sdr2
amr                     gsm                     mm                      sds
amrnb                   gxf                     mmf                     sdx
amrwb                   h261                    mods                    segafilm
anm                     h263                    moflex                  ser
apac                    h264                    mov                     sga
apc                     hca                     mp3                     shorten
ape                     hcom                    mpc                     siff
apm                     hevc                    mpc8                    simbiosis_imx
apng                    hls                     mpegps                  sln
aptx                    hnm                     mpegts                  smacker
aptx_hd                 iamf                    mpegtsraw               smjpeg
aqtitle                 ico                     mpegvideo               smush
argo_asf                idcin                   mpjpeg                  sol
argo_brp                idf                     mpl2                    sox
argo_cvg                iff                     mpsub                   spdif
asf                     ifv                     msf                     srt
asf_o                   ilbc                    msnwc_tcp               stl
ass                     image2                  msp                     str
ast                     image2_alias_pix        mtaf                    subviewer
au                      image2_brender_pix      mtv                     subviewer1
av1                     image2pipe              musx                    sup
avi                     image_bmp_pipe          mv                      svag
avr                     image_cri_pipe          mvi                     svs
avs                     image_dds_pipe          mxf                     swf
avs2                    image_dpx_pipe          mxg                     tak
avs3                    image_exr_pipe          nc                      tedcaptions
bethsoftvid             image_gem_pipe          nistsphere              thp
bfi                     image_gif_pipe          nsp                     threedostr
bfstm                   image_hdr_pipe          nsv                     tiertexseq
bink                    image_j2k_pipe          nut                     tmv
binka                   image_jpeg_pipe         nuv                     truehd
bintext                 image_jpegls_pipe       obu                     tta
bit                     image_jpegxl_pipe       ogg                     tty
bitpacked               image_pam_pipe          oma                     txd
bmv                     image_pbm_pipe          osq                     ty
boa                     image_pcx_pipe          paf                     usm
bonk                    image_pfm_pipe          pcm_alaw                v210
brstm                   image_pgm_pipe          pcm_f32be               v210x
c93                     image_pgmyuv_pipe       pcm_f32le               vag
caf                     image_pgx_pipe          pcm_f64be               vc1
cavsvideo               image_phm_pipe          pcm_f64le               vc1t
cdg                     image_photocd_pipe      pcm_mulaw               vividas
cdxl                    image_pictor_pipe       pcm_s16be               vivo
cine                    image_png_pipe          pcm_s16le               vmd
codec2                  image_ppm_pipe          pcm_s24be               vobsub
codec2raw               image_psd_pipe          pcm_s24le               voc
concat                  image_qdraw_pipe        pcm_s32be               vpk
data                    image_qoi_pipe          pcm_s32le               vplayer
daud                    image_sgi_pipe          pcm_s8                  vqf
dcstr                   image_sunrast_pipe      pcm_u16be               vvc
derf                    image_svg_pipe          pcm_u16le               w64
dfa                     image_tiff_pipe         pcm_u24be               wady
dfpwm                   image_vbn_pipe          pcm_u24le               wav
dhav                    image_webp_pipe         pcm_u32be               wavarc
dirac                   image_xbm_pipe          pcm_u32le               wc3
dnxhd                   image_xpm_pipe          pcm_u8                  webm_dash_manifest
dsf                     image_xwd_pipe          pcm_vidc                webvtt
dsicin                  ingenient               pdv                     wsaud
dss                     ipmovie                 pjs                     wsd
dts                     ipu                     pmp                     wsvqa
dtshd                   ircam                   pp_bnk                  wtv
dv                      iss                     pva                     wv
dvbsub                  iv8                     pvf                     wve
dvbtxt                  ivf                     qcp                     xa
dxa                     ivr                     qoa                     xbin
ea                      jacosub                 r3d                     xmd
ea_cdata                jpegxl_anim             rawvideo                xmv
eac3                    jv                      realtext                xvag
epaf                    kux                     redspark                xwma
evc                     kvag                    rka                     yop
ffmetadata              laf                     rl2                     yuv4mpegpipe

Enabled muxers:
a64                     filmstrip               mp3                     rcwt
ac3                     fits                    mp4                     rm
ac4                     flac                    mpeg1system             roq
adts                    flv                     mpeg1vcd                rso
adx                     framecrc                mpeg1video              rtp
aea                     framehash               mpeg2dvd                rtp_mpegts
aiff                    framemd5                mpeg2svcd               rtsp
alp                     g722                    mpeg2video              sap
amr                     g723_1                  mpeg2vob                sbc
amv                     g726                    mpegts                  scc
apm                     g726le                  mpjpeg                  segafilm
apng                    gif                     mxf                     segment
aptx                    gsm                     mxf_d10                 smjpeg
aptx_hd                 gxf                     mxf_opatom              smoothstreaming
argo_asf                h261                    null                    sox
argo_cvg                h263                    nut                     spdif
asf                     h264                    obu                     spx
asf_stream              hash                    oga                     srt
ass                     hds                     ogg                     stream_segment
ast                     hevc                    ogv                     streamhash
au                      hls                     oma                     sup
avi                     iamf                    opus                    swf
avif                    ico                     pcm_alaw                tee
avm2                    ilbc                    pcm_f32be               tg2
avs2                    image2                  pcm_f32le               tgp
avs3                    image2pipe              pcm_f64be               truehd
bit                     ipod                    pcm_f64le               tta
caf                     ircam                   pcm_mulaw               ttml
cavsvideo               ismv                    pcm_s16be               uncodedframecrc
codec2                  ivf                     pcm_s16le               vc1
codec2raw               jacosub                 pcm_s24be               vc1t
crc                     kvag                    pcm_s24le               voc
dash                    latm                    pcm_s32be               vvc
data                    lrc                     pcm_s32le               w64
daud                    m4v                     pcm_s8                  wav
dfpwm                   matroska                pcm_u16be               webm
dirac                   matroska_audio          pcm_u16le               webm_chunk
dnxhd                   md5                     pcm_u24be               webm_dash_manifest
dts                     microdvd                pcm_u24le               webp
dv                      mjpeg                   pcm_u32be               webvtt
eac3                    mkvtimestamp_v2         pcm_u32le               wsaud
evc                     mlp                     pcm_u8                  wtv
f4v                     mmf                     pcm_vidc                wv
ffmetadata              mov                     psp                     yuv4mpegpipe
fifo                    mp2                     rawvideo

Enabled protocols:
async                   ftp                     ipns_gateway            rtmpts
cache                   gopher                  md5                     rtp
concat                  gophers                 mmsh                    srtp
concatf                 hls                     mmst                    subfile
crypto                  http                    pipe                    tcp
data                    httpproxy               prompeg                 tee
fd                      https                   rtmp                    tls
ffrtmphttp              icecast                 rtmps                   udp
file                    ipfs_gateway            rtmpt                   udplite

Enabled filters:
a3dscope                blockdetect             guided                  sab
aap                     blurdetect              haas                    scale
abench                  bm3d                    haldclut                scale2ref
abitscope               boxblur                 haldclutsrc             scdet
acompressor             bwdif                   hdcd                    scharr
acontrast               cas                     headphone               scroll
acopy                   ccrepack                hflip                   segment
acrossfade              cellauto                highpass                select
acrossover              channelmap              highshelf               selectivecolor
acrusher                channelsplit            hilbert                 sendcmd
acue                    chorus                  histeq                  separatefields
addroi                  chromahold              histogram               setdar
adeclick                chromakey               hqdn3d                  setfield
adeclip                 chromanr                hqx                     setparams
adecorrelate            chromashift             hstack                  setpts
adelay                  ciescope                hsvhold                 setrange
adenorm                 codecview               hsvkey                  setsar
aderivative             color                   hue                     settb
adrawgraph              colorbalance            huesaturation           shear
adrc                    colorchannelmixer       hwdownload              showcqt
adynamicequalizer       colorchart              hwmap                   showcwt
adynamicsmooth          colorcontrast           hwupload                showfreqs
aecho                   colorcorrect            hysteresis              showinfo
aemphasis               colorhold               identity                showpalette
aeval                   colorize                idet                    showspatial
aevalsrc                colorkey                il                      showspectrum
aexciter                colorlevels             inflate                 showspectrumpic
afade                   colormap                interlace               showvolume
afdelaysrc              colormatrix             interleave              showwaves
afftdn                  colorspace              join                    showwavespic
afftfilt                colorspectrum           kerndeint               shuffleframes
afir                    colortemperature        kirsch                  shufflepixels
afireqsrc               compand                 lagfun                  shuffleplanes
afirsrc                 compensationdelay       latency                 sidechaincompress
aformat                 concat                  lenscorrection          sidechaingate
afreqshift              convolution             life                    sidedata
afwtdn                  convolve                limitdiff               sierpinski
agate                   copy                    limiter                 signalstats
agraphmonitor           corr                    loop                    signature
ahistogram              cover_rect              loudnorm                silencedetect
aiir                    crop                    lowpass                 silenceremove
aintegral               cropdetect              lowshelf                sinc
ainterleave             crossfeed               lumakey                 sine
alatency                crystalizer             lut                     siti
alimiter                cue                     lut1d                   smartblur
allpass                 curves                  lut2                    smptebars
allrgb                  datascope               lut3d                   smptehdbars
allyuv                  dblur                   lutrgb                  sobel
aloop                   dcshift                 lutyuv                  spectrumsynth
alphaextract            dctdnoiz                mandelbrot              speechnorm
alphamerge              ddagrab                 maskedclamp             split
amerge                  deband                  maskedmax               spp
ametadata               deblock                 maskedmerge             sr
amix                    decimate                maskedmin               ssim
amovie                  deconvolve              maskedthreshold         ssim360
amplify                 dedot                   maskfun                 stereo3d
amultiply               deesser                 mcdeint                 stereotools
anequalizer             deflate                 mcompand                stereowiden
anlmdn                  deflicker               median                  streamselect
anlmf                   dejudder                mergeplanes             super2xsai
anlms                   delogo                  mestimate               superequalizer
anoisesrc               derain                  metadata                surround
anull                   deshake                 midequalizer            swaprect
anullsink               despill                 minterpolate            swapuv
anullsrc                detelecine              mix                     tblend
apad                    dialoguenhance          monochrome              telecine
aperms                  dilation                morpho                  testsrc
aphasemeter             displace                movie                   testsrc2
aphaser                 dnn_classify            mpdecimate              thistogram
aphaseshift             dnn_detect              mptestsrc               threshold
apsnr                   dnn_processing          msad                    thumbnail
apsyclip                doubleweave             multiply                tile
apulsator               drawbox                 negate                  tiltandshift
arealtime               drawgraph               nlmeans                 tiltshelf
aresample               drawgrid                nnedi                   tinterlace
areverse                drmeter                 noformat                tlut2
arls                    dynaudnorm              noise                   tmedian
arnndn                  earwax                  normalize               tmidequalizer
asdr                    ebur128                 null                    tmix
asegment                edgedetect              nullsink                tonemap
aselect                 elbg                    nullsrc                 tpad
asendcmd                entropy                 oscilloscope            transpose
asetnsamples            epx                     overlay                 treble
asetpts                 eq                      owdenoise               tremolo
asetrate                equalizer               pad                     trim
asettb                  erosion                 pal100bars              unpremultiply
ashowinfo               estdif                  pal75bars               unsharp
asidedata               exposure                palettegen              untile
asisdr                  extractplanes           paletteuse              uspp
asoftclip               extrastereo             pan                     v360
aspectralstats          fade                    perms                   vaguedenoiser
asplit                  feedback                perspective             varblur
astats                  fftdnoiz                phase                   vectorscope
astreamselect           fftfilt                 photosensitivity        vflip
asubboost               field                   pixdesctest             vfrdet
asubcut                 fieldhint               pixelize                vibrance
asupercut               fieldmatch              pixscope                vibrato
asuperpass              fieldorder              pp                      vif
asuperstop              fillborders             pp7                     vignette
atadenoise              find_rect               premultiply             virtualbass
atempo                  firequalizer            prewitt                 vmafmotion
atilt                   flanger                 pseudocolor             volume
atrim                   floodfill               psnr                    volumedetect
avectorscope            format                  pullup                  vstack
avgblur                 fps                     qp                      w3fdif
avsynctest              framepack               random                  waveform
axcorrelate             framerate               readeia608              weave
backgroundkey           framestep               readvitc                xbr
bandpass                freezedetect            realtime                xcorrelate
bandreject              freezeframes            remap                   xfade
bass                    fspp                    removegrain             xmedian
bbox                    fsync                   removelogo              xstack
bench                   gblur                   repeatfields            yadif
bilateral               geq                     replaygain              yaepblur
biquad                  gradfun                 reverse                 yuvtestsrc
bitplanenoise           gradients               rgbashift               zoneplate
blackdetect             graphmonitor            rgbtestsrc              zoompan
blackframe              grayworld               roberts
blend                   greyedge                rotate

Enabled bsfs:
aac_adtstoasc           extract_extradata       mjpega_dump_header      setts
av1_frame_merge         filter_units            mov2textsub             showinfo
av1_frame_split         h264_metadata           mpeg2_metadata          text2movsub
av1_metadata            h264_mp4toannexb        mpeg4_unpack_bframes    trace_headers
chomp                   h264_redundant_pps      noise                   truehd_core
dca_core                hapqa_extract           null                    vp9_metadata
dts2pts                 hevc_metadata           opus_metadata           vp9_raw_reorder
dump_extradata          hevc_mp4toannexb        pcm_rechunk             vp9_superframe
dv_error_marker         imx_dump_header         pgs_frame_merge         vp9_superframe_split
eac3_core               media100_to_mjpegb      prores_metadata         vvc_metadata
evc_frame_merge         mjpeg2jpeg              remove_extradata        vvc_mp4toannexb

Enabled indevs:
dshow                   gdigrab                 lavfi                   vfwcap

Enabled outdevs:

License: nonfree and unredistributable
libavutil/avconfig.h is unchanged
libavfilter/filter_list.c is unchanged
libavcodec/parser_list.c is unchanged
libavcodec/bsf_list.c is unchanged
libavformat/demuxer_list.c is unchanged
libavformat/muxer_list.c is unchanged
libavdevice/indev_list.c is unchanged
libavdevice/outdev_list.c is unchanged
libavformat/protocol_list.c is unchanged

拷贝第三方库

image.png

验证FFMPEG

image.png

VS项目中引用FFMPEG库

创建新项目

image.png
image.png

引入FFMPEG头文件

在 项目右键 -> 属性 -> C/C++ -> 常规 -> 附加包含目录 中添加 FFmpeg 头文件所在路径。
image.png

指定库文件位置

在 项目右键 -> 属性 -> 链接器 -> 常规 -> 附加库目录 中添加 FFmpeg 库所在路径。
image.png

指定使用哪个库

在 项目右键 -> 属性 -> 链接器 -> 输入 -> 附加依赖项 中指定你所用到的 FFmpeg 库image.png

运行测试程序

#include <iostream>
extern "C" {
    #include "libavcodec/avcodec.h"
    #include "libavformat/avformat.h"
}

int main()
{
    av_log_set_level(AV_LOG_DEBUG);
    av_log(NULL, AV_LOG_INFO, "Hello World!\n");
    //std::cout << "Hello World!\n";
}

提示缺少avutil-59.dll库:
image.png
拷贝E:\Jesse\FFMPEG\MSYS2\usr\local\ffmpeg\bin\avutil-59.dll至C:\Windows\System32
image.png
测试验证FFMPEG在VS中成功:
image.png

FFMPEG+QT开发环境搭建

QT环境的安装这里不再赘述,网上资源很多可参考。

新建QT工程

image.png

拷贝所需的lib文件和头文件

将之前编译的 lib 文件以及整个 include 目录下的文件拷贝到 QT 项目目录下
image.png
如下图所示:
image.png

拷贝所需的dll动态库文件

然后将之前编译的 bin 文件加的所有 .dll 动态库复制到 qt 编译后的 debug文件夹下。
image.png
如下图所示:
image.png
补充:
后续在实际项目中运行QT程序发现提示错误crashed退出,直接运行可执行程序发现x264链接库错误,前期手动更改x264库名导致程序不能识别库文件:
image.png

修改QT项目的主配置文件(.pro文件)

指定头文件及 lib 库文件路径:

INCLUDEPATH += $$PWD/include

LIBS += $$PWD/lib/avcodec.lib  \
        $$PWD/lib/avdevice.lib  \
        $$PWD/lib/avfilter.lib  \
        $$PWD/lib/avformat.lib  \
        $$PWD/lib/avutil.lib  \
        $$PWD/lib/swresample.lib  \
        $$PWD/lib/swscale.lib

image.png

验证测试

image.png
image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值