XanderYe的个人小站

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

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

https://wp.xanderye.cn/wp-content/uploads/2021/11/image-1024x491.png

编译: 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

https://wp.xanderye.cn/wp-content/uploads/2021/11/image-4.png

效果

https://wp.xanderye.cn/wp-content/uploads/2021/11/image-5.png

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

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

赞赏

发表评论

textsms
account_circle
email

  • imace 未知

    已经放弃Jellyfin了。硬解和字幕支持都很差。无论用什么方法都没法调教好。等待更新emby 4.6.17。另外:博主的导航页面源码是否可以分享下?

    2年前 回复
    • xander博主 未知

      @imace: 我放到Github上了 Github

      2年前 回复
      • imace 未知

        @xander: 非常感谢。还有一点不明白,威联通在哪配置 change_bing.sh 定时任务?

        2年前 回复
      • imace 未知

        @xander: 折腾得差不多了。非常感谢博主源代码。

        但是index.js的link我有个问题怎么都解决不了。qbittorrent的访问链接必须要在后面加入一个/,把这个斜杠确实是写进去了link,但是点击后出来的地址访问时是没有/在后面。例如,qbittorrent的访问地址是http://192.168.1.1:8989/,index.js 修改link: “http://192.168.1.1:8989/”,点击qbitorrent,浏览器里却只能地址栏只访问到了”http://192.168.1.1:8989″,需要手动再在后面加个/才能正常访问。如果index.js 修改link: “http://192.168.1.1:8989//”,点击链接,浏览器地址栏则访问到的是http://192.168.1.1:8989//,也是无法正常访问qbittorrent。不知道如何解决这个link如何只有一个/正常访问。

        2年前 回复
        • xander博主 未知

          @imace: 刚测试 qBittorrent_4.3.8.0_x86_64.qpkg 没有这个问题,提供几个解决方案:1.更新qb;2.使用transmission;3.使用nginx代理

          2年前 回复
        • xander博主 未知

          @imace: 但是我发现不加 / 是跳到登录页面要重新登录,不知你说的是否是这个

          2年前 回复
          • imace 未知

            @xander: 不加/ 我的显示unauthorized. 4.3.3我用的qpkg套件版,这两天升级到了johngong/qbittorrent 4.3.9 docker后,还是一样管理地址后没有/,也都是unauthorized,加/才能正常管理,该登录就登录。

            浏览器用safari和edge都要在后面加/才能登录webui管理。

            2年前
          • xander博主 未知

            @imace: 无能为力了,我试了套件版和docker版,都没你unauthorized的问题

            2年前
  • 达文牛 未知

    博主编译讲得很好,不过结论部分有点出入。你可以试试开发者自己编译好的ffmpeg4.4.1,在https://github.com/jellyfin/jellyfin-ffmpeg/pull/76/checks 这里的 右边的Artifacts里面。我在ZDM简单写了两篇补驱动的小文章。主要考虑不需要编译的情况。正如博主所说:能apt安装绝对不手动编译。我分别基于linuxserver/jellyfin和jellyfin/jellyfin 两个版本的Docker写了一点,linuxserver那个我没贴图,jellyfin这个我贴图了,色调映射后HDR基本可用,除了亮度不完美,应该和本地播放器接近了。

    2年前 回复
    • xander博主 未知

      @达文牛: 谢谢;刚试了我编译的ffmpeg4.4.1确实不能色调映射,没编译好

      2年前 回复

XanderYe的个人小站

Ubuntu20.04下编译ffmpeg
2021.11.23 建议查看教程:为 jellyfin 开启 VPP 和 openCL 色调映射 2021.11.17 编译了docker镜像: xanderye/linuxserver-jellyfin:10.7.7 之前使用了linuxserver/j…
扫描二维码继续阅读
2021-11-11