自己打包ffmpeg

ffmpeg 是一个非常庞大的软件,而且依赖关系太多了,导致还是自己打包一下,把对应的依赖包都打进去,这样省的后面搞依赖了。

由于贵司现在还有centos7的服务器,而且还都运行的非常好,因此只能打包ffmpeg6的版本,7还有很多依赖的东西比较底层,不太好搞。

依赖包编译。由于我最终ffmpeg是安装到/usr/local/ffmpeg-6.1的,所以就需要把这些依赖包都安装到这个目录下。因此我的这些第三方依赖库的编译都会添加

1
--prefix=/usr/local/ffmpeg-6.1/third

这些第三方依赖就不单独说了。主要说说ffmpeg本身的编译,因为你的第三方依赖包都在 /usr/local/ffmpeg-6.1/third 目录下,因此编译的时候需要进行一些调整。

其实就是把third目录下的这些lib加进来

首先是ldconfig的默认路径要添加一下

1
2
3
4
5
6
7
8
$ cat /etc/ld.so.conf.d/ffmpeg.conf
/usr/lib
/usr/local/lib
/usr/local/lib64
/usr/local/ffmpeg-6.1/third/lib


$ ldconfig

然后是pkg-config的默认路径也要修改下, 然后就是主角的编译了

1
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/local/lib64/pkgconfig:/usr/lib64/pkgconfig:/usr/local/ffmpeg-6.1/third/lib/pkgconfig
1
2
3
./configure --prefix=/usr/local/ffmpeg-6.1 --pkg-config-flags=--static --enable-gpl --enable-libfdk_aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libvpx --enable-libx264 --enable-libx265 --enable-nonfree --enable-libfontconfig --enable-libwebp --extra-ldflags='-L /usr/local/ffmpeg-6.1/third/lib'
make -j4
sudo make install

接下来就是使用fpm打包的事情了,fpm是ruby环境下的一个工具,本来以为是小事一桩,发现现在ruby的版本也是飞速发展,导致我只能安装rvm环境来进行,不然你就会为了ruby环境折腾好久,我是折腾了ruby2, ruby2.5,然后直接rvm环境了

1
2
3
4
5
6
7
8
9
gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
source ~/.bashrc
source ~/.bash_profile
echo "ruby_url=https://cache.ruby-china.com/pub/ruby" > /usr/local/rvm/user/db
source /usr/local/rvm/scripts/rvm
rvm list known
rvm install ruby-3.0.0
gem install fpm

为最后fpm再准备几个工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ cat /usr/local/ffmpeg-6.1/tools/ffmpeg.conf
/usr/lib
/usr/local/lib
/usr/local/lib64
/usr/local/ffmpeg-6.1/third/lib
/usr/local/ffmpeg-6.1/third/lib64


$ cat /usr/local/ffmpeg-6.1/tools/post.sh
ln -s /usr/local/ffmpeg-6.1/bin/ffmpeg /usr/local/bin/ffmpeg6
cp /usr/local/ffmpeg-6.1/tools/ffmpeg.conf /etc/ld.so.conf.d/
ldconfig

$ cat /usr/local/ffmpeg-6.1/tools/remove.sh
unlink /usr/local/bin/ffmpeg6
rm -rf /etc/ld.so.conf.d/ffmpeg.conf

最后我们就可以用fpm来进行打包了

1
2
3
export INTERMEDIATE_INSTALL_DIR=/usr/local/ffmpeg-6.1
cd /usr/local
fpm -s dir -t rpm -n ffmpeg -v 6.1.2 --iteration 1 -C ${INTERMEDIATE_INSTALL_DIR} --prefix=${INTERMEDIATE_INSTALL_DIR} --vendor timo --post-install ffmpeg-6.1/tools/post.sh --after-remove ffmpeg-6.1/tools/remove.sh --description 'ffmpeg 6.1.2 with x264 x265 fdk' --url 'https://www.timoq.com' --rpm-defattrfile 755 --rpm-user root --rpm-group root .

最后我们把包上传到自己的仓库里,重新建立下repo就可以了

1
/bin/createrepo -pdo /data/mirrors/centos/7/x86_64/ /data/mirrors/centos/7/x86_64