准备编译环境
需要安装的软件和工具:
Visual Studio 2022
MSYS2 + CMake
Visual Studio 2022安装
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 关键字,如下所示:
找到 x64 Native Tools Command Prompt for VS 2022 命令窗口,该命令窗口中输入下面的命令启动 MSYS2 软件:
pacman 是 MSYS2的 包安装工具;而 diffutils、make…都是编译 FFmpeg 时需要用的编译工具。
编译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
make -j4 && make install
编译错误(该问题是因为在 Windows下无法识别 CC_IDENT 导致的,只需将包括 CC_IDENT 关键字的那行代码注释掉即可):
编译成功,生成文件:
编译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“
点击”Generate“
点击”Open Project“,生成VS工程
分别在Release和Debug模式下,重新生成一些ALL_BUILD子项目
编译错误提示:无法启动程序all_build拒绝访问
原因是项目配置没有设置好。在vs界面中,选中一个解决方案,比如ALL_BUILD,然后选择生成->批生成,如下图所示:
编译完成后查看目录
D:\Program Files\CMake\usr\local\sdl\Release
D:\Program Files\CMake\usr\local\sdl\Debug
为了满足要求,我们需要在指定输出目录下创建 lib 目录,并将 SDL2.lib 和 SDL2.dll 文件拷贝到 lib 目录下。同时在 lib 目录下创建 pkgconfig 目录,将 sdl2.pc 文件拷贝到该目录中。
最终完整的目录结构如下所示:
/usr/local/sdl2
|------------ lib
| |-- sdl2.lib
| |-- sdl2.dll
| |-- pkgconfig
| |----- sdl2.pc
|------------ include
此外,我们还要修改 sdl2.pc 中的内容,将其中的库路径修改为指定的输出路径
编译x264
下载源码
git clone https://code.videolan.org/videolan/x264.git
MSYS2安装编译工具
通过VS X64 Native… 窗口打开MSYS2:
安装生成Makefile的工具:
$ pacman -S automake autoconf libtool
编译
生成Makefile:
CC=cl ./configure --prefix=/usr/local/x264 --enable-shared --disable-asm
编译:
make -j 4 && make install
通过上面的命令就可以将 x264 编译出来了。x264 编译好后,其输出的目录结构与 ffmepg 是一样的,在 /usr/local/x264 中包括了 include、lib、bin 等目录。
库文件重命名
:::info
要特别强调的一点是,我们需要将 lib 目录下的 libx264.dll.lib 文件名修改为 libx264.lib,否则 ffmpeg 编译时会报 “无法找到该库” 的错误。
:::
编译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“:
点击”Generate“
点击”Open Project“,生成VS工程
VS2022 来编译 FDK-AAC
生成文件
Debug
Release
但是这里发现一个问题,就是目录下没有 include 目录
为了解决这个问题,我又用 MSYS2+mingw 的方式重新编译了一遍 fdk-aac,这种方式是可以生成 include 头文件的
打开MSYS2 MINGW64
安装mingw gcc
pacman -S mingw-w64-x86_64-gcc
编译
在fdk-aac源码目录下执行如下命令:
./autogen.sh
./configure --prefix=/usr/local/fdk-aac --enable-shared
make -j4 && make install
生成include目录
创建输出目录
为了满足要求,我们需要在指定输出目录下创建 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,修改路径
FFMPEG使用第三方库
设置环境变量 PKG_CONFIG_PATH
安装vim
添加环境变量
在 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
生效环境变量
重新编译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
拷贝第三方库
验证FFMPEG
VS项目中引用FFMPEG库
创建新项目
引入FFMPEG头文件
在 项目右键 -> 属性 -> C/C++ -> 常规 -> 附加包含目录 中添加 FFmpeg 头文件所在路径。
指定库文件位置
在 项目右键 -> 属性 -> 链接器 -> 常规 -> 附加库目录 中添加 FFmpeg 库所在路径。
指定使用哪个库
在 项目右键 -> 属性 -> 链接器 -> 输入 -> 附加依赖项 中指定你所用到的 FFmpeg 库
运行测试程序
#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库:
拷贝E:\Jesse\FFMPEG\MSYS2\usr\local\ffmpeg\bin\avutil-59.dll至C:\Windows\System32
测试验证FFMPEG在VS中成功:
FFMPEG+QT开发环境搭建
QT环境的安装这里不再赘述,网上资源很多可参考。
新建QT工程
拷贝所需的lib文件和头文件
将之前编译的 lib 文件以及整个 include 目录下的文件拷贝到 QT 项目目录下
如下图所示:
拷贝所需的dll动态库文件
然后将之前编译的 bin 文件加的所有 .dll 动态库复制到 qt 编译后的 debug文件夹下。
如下图所示:
补充:
后续在实际项目中运行QT程序发现提示错误crashed退出,直接运行可执行程序发现x264链接库错误,前期手动更改x264库名导致程序不能识别库文件:
修改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