你好,Serverfault 的朋友们,
我花了大约两天时间尝试在运行 Amazon Linux AMI 的 AWS EC2 实例上安装带有依赖项的 FFMPEG。我过去曾在 Ubuntu 和 Fedora 系统上安装过 FFMPEG,没有任何问题,并且读过据说在 Red Hat/Fedora 上安装成功的说明。我按照许多教程和论坛文章进行了操作,但还没有成功。据我所知,主要问题如下:
- amazon linux(与 red-hat/centos 最相似)yum 存储库没有可用的 ffmpeg。我找到了更新存储库以包含所需软件包的说明,但添加这些存储库会导致 yum 无法更新软件包。(此外,我读过一些关于将 redhat/centos 存储库添加到 amazon linux 的警示故事,这让我相信这可能是一个坏主意)
(https://forums.aws.amazon.com/thread.jspa?messageID=229166)
- 我尝试过一种更复杂的方法,即下载源 tarball、编译和安装,但由于缺少依赖项和其他错误,这种方法总是失败。
回到我的问题:有人在 Amazon Linux 上成功安装了 FFMPEG 吗?是否存在根本的不兼容性?如果有人能分享在 amazon linux 上安装 ffmpeg 的具体说明,我将不胜感激。任何其他见解/经验也将不胜感激。
提前致谢,奥利弗
答案1
嗯,直接的答案是否定的,但正确的答案是我可以。
如果在编译过程中缺少依赖项,您只需找到它们并编译它们,然后重试。如果您真的很想尝试一下,您可以使用所有这些依赖项制作自己的包。
这并没有什么根本的不兼容性,只是有一些艰难的经历。
答案2
在 Fedora 或 RHEL 上我使用原子力荧光探针安装 ffmpeg。我不确定这对 Amazon Linux 的效果如何。最糟糕的情况是,您需要手动下载所有 RPM,然后在本地重建它们,这应该比尝试自己构建所有 ffmpeg deps 更简单。而且,您可以将 RPM 放入本地存储库或其他地方。
关于 yum 软件包更新问题,您需要在 .repo 文件中仅包含 ffmpeg 及其依赖的软件包。这样 yum 就不会从该 repo 中拉取其他软件包。您还可以设置 yum 优先级。
答案3
对我来说最简单的方法是安装静态构建http://johnvansickle.com/ffmpeg/
只需解压并运行 ./ffmpeg
答案4
仅供参考,这是我最近尝试从源代码编译 ffmpeg 的经验。
一般ffmpeg
编译指南来自https://trac.ffmpeg.org/wiki/CompilationGuide/Centos
增强了以下信息https://developer.nvidia.com/ffmpeg用于 NVENC 支持以及https://www.linode.com/docs/platform/linode-gpu/getting-started-with-gpu/获取 CUDA 工具包安装帮助。
对于初始编译,我相信你需要降级到 CUDA 工具包 10.1(至少截至 2020-04-08),从下载https://developer.nvidia.com/cuda-toolkit-archive- 转到下载页面,选择安装时使用说明Linux/x84_64/CentOS/8/runfile (local)
。但是,要运行 ffmpeg,您需要升级回 10.2(或者至少升级驱动程序,但我没有尝试过),否则在使用 NVENC 编码时,您会收到如下错误:
[h264_nvenc @ 0x41d4080] Driver does not support the required nvenc API version. Required: 9.1 Found: 9.0
[h264_nvenc @ 0x41d4080] The minimum required Nvidia driver for nvenc is 435.21 or newer
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height
安装依赖项(其中一些已经存在)
sudo yum install autoconf automake bzip2 bzip2-devel cmake \
freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel
mkdir ~/ffmpeg_sources
美国国家医学会杂志
cd ~/ffmpeg_sources && \
curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2 && \
tar xjvf nasm-2.14.02.tar.bz2 && \
cd nasm-2.14.02 && \
./autogen.sh && \
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install
亚美尼亚青年科学基金会
cd ~/ffmpeg_sources && \
curl -O -L https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz && \
tar xzvf yasm-1.3.0.tar.gz && \
cd yasm-1.3.0 && \
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install
NV 编解码器标头,NVENC 所需
cd ~/ffmpeg_sources && \
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git && \
cd nv-codec-headers && \
sudo make install
库文件
cd ~/ffmpeg_sources && \
git clone --depth 1 https://code.videolan.org/videolan/x264.git && \
cd x264 && \
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static && \
make && \
make install
libx265
cd ~/ffmpeg_sources &&
hg clone https://bitbucket.org/multicoreware/x265 && \
cd ~/ffmpeg_sources/x265/build/linux && \
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source && \
make && \
make install
libfdk_aac
cd ~/ffmpeg_sources && \
git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \
cd fdk-aac && \
autoreconf -fiv && \
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
make && \
make install
#libmp3lame
cd ~/ffmpeg_sources && \
curl -O -L https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz && \
tar xzvf lame-3.100.tar.gz && \
cd lame-3.100 && \
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm && \
make && \
make install
利巴普斯
cd ~/ffmpeg_sources && \
curl -O -L https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz && \
tar xzvf opus-1.3.1.tar.gz && \
cd opus-1.3.1 && \
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
make && \
make install
libvpx
cd ~/ffmpeg_sources && \
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
cd libvpx && \
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
make && \
make install
ffmpeg 本身
cd ~/ffmpeg_sources && \
curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
# Extra pkgconfig path comes from https://superuser.com/questions/1299064/error-cuvid-requested-but-not-all-dependencies-are-satisfied-cuda-ffnvcodec \
PATH="$HOME/bin:$PATH" \
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig:/usr/local/lib/pkgconfig/" \
./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-libs=-lpthread \
--extra-libs=-lm \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libfdk_aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree \
--enable-libfdk_aac \
--enable-libmp3lame \
--enable-libopus \
--enable-libvpx \
--enable-cuda-nvcc \
--enable-cuvid \
--enable-nvenc \
--enable-libnpp \
--extra-cflags="-I$HOME/ffmpeg_build/include -I/usr/local/cuda/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib -L/usr/local/cuda/lib64" && \
make -j 10 && \
make install && \
hash -d ./ffmpeg