为什么要编译FFmpeg?
- 定制模块
- 调试源码
windows下编译
推荐项目ShiftMediaProject/FFmpeg
平时总是看到一些人说windows下编译FFmpeg很麻烦,这时候我就都是微微一笑,你是不知道ShiftMediaProject/FFmpeg这个开源项目呀。这个项目可以让你在windows下很轻松地用VS编译调试FFmpeg。
零 创建目录结构如下
- 你指定的构建目录
- msvc (OutputDir)
- source
- FFmpeg
如图
一 克隆仓库
克隆仓库https://github.com/ShiftMediaProject/FFmpeg
这里我对版本没有要求所以不切换commit,你也可以指定commit ID。
使用前查看SMP/readme.txt
VS版本要大于等于2013,建议不要用VS2022,因为ASM的说明里没有说支持2022。
二 下载依赖
可以看到FFmpeg依赖的模块非常多
运行project_get_dependencies.bat下载依赖
可以重新运行project_get_dependencies.bat看看有没有报错,有报错则可能有的依赖没下载成功,这时要么继续运行该脚本下载,要么手动下载失败的仓库。
下图可以看到gmp这个仓库下载失败了
再执行一次脚本。
三 下载额外的依赖
还需要一下额外的依赖要单独下载
- opengl
在https://registry.khronos.org/OpenGL/index_gl.php下载glext.h,wglext.h和khrplatform.h
https://registry.khronos.org/OpenGL/api/GL/glext.h
https://registry.khronos.org/OpenGL/api/GL/wglext.h
https://www.khronos.org/registry/EGL/api/KHR/khrplatform.h
glext.h,wglext.h放到目录msvc/include/gl
khrplatform.h放到目录msvc/include/KHR
- ffnvcodec
克隆仓库https://github.com/FFmpeg/nv-codec-headers
将nv-codec-headers/include目录拷贝到msvc/include
- AMF
下载可能很慢(建议科学上网)
克隆https://github.com/GPUOpen-LibrariesAndSDKs/AMF
将amf/public/include里的两个目录拷贝到msvc/include/AMF
四 下载ASM
https://github.com/ShiftMediaProject/VSNASM/releases/latest
以管理员身份运行install_script.bat脚本
可以看到运行成功,如果失败就参考readme吧。
五 编译
打开ShiftMediaProject-build\source\FFmpeg\SMP\ffmpeg_deps.sln解决方案
选择Debug+x64
构建解决方案(慢慢等)
编译成功,将下图三个目录拷贝到你的工程,导入VS,就能开发了。
六 调试
将ffmpeg设为启动项目
F11启动调试,报错:
如下图可以看到调试的命令路径不是exe生成路径(链接器输出文件)
所以要将链接器输出路径拷贝到调试->命令里
再次F11,单步调试成功。
ffplay和ffprobe同理(重入上面操作)
参考博客
https://www.cnblogs.com/cfas/p/11974426.html
https://blog.csdn.net/fengbingchun/article/details/103735560
linux下编译
https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
mkdir -p ~/ffmpeg_sources && \
cd ~/ffmpeg_sources && \
wget -O ffmpeg-5.1.2.tar.bz2 https://ffmpeg.org/releases/ffmpeg-5.1.2.tar.bz2 && \
tar jxvf ffmpeg-5.1.2.tar.bz2
cd ~/ffmpeg_sources/ffmpeg-5.1.2 && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-libs="-lpthread -lm" \
--ld="g++" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-gnutls \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-libpulse \
--enable-pic \
--enable-shared \
--enable-nonfree && \
PATH="$HOME/bin:$PATH" make -j8 && \
make install && \
hash -r