我有一个 Ubuntu 18.04 的 Docker 镜像。它有来自普通 repo 包的 ffmpeg 3.4.6,但我想将其升级到 4.x。我尝试了jonathonf
PPA 的“标准”方式,但得到的是库版本不匹配。
以下是详细信息:
FROM nvidia/cudagl:10.0-runtime-ubuntu18.04
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
RUN apt-get update -y && \
apt-get install -y apt-utils && \
apt-get install -y curl x11-apps xserver-xorg libglu1-mesa-dev freeglut3-dev mesa-common-dev \
libgtk2.0-0 libxmu-dev libxi-dev mesa-utils htop libgtk-3-dev libglfw3 vim \
python zip unzip software-properties-common ffmpeg imagemagick python3.6-dev && \
rm -rf /var/lib/apt/lists/*
+ some unrelated stuff (CUDA, python packages, etc.)
之后(当我登录到一个容器时,但如果我在 Dockerfile 中执行此操作也是一样的)我执行了 bog 标准:
add-apt-repository ppa:jonathonf/ffmpeg-4
apt-get update
apt-get install ffmpeg
即我在设置不同的机器时已经做过很多次的事情。
然而,与通常的情况不同ffmpeg version 4.2 Copyright (c) 2000-2019 the FFmpeg developers
,我运行时得到的ffmpeg
是这个:
ffmpeg: relocation error: /usr/lib/x86_64-linux-gnu/libavfilter.so.7: symbol av_gcd_q version LIBAVUTIL_56 not defined in file libavutil.so.56 with link time reference
我在 Google 上搜索了一下,发现似乎是库版本不匹配。我尝试卸载并重新安装相关的 libav 包,将 ppa 放在 Dockerfile 的开头(在安装任何实质性内容之前),等等apt upgrade
,apt autoremove
各种组合,但似乎都无法给我一个可用的二进制文件。
我想我可以获得 ffmpeg 的静态版本并将其包含在我的 docker 镜像中,但我更愿意不这样做,而只是从 ppa/repo 包安装 4.x。我该怎么做?
答案1
只需安装ffmpeg通过折断:
sudo snap install ffmpeg
snap search ffmpeg
Name Version Publisher Notes Summary
ffmpeg 4.3.1 snapcrafters - A complete solution to record, convert and stream audio and video.
https://github.com/snapcore/snapcraft/blob/master/docker/stable.Dockerfile