Как скомпилировать FFmpeg с поддержкой x265?

Вопрос или проблема

Сегодня я узнал, что x265 уже присутствует в ffmpeg, поэтому я скомпилировал ffmpeg с помощью этого руководства

К сожалению, libx265 не заработал на Ubuntu, однако на Windows я попробовал то же самое с сборкой zeranoe ffmpeg, и все работало без проблем.

Так что, как вы думаете, я сделал что-то не так или это еще не реализовано в сборке для Linux (используя это руководство)? Результаты команды ffmpeg -codecs | grep -i hevc показывают:

  ffmpeg версия 2.1.git Авторские права (c) 2000-2014 разработчики FFmpeg
  собрано 19 февраля 2014 19:00:17 с gcc 4.8 (Ubuntu/Linaro 4.8.1-10ubuntu9)
  конфигурация: --prefix=/home/levan/ffmpeg_build --extra-cflags=-I/home/levan/ffmpeg_build/include --extra-ldflags=-L/home/levan/ffmpeg_build/lib --bindir=/home/levan/bin --extra-libs=-ldl --enable-gpl --enable-libass --enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
  libavutil      52. 64.100 / 52. 64.100
  libavcodec     55. 52.102 / 55. 52.102
  libavformat    55. 33.100 / 55. 33.100
  libavdevice    55. 10.100 / 55. 10.100
  libavfilter     4.  1.102 /  4.  1.102
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
 D.V.L. hevc                 H.265 / HEVC (Высокоэффективное видеокодирование)

Спасибо за ваше время

на данный момент (19 февраля ’14) версия ffmpeg, которую вы скомпилировали, поддерживает только декодирование, а не кодирование.

Из вывода вашей команды :

D.V.L. hevc H.265 / HEVC (Высокоэффективное видеокодирование)

Кодеки:
D..... = Поддержка декодирования
.E.... = Поддержка кодирования
..V... = Видеокодек
..A... = Аудиокодек
..S... = Кодек для субтитров
...I.. = Кодек только для внутристрового кадра
....L. = С потерями
.....S = Без потерь

Вы можете попробовать этот предкомпилированный бинарный файл – https://code.google.com/p/x265/downloads/detail?name=x265-bin-ffmpeg-201206-preview2.zip&can=2&q=&sort=-uploaded

Вы можете получить пакет с включенной поддержкой кодирования и декодирования x265 здесь.

Выберите версию вашей ОС из выпадающего списка “Published In”, чтобы отфильтровать пакеты для вашей версии Ubuntu.

Добавьте PPA в ваш sources.lst

deb http://ppa.launchpad.net/motumedia/ffmpeg-daily/ubuntu YOUR_UBUNTU_VERSION_HERE main

В моем случае это trusty, так что я добавил deb http://ppa.launchpad.net/motumedia/ffmpeg-daily/ubuntu trusty main

Наслаждайтесь!

Обратите внимание, что это ежедневные сборки и “они предназначены для тестирования пересборок и тестирования зависимых пакетов. Не включайте это PPA на продукционных системах!”
Несмотря на это, у меня не было проблем с системами, куда я добавил это PPA, и (по крайней мере для меня) увеличение скорости было достаточно, чтобы оправдать риск.

ffmpeg -codecs |grep 265

  ffmpeg версия 2.8.1-1~14.04~motumedia0 Авторские права (c) 2000-2015 разработчики FFmpeg
  собрано с gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04)
  конфигурация: --prefix=/usr --extra-version='1~14.04~motumedia0' --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-openal --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-opengl --enable-x11grab --enable-libiec61883 --enable-libdc1394 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
 DEV.L. hevc                 H.265 / HEVC (Высокоэффективное видеокодирование) (кодировщики: libx265 )

Тестировалось на свежей установке Trusty 64-bit и обнаружилось, что она значительно быстрее предыдущей версии, которую я пробовал.

В руководстве, на которое вы сослались, в настоящее время отсутствуют необходимые инструкции для компиляции поддержки x265 для ffmpeg, так что неудивительно, что в вашей сборке отсутствует поддержка x265, в отличие от других.

У вас есть 3 варианта:

  • Вы можете следовать инструкциям на wiki x265 для сборки автономного кодировщика.
  • Посмотрите, как x264 включен в это руководство по сборке ffmpeg с поддержкой x264 (или введите ffmpeg с x265 в вашу любимую поисковую систему [моя не Google]).
  • Или вы можете просто использовать бинарные файлы Windows с Wine.

