FFmpeg 学习笔记
编译
下载源码
- 官网 比较慢,没梯子是万万不行的
- FFmpeg.club 夏曹俊维护的网站,缺点是更新不大及时
- 码云 码云可以从
github
导入仓库,然后随便下载。我经常用他导入比较大的库比如protobuf
,grpc
,breakpad
等等,对不住了,不过真香。。。
Ubuntu 16.04 编译
编译
tar jxvf ffmpeg-4.2.1-source.tar.bz2
cd ffmpeg-4.2.1-source
apt install pkg-config nasm -y
# Ubuntu Server 就不安装 SDL2 了,没有图形库。因此不会编译 `ffplay`。
# apt install sdl2-dev
# --prefix 安装路径
# --disable-static 不编译静态库
# --enable-shared 编译动态库# 如果 make 的时候报 `/usr/bin/ld: libavcodec/mqc.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC` 错误
# ./configure 尾巴加上 --extra-cflags="-fPIC"
./configure --prefix=/usr/local/ffmpeg --disable-static --enable-shared
make -j 16
sudo make install
设置环境变量
vi ~/.bashrc
添加 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/ffmpeg/lib/pkgconfig
,让 pkg-config
可以找到 ffmpeg
的库。
添加 export PATH=$PATH:/usr/local/ffmpeg/bin
让 ffmpeg
可以在任意路径执行。
source ~/.bashrc
测试:
pkg-config --libs --cflags libavutil
ffmpeg
如果输出正常则配置无误。
macOS Catalina 编译
tar jxvf ffmpeg-4.2.1-source.tar.bz2
cd ffmpeg-4.2.1-source
brew install pkg-config nasm
./configure --prefix=/usr/local/ffmpeg --disable-static --enable-shared
make -j 16
sudo make install
除了 apt
换成了 brew
,其他完全一样。配置环境变量也一样,只是配置文件是 ~/.bash_profile
,不再赘述。
Windows 编译
cygwin 编译
cygwin
是个在 windows
下模拟 linux
的东东,所以步骤参照 Ubuntu16.04
,只是它的包管理工具不是 apt
,而是 cyg-apt
。
-
去 官网 下载安装包安装,除了获取源列表有点慢可能需要搭梯子,获取完源列表后,选择网易的源,下载速度就飞快了。安装时为了省事,全选
Debug, Devel, Net
,还有Web/wget
。 -
打开
cygwin terminal
,安装cyg-apt
:# 不用代理没法下载啊摔 wget -e http_proxy=http://127.0.0.1:10809 https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg install apt-cyg /bin
-
解压、编译,参考
Ubuntu16.04
msys2 编译
- 去官网 下载安装包安装
- 第一件事:换源!参考 清华大学MSYS2 镜像使用帮助
- 然鹅没有
vim
没法换源,先龟速安装吧。。。pacman -S vim
- 换源~~
- 不使用
msys2.exe
编译,而是打开mingw64.exe
- 安装工具链
pacman -S make diffutils pkg-config nasm mingw64/mingw-w64-x86_64-gcc
。之所以gcc
要写那么长,是因为直接写gcc
的话安装的是msys gcc
,也能成功编译,但执行ffmpeg.exe
时会提示msys-2.0.dll
找不到。 pacman -S mingw64/mingw-w64-x86_64-fdk-aac
pacman -S mingw64/mingw-w64-x86_64-opus
-
安装
libx264
wget https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2 tar jxvf x264-master.tar.bz2 cd x264-master.tar.bz2 make && make install echo "export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig" >> ~/.bashrc source ~/.bashrc
- 安装
libx265
:pacman -S mingw64/mingw-w64-x86_64-x265
./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-debug=3 --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libopus
make -j 12 && make install
msys2 + vs2019 编译 (x86_64)
- 安装
msys2
同上不提 - 打开
x64 Native Tools Command Prompt for VS 2019
- 切换路径到
msys2
安装路径如G:\msys64
msys2_shell.cmd -use-full-path -mingw64
- 切换到
ffmpeg
源码路径,执行./configure --prefix=../win64 --toolchain=msvc --arch=x86_64 --enable-cross-compile
-
执行
make
会报错fftools/cmdutils.c(1149): error C2065: “slib”: 未声明的标识符
用
vscode
打开config.h
,reopen with encoding
选gb2312
,再save with encoding
选utf8
后再次执行make
即可 make install