Ubuntu20.04下编译ffmpeg

2021.11.23 建议查看教程:为 jellyfin 开启 VPP 和 openCL 色调映射


2021.11.17 编译了docker镜像: xanderye/linuxserver-jellyfin:10.7.7


之前使用了linuxserver/jellyfin:version-10.7.7-1 镜像但发现无法播放部分4kHDR视频,目前官方ffmpeg最高4.3.2,评论说ffmpeg 4.4.1解决了此问题,于是编译试试。

由于jellyfin官方ffmpeg编译了很多东西,我在nas上用只有核显,为了节省时间,我删除了 opencl amf cuda cuda-llvm cuvid nvenc nvdec ffnvcodec 这几个插件。

总共花了我3小时,各种缺依赖装依赖,能apt安装绝对不手动编译🌚

环境

本次编译直接在 linuxserver/jellyfin:version-10.7.7-1 容器内进行。

进入容器,执行 sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list 将源切成阿里源。

执行 apt update 更新源

安装工具 apt install -y vim git gcc make cmake yasm autoconf pkg-config libtool

编译dav1d

安装环境:apt install -y python3-pip ninja-build nasm && pip3 install --user meson

cd /usr/local

下载源码: curl -O https://code.videolan.org/videolan/dav1d/-/archive/master/dav1d-master.tar.gz && tar -zxf dav1d-master.tar.gz

创建文件夹:cd dav1d-master && mkdir build && cd build

编译:/root/.local/bin/meson setup -Denable_tools=false -Denable_tests=false --default-library=static .. --prefix /usr/local/ffmpeg/dav1d --libdir=/usr/local/ffmpeg/dav1d/lib && \
ninja && ninja install

配置dav1d环境变量: echo "export PKG_CONFIG_PATH=/usr/local/ffmpeg/dav1d/lib/pkgconfig/:\$PKG_CONFIG_PATH" >> /etc/profile && source /etc/profile

编译x264

cd /usr/local

下载源码: curl -O https://code.videolan.org/videolan/x264/-/archive/master/x264-master.tar.bz2 && tar -jxf x264-master.tar.bz2 && cd x264-master

配置: ./configure --enable-static --enable-share --disable-asm

编译: make && make install

编译z.lib

cd /usr/local

下载源码: git clone https://gitee.com/rzkn/zimg.git

配置环境: cd zimg && ./autogen.sh && ./configure

编译: make && make install

编译ffmpeg

cd /usr/local

下载源码: curl -O http://ffmpeg.org/releases/ffmpeg-4.4.1.tar.gz && tar -zxf ffmpeg-4.4.1.tar.gz

安装依赖: cd ffmpeg-4.4.1 && apt install -y libgmp3-dev libgnutls28-dev libass-dev libbluray-dev libdrm-dev libmfx-dev libmp3lame-dev libopus-dev libtheora-dev libvorbis-dev libvpx-dev libwebp-dev libx265-dev libzvbi-dev libva-dev libvdpau-dev

配置:

./configure --prefix=/usr/local/ffmpeg \
 --target-os=linux \
 --disable-doc \
 --disable-ffplay \
 --disable-shared \
 --disable-libxcb \
 --disable-sdl2 \
 --disable-xlib \
 --enable-gpl \
 --enable-version3 \
 --enable-static \
 --enable-libfontconfig \
 --enable-fontconfig \
 --enable-gmp \
 --enable-gnutls \
 --enable-libass \
 --enable-libbluray \
 --enable-libdrm \
 --enable-libfreetype \
 --enable-libfribidi \
 --enable-libmp3lame \
 --enable-libopus \
 --enable-libtheora \
 --enable-libvorbis \
 --enable-libdav1d \
 --enable-libwebp \
 --enable-libvpx \
 --enable-libx264 \
 --enable-libx265 \
 --enable-libzvbi \
 --enable-libzimg \
 --arch=amd64 \
 --enable-vaapi \
 --enable-libmfx \
 --enable-vdpau

如果和我一致则环境没问题可以开始编译了

编译: make && make install

大概需要20-30分钟

编译完成后ffmpeg在 /usr/local/ffmpeg/bin

备份 /usr/lib/jellyfin-ffmpeg,覆盖ffmpeg和ffprobe:

cp -r /usr/local/ffmpeg/bin/* /usr/lib/jellyfin-ffmpeg

验证

执行命令:/usr/lib/jellyfin-ffmpeg/ffmpeg -version

效果

但是Jellyfin的色调映射还是不能用,HDR视频色彩失真。还是用emby吧。

经评论区大佬提醒,修改结论:我编译的ffmpeg4.4.1确实不能色彩映射,应该是某个组件没编译好。按github大佬编译的ffmpeg4.4.1-1.deb包安装上,在VAAPI下4KHDR能VPP色彩映射。

发布日期:
分类:Linux