Вопрос или проблема
Сегодня я узнал, что 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.
#!/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
показывает, что кодирование не поддерживается.
Для исправления этой ситуации необходимо:
- Установить все необходимые зависимости и библиотеки, включая libx265.
- Убедиться, что установка x265 выполнена правильно, и библиотека доступна для FFmpeg.
- Пересобрать FFmpeg с правильными флагами, включающими поддержку libx265.
Реализация
Ниже приведен порядок действий для успешной компиляции FFmpeg с поддержкой x265 на Ubuntu:
-
Установка зависимостей: Начнем с обновления вашего репозитория и установки необходимых пакетов. Откройте терминал и введите:
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
-
Установка x265: В большинстве случаев x265 можно установить из стандартных репозиториев Ubuntu. Если требуется последняя версия, загрузите исходный код и соберите самостоятельно:
hg clone https://bitbucket.org/multicoreware/x265 cd x265/build/linux cmake -G "Unix Makefiles" ../../source make sudo make install
-
Компиляция 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
-
Проверка успешной сборки: После успешного завершения сборки, можно проверить поддержку 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 в ваши источники, однако, стоит помнить, что эти версии предназначены для тестирования и могут не быть стабильными для продакшн-систем.