Назад | Перейти на главную страницу

Установка FFMPEG на EC2 - Amazon Linux

Привет, друзья Serverfault,

Я пытаюсь установить FFMPEG с зависимостями на инстансе AWS EC2, на котором запущен Amazon Linux AMI, примерно через два дня. Я без проблем устанавливал FFMPEG в системах Ubuntu и Fedora в прошлом и прочитал, как сообщается, успешные инструкции по установке в Red Hat / Fedora. Я следил за рядом руководств и статей на форумах, чтобы сделать это, но пока мне не повезло. Насколько я могу судить, основные проблемы следующие:

  1. В репозиториях yum amazon linux (больше всего похожих на red-hat / centos) отсутствует ffmpeg. Я нашел инструкции по обновлению репозиториев для включения необходимых пакетов, но добавление этих репозиториев приводит к сбою yum при обновлении пакетов. (Кроме того, я читал несколько предостерегающих историй о добавлении репозиториев redhat / centos в amazon linux, которые наводят меня на мысль, что это может быть плохой идеей)

(https://forums.aws.amazon.com/thread.jspa?messageID=229166)

  1. Я пробовал более сложный метод загрузки, компиляции и установки архива с исходными кодами, но это всегда не удается из-за отсутствия зависимостей и других ошибок.

На мой вопрос: кто-нибудь успешно установил FFMPEG на Amazon Linux? Есть принципиальная несовместимость? Если бы кто-нибудь мог поделиться конкретными инструкциями по установке ffmpeg на amazon linux, я был бы очень признателен. Любые другие идеи / опыт также будут оценены.

Заранее спасибо, Оливер

В Fedora или RHEL я использую ATRPMS для установки ffmpeg. Я не уверен, насколько хорошо это будет работать для Amazon Linux. В худшем случае вам придется вытащить все RPM вручную, а затем перестроить их локально, что должно быть проще, чем пытаться построить все зависимости ffmpeg самостоятельно. И у вас будут RPM, которые вы можете поместить в свое локальное репо или что-то еще.

Что касается проблемы с обновлением пакета yum, вам нужно включить только ffmpeg и пакеты, от которых он зависит, в файле .repo. Это предотвратит загрузку yum других пакетов из этого репо. Вы также можете установить приоритеты yum.

Что ж, прямой ответ - нет, но правильный ответ - Я могу.

Если во время компиляции у вас отсутствуют зависимости, вам просто нужно найти их и скомпилировать, а затем повторить попытку. Если вам действительно нравится, вы можете создать свой собственный пакет из всех этих зависимостей.

В этом нет принципиальной несовместимости, просто немного тяжелого опыта.

FWIW, вот мой опыт попытки скомпилировать 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 toolkit.

Я считаю, что для первоначальной компиляции вам необходимо перейти на CUDA toolkit 10.1 (по крайней мере, с 08.04.2020), загрузить с 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

NASM

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

YASM

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

libx264

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

мне проще всего было установить статическую сборку из http://johnvansickle.com/ffmpeg/

Просто распакуйте и запустите ./ffmpeg