官方编译

官方构建编译脚本,目前官方包只提供x64版本库,但是脚本可以编译32位。

1.Win32

2.Win64

visual studio编译

​ 本机自编译,采用ShiftMediaProject/FFmpeg项目来进行。ShiftMediaProject项目包括了ffmpeg依赖项和ffmpeg库本身。使用ShiftMediaProject和FFVS项目时,不能从ffmpeg官网下载源码,因为ShiftMediaProject做了一点点处理。如果遇到什么问题,可以查看github上的issue,不能解决的问题可以自己提一个issue。

​ 整个项目结构如下,msvc的include目录下,需要提前准备一些头文件,可以参考ShiftMediaProject的readme进行下载。

-msvc
	-include
		-gl
			-glext.h
			-wglext.h
		-AMF
			-components
			-core
		-KHR
			-khrplatform.h
		-ffnvcodec
			-dynlink_cuda.h
			-dynlink_cuviddec.h
			-dynlink_loader.h
			-dynlink_nvcuvid.h
			-nvEncodeAPI.h
-source
	-FFMpeg
	-其他依赖库的源文件(需要从ShiftMedia的仓库下载所有依赖的第三方库,如果网络好,可以使用FFMpeg中SMP目录里面project_get_dependencies.bat来下载,如果网络不好,就手动下载最新的relese源码包,然后解压即可)

​ 因为有些库是汇编实现的,所以需要给visual studio安装nasm或者yasm。这两个编译工具在ShiftMediaProject的仓库中有提供。

​ 安装完毕后,打开ffmpeg_dps.sln,然后就可以正常编译了。

​ 使用ShiftMediaProject编译的ffmpeg体积比较大,有很多功能可能不需要,可以使用FFVS项目来裁剪功能。使用FFVS进行功能裁剪时,需要先使用ShiftMediaProject将依赖库提前编译好,目录结构如下:

-msvc
	-include:所有依赖库的头文件(使用ShiftMediaProject编译得到的即可)
-source
	-FFmpeg:源码
	-prebuild
		-lib
			-x86:debug版本的带d,release版本的不带d
			-x64:debug版本的带d,release版本的不带d
-project_generate.exe

按照实际使用的功能,然后看哪些模块可以直接关闭掉。例如lib_Media_SDK库就只用到了解复用和解码器,以及一个文件协议,那么编码器、复用器等一大堆功能就可以不需要。这样体积会大大的减小。

.\project_generate.exe --rootdir=./source/FFmpeg --disable-encoders --disable-muxers --disable-protocols --enable-protocol=file --disable-filters --enable-filter=blackframe --disable-devices --disable-bsfs --disable-hwaccels --enable-gpl --enable-version3 --enable-bzlib --enable-iconv --enable-lzma --enable-sdl2 --enable-zlib --enable-libmp3lame --enable-libvorbis --enable-libspeex --enable-libopus --enable-libilbc --enable-libtheora --enable-libx264 --enable-libx265 --enable-libxvid --enable-libvpx --enable-libgme --enable-libmodplug --enable-libsoxr --enable-libfreetype --enable-fontconfig --enable-libfribidi --enable-libass --enable-libxml2 --enable-gnutls --disable-schannel --enable-gcrypt --enable-libssh --enable-libcdio --enable-libbluray --enable-opengl --enable-libmfx --enable-ffnvcodec --enable-cuda --enable-amf

注意

  • Windows下编译动态库dll会带一个.lib文件,使用使用直接输入这个lib文件就行。
  • Windows下编译静态库只有静态库本身。