Имейте в виду, что x265 в отличие от x264 не размещен как репозиторий git на VideoLAN (существует страница, но он размещен другой компанией на bitbucket, которая сосредоточена на разработке x265. Простая замена x264 на x265 в руководстве не сработает.

Помните, что x265, как и его сильный конкурент Daala все еще находится на ранней стадии разработки (x265 начал давать функциональные сборки только несколько недель назад).

#!/bin/bash

#source installer.cfg
TEST_VID="tryout.mp4"
INST_PREFIX="/usr"
SOURCE_PREFIX="${HOME}/ffmpeg_source"


function display_message {

    clear
    echo $1
    sleep 5
}

function update_sys {

   display_message "Обновление Ubuntu с помощью apt-get update"
   apt-get update

   display_message "Установка необходимых пакетов"

   apt-get install -y autoconf automake build-essential mercurial git libarchive-dev fontconfig checkinstall
   apt-get install -y libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libgnutls-dev
   apt-get install -y libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo libtool libva-dev
   apt-get install -y libbs2b-dev libcaca-dev libopenjpeg-dev librtmp-dev libvpx-dev libvdpau-dev
   apt-get install -y libwavpack-dev libxvidcore-dev lzma-dev liblzma-dev zlib1g-dev cmake-curses-gui
   apt-get install -y libx11-dev libxfixes-dev libmp3lame-dev libx264-dev #libx264-146 libx264-dev

   sleep 5
}


function install_libnuma {

   NUMA_LIB="numactl-2.0.11.tar.gz"
   NUMA_PATH=$(basename ${NUMA_LIB} .tar.gz)

   cd ${SOURCE_PREFIX}

   if [ ! -d "${NUMA_PATH}" ];then

        wget -O ${NUMA_LIB} "ftp://oss.sgi.com/www/projects/libnuma/download/${NUMA_LIB}"
   fi

   tar xfzv ${NUMA_LIB}
   cd ${NUMA_PATH}
   ./configure
   make
   make install

   sleep 5
}


function install_libopus {

   OPUS_LIB=opus-1.1.2.tar.gz
   OPUS_PATH=$(basename ${OPUS_LIB} .tar.gz)

   cd ${SOURCE_PREFIX}

   if [ ! -d "${OPUS_PATH}" ]; then

            wget http://downloads.xiph.org/releases/opus/${OPUS_LIB}

   fi

   tar xzvf ${OPUS_LIB}
   cd ${OPUS_PATH}
   ./configure --prefix="${INST_PREFIX}" --disable-shared
   make
   make install
   make check
   make clean

   sleep 5
}


function install_cmake {

    cd ${SOURCE_PREFIX}

    #Требуется дальнейшее тестирование
    if [ ! -d "CMake" ]; then

        git clone https://github.com/Kitware/CMake

    fi

    cd CMake
    ./bootstrap --prefix="/usr/local"
    make
    make install

    sleep 5
}


function install_aac {

   AAC_LIB="fdk-aac.tar.gz"

   cd ${SOURCE_PREFIX}

   if [ ! -d "mstorsjo-fdk-aac*" ]; then

        wget -O ${AAC_LIB} https://github.com/mstorsjo/fdk-aac/tarball/master
   fi

   tar xzvf ${AAC_LIB}
   cd mstorsjo-fdk-aac*
   autoreconf -fiv
   ./configure --prefix="${INST_PREFIX}" --disable-shared
   make
   make install
   make distclean

   sleep 5
}


function install_yasm {

cd ${SOURCE_PREFIX}

if [ ! -d "yasm" ]; then

        git clone git://github.com/yasm/yasm.git
fi

cd yasm
./autogen.sh
}


function install_x265 {

cd ${SOURCE_PREFIX}

if [ ! -d "x265" ]; then

    hg clone https://bitbucket.org/multicoreware/x265

fi

cd x265/build/linux
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${INST_PREFIX}" ../../source

make
make install

sleep 5
}


function install_ffmpeg {

cd ${SOURCE_PREFIX}

if [ ! -d "ffmpeg" ]; then

        git clone git://source.ffmpeg.org/ffmpeg.git
fi

cd ffmpeg

PKG_CONFIG_PATH="${INST_PREFIX}/pkgconfig" \
./configure --prefix="${INST_PREFIX}" \
    --pkg-config-flags="--static" \
    --extra-cflags="-I${INST_PREFIX}/include"  \
    --extra-ldflags="-L${INST_PREFIX}/lib" \
    --enable-gpl \
    --enable-libass \
    --enable-libbluray \
    --enable-fontconfig \
    --enable-bzlib \
    --enable-gnutls \
    --enable-libbs2b \
    --enable-libcaca \
    --enable-zlib \
    --enable-libopenjpeg \
    --enable-librtmp \
    --enable-libvo-amrwbenc \
    --enable-libwavpack \
    --enable-lzma \
    --enable-libfdk-aac \
    --enable-libfreetype \
    --enable-libmp3lame \
    --enable-libopus \
    --enable-libtheora \
    --enable-libvpx  \
    --enable-libx264 \
    --enable-libx265 \
    --enable-nonfree \
    --enable-version3

make
make install

sleep 5
}


function testing {

   cd ${SOURCE_PREFIX}

   "${INST_PREFIX}"/bin/ffmpeg -i ${TEST_VID} -c:v libx265 -c:a aac test.mp4

   if [ $? -eq 0 ]; then

        echo "ТЕСТ ПРОЙДЕН!"

   else

        echo "ТЕСТ НЕ ПРОЙДЕН! СОДЕРЖИТ ОШИБКИ!"
        exit
   fi

   sleep 5
 }

display_message "Обновление системы Ubuntu"
update_sys


if [ ${SOURCE_PREFIX} != "/usr" ]; then

   mkdir ${INST_PREFIX}

fi

#Установите последнюю версию libnuma
display_message "Установка libnuma-dev"
install_libnuma

#Установка libopus
display_message "Установка libopus-dev"
install_libopus

#Установка CMAKE
display_message "Установка CMake" | tee logfile
install_cmake

#Установка последней версии libfdk-aac-dev
display_message "Установка fdk-aac" | tee logfile
install_aac

#Установка последней версии YASM
display_message "Установка YASM" | tee logfile
install_yasm

#Установите последний кодек x265
display_message "Установка libx265-dev" | tee logfile
install_x265

#Установка ffmpeg
display_message "Установка ffmpeg" | tee logfile
install_ffmpeg


#Проведение тестирования
display_message "Проведение тестирования"
testing

echo "СДЕЛАНО!"
sleep 5
Contact GitHub API Training Shop Blog About

Я написал скрипт установки для ffmpeg, скомпилированного с опциями libx265 и AAC.

Он доступен на GitHub

#!/bin/bash
source installer.cfg
function display_message {

    clear
    echo $1
    sleep 5
}

function update_sys {
    display_message "Обновление Ubuntu с помощью apt-get update"
    apt-get update
    display_message "Установка необходимых пакетов"
    apt-get install -y autoconf automake build-essential mercurial git libarchive-dev fontconfig checkinstall
    apt-get install -y libass-dev libfreetype6-dev libsdl1.2-dev libtheora-dev libgnutls-dev
    apt-get install -y libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo libtool libva-dev
    apt-get install -y libbs2b-dev libcaca-dev libopenjpeg-dev librtmp-dev libvpx-dev libvdpau-dev
    apt-get install -y libwavpack-dev libxvidcore-dev lzma-dev liblzma-dev zlib1g-dev cmake-curses-gui
    apt-get install -y libx11-dev libxfixes-dev libmp3lame-dev libx264-dev #libx264-146 libx264-dev
    sleep 5
}
function install_libnuma {
    NUMA_LIB="numactl-2.0.11.tar.gz"
    NUMA_PATH=$(basename ${NUMA_LIB} .tar.gz)
    cd ${SOURCE_PREFIX}
    if [ ! -d "${NUMA_PATH}" ]; then
            wget -O ${NUMA_LIB} "ftp://oss.sgi.com/www/projects/libnuma/download/${NUMA_LIB}"
    fi
    tar xfzv ${NUMA_LIB}
    cd ${NUMA_PATH}
    ./configure
    make
    make install
    sleep 5
}
function install_libopus {

    OPUS_LIB=opus-1.1.2.tar.gz
        OPUS_PATH=$(basename ${OPUS_LIB} .tar.gz)
        cd ${SOURCE_PREFIX}
        if [ ! -d "${OPUS_PATH}" ]; then
                wget http://downloads.xiph.org/releases/opus/${OPUS_LIB}
        fi
        tar xzvf ${OPUS_LIB}
        cd ${OPUS_PATH}
        ./configure --prefix="${INST_PREFIX}" --disable-shared
        make
        make install
    make check
        make clean

    sleep 5
}
function install_cmake {
        cd ${SOURCE_PREFIX}
    #Требуется дальнейшее тестирование
    if [ ! -d "CMake" ]; then
            git clone https://github.com/Kitware/CMake
    fi
    cd CMake
        ./bootstrap --prefix="/usr/local"
        make
        make install
    sleep 5
}
function install_aac {
    AAC_LIB="fdk-aac.tar.gz"
    cd ${SOURCE_PREFIX}
    if [ ! -d "mstorsjo-fdk-aac*" ]; then
            wget -O ${AAC_LIB} https://github.com/mstorsjo/fdk-aac/tarball/master
    fi
    tar xzvf ${AAC_LIB}
    cd mstorsjo-fdk-aac*
    autoreconf -fiv
    ./configure --prefix="${INST_PREFIX}" --disable-shared
    make
    make install
    make distclean
    sleep 5
}
function install_yasm {
    cd ${SOURCE_PREFIX}
    if [ ! -d "yasm" ]; then
            git clone git://github.com/yasm/yasm.git
    fi
    cd yasm
    ./autogen.sh
}
function install_x265 {
    cd ${SOURCE_PREFIX}
    if [ ! -d "x265" ]; then
            hg clone https://bitbucket.org/multicoreware/x265
    fi
    cd x265/build/linux
    cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${INST_PREFIX}" ../../source
    make
    make install
    sleep 5
}
function install_ffmpeg {

    cd ${SOURCE_PREFIX}
    if [ ! -d "ffmpeg" ]; then
            git clone git://source.ffmpeg.org/ffmpeg.git
    fi

    cd ffmpeg

    PKG_CONFIG_PATH="${INST_PREFIX}/pkgconfig" \
    ./configure --prefix="${INST_PREFIX}" \
            --pkg-config-flags="--static" \
            --extra-cflags="-I${INST_PREFIX}/include"  \
            --extra-ldflags="-L${INST_PREFIX}/lib" \
            --enable-gpl \
            --enable-libass \
            --enable-libbluray \
            --enable-fontconfig \
            --enable-bzlib \
            --enable-gnutls \
            --enable-libbs2b \
            --enable-libcaca \
            --enable-zlib \
            --enable-libopenjpeg \
            --enable-librtmp \
            --enable-libvo-amrwbenc \
            --enable-libwavpack \
            --enable-lzma \
            --enable-libfdk-aac \
            --enable-libfreetype \
            --enable-libmp3lame \
            --enable-libopus \
            --enable-libtheora \
            --enable-libvpx  \ 
            --enable-libx264 \ 
            --enable-libx265 \
            --enable-nonfree \
            --enable-version3
    make
    make install
    sleep 5
}
function testing {
    cd ${SOURCE_PREFIX}
    "${INST_PREFIX}"/bin/ffmpeg -i ${TEST_VID} -c:v libx265 -c:a aac test.mp4
    if [ $? -eq 0 ]; then
            echo "ТЕСТ ПРОЙДЕН!"
    else
            echo "ТЕСТ НЕ ПРОЙДЕН! СОДЕРЖИТ ОШИБКИ!"
            exit
    fi
    sleep 5
}

display_message "Обновление системы Ubuntu"
update_sys

#if [ ! -d ${SOURCE_PREFIX} ]; then

#   mkdir ${SOURCE_PREFIX}
#fi

if [ ${SOURCE_PREFIX} != "/usr" ]; then
    mkdir ${INST_PREFIX}
fi
#Установите последнюю версию libnuma
display_message "Установка libnuma-dev"
install_libnuma

#Установка libopus
display_message "Установка libopus-dev"
install_libopus

#Установка CMAKE
display_message "Установка CMake" | tee logfile
install_cmake

#Установка последней версии libfdk-aac-dev
display_message "Установка fdk-aac" | tee logfile
install_aac

#Установка последней версии YASM
display_message "Установка YASM" | tee logfile
install_yasm

#Установите последний кодек x265
display_message "Установка libx265-dev" | tee logfile
install_x265

#Установка ffmpeg
display_message "Установка ffmpeg" | tee logfile
install_ffmpeg

#Проведение тестирования
display_message "Проведение тестирования"
testing

echo "СДЕЛАНО!"
sleep 5

При компиляции пакета вам нужно передать переключатель, чтобы включить определённую функцию.
команда ниже скомпилирует пакет с x264 и x265

./configure –enable-gpl –enable-libx264 –enable-libx265

Я тестировал на Ubuntu 24.10 и Plucky (вероятно, 25.04), и FFmpeg уже имеет поддержку HEVC, как для декодирования, так и для кодирования.

Ответ или решение

Компиляция FFmpeg с поддержкой x265 на операционной системе Ubuntu может вызвать определенные затруднения, но, следуя правильным инструкциям, можно добиться необходимого результата.

Теория

FFmpeg — это мощный инструмент для обработки аудио и видео, поддерживающий множество кодеков. Для кодирования видео в формат H.265 (HEVC) FFmpeg использует библиотеку libx265. Эта библиотека предлагает современный уровень сжатия и качество видео, однако требует правильной конфигурации при сборке FFmpeg.

Если вы столкнулись с проблемой отсутствия поддержки x265 на Ubuntu, вероятно, это связано с тем, что при сборке FFmpeg не были учтены необходимые флаги для включения libx265 или не была установлена сама библиотека x265. На Windows можно легко использовать предварительно собранные бинарные файлы, но на Linux часто требуется ручная компиляция с соответствующими зависимостями.

Пример

Ваше текущее состояние компиляции показывает, что ваш FFmpeg поддерживает только декодирование HEVC, что видно из вывода команды:

D.V.L. hevc                 H.265 / HEVC (High Efficiency Video Coding)

Здесь D обозначает поддержку декодирования, а отсутствие E показывает, что кодирование не поддерживается.

Для исправления этой ситуации необходимо:

  1. Установить все необходимые зависимости и библиотеки, включая libx265.
  2. Убедиться, что установка x265 выполнена правильно, и библиотека доступна для FFmpeg.
  3. Пересобрать FFmpeg с правильными флагами, включающими поддержку libx265.

Реализация

Ниже приведен порядок действий для успешной компиляции FFmpeg с поддержкой x265 на Ubuntu:

  1. Установка зависимостей: Начнем с обновления вашего репозитория и установки необходимых пакетов. Откройте терминал и введите:

    sudo apt-get update
    sudo apt-get install autoconf automake build-essential libtool pkg-config \
       libx265-dev libfdk-aac-dev libmp3lame-dev libopus-dev libvorbis-dev \
       libvpx-dev libx264-dev yasm cmake libnuma-dev
  2. Установка x265: В большинстве случаев x265 можно установить из стандартных репозиториев Ubuntu. Если требуется последняя версия, загрузите исходный код и соберите самостоятельно:

    hg clone https://bitbucket.org/multicoreware/x265
    cd x265/build/linux
    cmake -G "Unix Makefiles" ../../source
    make
    sudo make install
  3. Компиляция FFmpeg: Убедитесь, что source FFmpeg доступен, и выполните конфигурацию с нужными опциями:

    git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
    cd ffmpeg
    ./configure --prefix=/usr/local --pkg-config-flags="--static" \
       --extra-cflags="-I/usr/local/include" --extra-ldflags="-L/usr/local/lib" \
       --enable-gpl --enable-libx264 --enable-libx265 --enable-libfdk-aac \
       --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx \
       --enable-nonfree --enable-version3
    make
    sudo make install
  4. Проверка успешной сборки: После успешного завершения сборки, можно проверить поддержку x265 командой:

    ffmpeg -codecs | grep -i 265

    В выводе должна присутствовать строка с E в позициях, указывающих на поддержку кодирования:

    DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) (encoders: libx265)

Эти шаги помогут вам собрать версию FFmpeg с полной поддержкой кодека h265 на Ubuntu. Если вы согласны использовать предварительно собранные версии для тестирования, можно добавить ppa:motumedia/ffmpeg-daily в ваши источники, однако, стоит помнить, что эти версии предназначены для тестирования и могут не быть стабильными для продакшн-систем.

Оцените материал
Добавить комментарий

Капча загружается...