然后我想,我能不能把以上的安装指令变成rpm。这样的好处是我自己编译出来的包可以和系统现有的其它部分集成在一起。假如系统有某个包需要用到ffmpeg,它不会另外安装一个并且把我的给冲掉。 于是,第一步我先去fedora社区把它们ffmpeg的rpm脚本弄下来。
git clone
https://src.fedoraproject.org/rpms/ffmpeg.git 然后略作修改。主要就是在configure ffmpeg的时候加入了我想要的nvenc等,去掉了我用不着的比如vaapi/opencl.
@@ -572,8 +443,13 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
--enable-shared \
--disable-static \
--enable-gpl \
+ --enable-nonfree \
+ --enable-fontconfig \
--enable-version3 \
+ --enable-openssl \
--enable-libsmbclient \
+ --enable-nvenc \
+ --enable-nvdec \
--disable-openssl \
--enable-bzlib \
--enable-frei0r \
@@ -662,7 +538,6 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
--enable-libvpl \
%endif
--enable-lv2 \
- --enable-vaapi \
--enable-vdpau \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
@@ -678,7 +553,6 @@ cp -a doc/examples/{*.c,Makefile,README} _doc/examples/
%endif
--enable-libxvid \
--enable-openal \
- --enable-opencl \
--enable-opengl \
然后我手动的把这些patch文件复制到rpmbuild目录下
cp *.patch ~/rpmbuild/SOURCES
然后手动下载ffmpeg的source code也放到那个目录下。 Fedora的官方repo提供一个很复杂的打包ffmpeg source的脚本,我们用不到。它搞那么复杂主要是为了解决版权上的一些问题,我们不再分发我们编译出来的包就不需要担心那个。我们可以直接用ffmpeg.org上原版的包。
然后安装dependencies。
dnf install frei0r-devel libaom-devel.x86_64 lilv-devel.x86_64 libiec61883-devel.x86_64 libavc1394-devel.x86_64 libcaca-devel.x86_64 codec2-devel libdc1394-devel.x86_64 fdk-aac-free-devel
.x86_64 game-music-emu-devel gsm-devel ladspa-devel lame-devel libgcrypt-devel libmysofa-devel libX11-devel libXext-devel libXv-devel ilbc-devel oneVPL-devel libmodplug-devel opencore-amr
-devel libopenmpt-devel librabbitmq-devel rav1e-devel librist-devel librsvg2-devel.x86_64 snappy-devel soxr-devel libssh-devel srt-devel svt-av1-devel tesseract-devel.x86_64 twolame-devel
vid.stab-devel vo-amrwbenc-devel xvidcore-devel zeromq-devel zvbi-devel openal-soft-devel opencl-headers pipewire-jack-audio-connection-kit-devel libcdio-paranoia-devel
然后编译:
rpmbuild --undefine=_disable_source_fetch -bb ffmpeg.spec --with all_codecs --with upstream_tarball --without chromaprint --without x265
我得加上--without x265这是因为红帽系不提供x264/x265的包,而我自己折腾只把x264的搞定了,x265编译好安装了但是不知道为什么ffmpeg的rpmbuild总是不认。
编译的过程很快,不到一分钟。编译完的结果在$HOME/rpmbuild/RPMS 目录下。
我把它们复制到一个新的目录,然后用 createrepo_c 命令创建index
# createrepo_c .
这样就可以把那个repo直接当作一个dnf的源了。
$ cat /etc/yum.repos.d/local.repo
[my-rpms]
name=My RPMs $releasever - $basearch
baseurl=/data/rpmrepo
enabled=1
metadata_expire=1d
--
FROM 107.139.34.*