LINUX.ORG.RU

libx265 в debian8

 , , , ,


0

1

При очередном обновлении что то произошло и...

Заметил, что разделы реп jessie-updates и jessie-backports больше не существуют на официальных зеркалах. WTF!?

Соответственно пакеты, поставленные из них, помечены как левые. У меня это libx265 и libx265-dev. Ну .не могли же один из основных кодеков взять и выкинуть. Поставлю из другого раздела... А вот хрен! Их таки выкинули, из всех официальных реп. Просто взяли и удалили. В т.ч. уже собраные, работоспособные версии. WTF!?

Ладно, не велика беда. ffmpeg собрал, почему эту либу не соберу? Качаем последнюю версию, проверяем требования в readme. Указан только cmake ветки 2.8.*, при том что даже в 8-м дебе стоит 3.*. И ещё ccmake. Название пакета узнал, поставил, создал make-файлы по инструкции, make и финиш.

rrr@raspberrypi:~/x265_3.0/build$ make
Scanning dependencies of target encoder
[  1%] Building CXX object encoder/CMakeFiles/encoder.dir/analysis.cpp.o
*** Error in `/usr/bin/c++': double free or corruption (!prev): 0x01eda830 ***
Aborted
encoder/CMakeFiles/encoder.dir/build.make:62: ошибка выполнения рецепта для цели «encoder/CMakeFiles/encoder.dir/analysis.cpp.o»
make[2]: *** [encoder/CMakeFiles/encoder.dir/analysis.cpp.o] Ошибка 134
CMakeFiles/Makefile2:262: ошибка выполнения рецепта для цели «encoder/CMakeFiles/encoder.dir/all»
make[1]: *** [encoder/CMakeFiles/encoder.dir/all] Ошибка 2
Makefile:127: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2 

И ещё одна ошибка, суть в том что /usr/bin/c++ не знает опции -mstackrealign (стандартная оптимизация, включена по умолчанию начиная с 4.4, штатная версия 4.9.2).

Гуглю, не нахожу понятного объяснения или решения, но вот здесь https://tvheadend.org/boards/5/topics/34652 упоминается что то похожее на мой случай. Вроде как libx265 внезапно перестал собираться по вине компилятора, хз почему и пересоберите всё без него... WTF!?

Да, собираю на RPi3, raspbian 8, armhf. Странно то, что cmake пихает опцию -mstackrealign, хотя вроде бы правильно определил архитектуру arm7l. Каких либо иных arm-специфичных проблем у libx265 не упоминается, так что не думаю что архитектура важна.

★★★★★

Последнее исправление: kirill_rrr (всего исправлений: 1)

Ответ на: комментарий от Deleted

Думаю все интересовавшиеся кодированием видео понимают. h265 это кодек, он же HEVEC. А libx265 это свободная реализация этого кодека в виде библиотеки, подключаемой к плеерам и кодировщикам.

Аналогично с h264, только там дохрена реализаций было. mpeg4, divx, xvid, libx264 и вероятно ещё какие то, и между собой они не совместимы чуть ли не до такой степени, что считаются отдельными кодеками.

А связь vp8, vp9 и libx265 для меня не понятна. За кодирование vp8/9 отвечает libvpx.

kirill_rrr ★★★★★
() автор топика
Ответ на: комментарий от kirill_rrr

h264, только там дохрена реализаций было. mpeg4, divx, xvid, libx264

Ты всё продолжаешь жечь. Это не реализации, а разные форматы вооще.

anonymous
()
Ответ на: комментарий от anonymous

Кодеки divx, xvid и h264 достаточно совместимы между собой чтобы читаться с вероятностью 99%. Вроде как трюк с простой подменой тега «кодировщик» срабатывает очень часто если плеер сказал «не знаю такого кодека». Знаю что с mpeg4 всё сложнее, но вроде бы просто потому что он был исходным форматом для всего семейства.

kirill_rrr ★★★★★
() автор топика
Последнее исправление: kirill_rrr (всего исправлений: 1)
Ответ на: комментарий от hizel

нет, не используется, вы подтвердили, что у вас mpv привязан к x265 и только

Действительно, если удалить libx265.so, то плееры не играют вообще НИЧЕГО. Это нарушает их работу. А вообще от libx265 много что зависит, в том числе ffmpeg и libavcodec.

Как тогда узнать кто декодер? Я подозреваю libavcodec, а он может использовать другие либы.

emmanuel
()
Ответ на: комментарий от kirill_rrr

DivX, XviD части стандарта MPEG4 ASP и совместимы. H264 часть стандарта MPEG4 AVC, этот формат новее и несовместим с ASP.

emmanuel
()
Ответ на: комментарий от kirill_rrr

Мне нужно было декодировать vp9, а ffmpeg сказал что не может, потому что отсутствует libx265

В Debian Stretch libavcodec тоже зависит от libx265. А в Jessie такой зависимости нет.

emmanuel
()
Ответ на: комментарий от emmanuel

Посмотреть исходники ffmpeg, подозрительный вы наш. Если туго с сишечкой, возьмите ffmpeg исходники с официального сайта, распакуйте, запустите configure в системе без libx265-dev и посмотрите какие декодеры будет собирать ffmpeg.

hizel ★★★★★
()
Ответ на: комментарий от iZEN

ninja-1.9.0.

Ненужна, только cmake-3.14.5 и nasm-2.14.02

Deleted
()
Ответ на: комментарий от emmanuel

Нет, не рарушает. Собрал ffmpeg без libx264, да и вообще без всего вообще - h264 декодируется.

Где твой бог теперь?

LD_LIBRARY_PATH=/home/xxx/ff/lib ldd ~/ff/bin/ffmpeg 
	linux-vdso.so.1 (0x00007ffe97936000)
	libavfilter.so.7 => /home/xxx/ff/lib/libavfilter.so.7 (0x0000152ae598d000)
	libavformat.so.58 => /home/xxx/ff/lib/libavformat.so.58 (0x0000152ae591f000)
	libavcodec.so.58 => /home/xxx/ff/lib/libavcodec.so.58 (0x0000152ae5786000)
	libavutil.so.56 => /home/xxx/ff/lib/libavutil.so.56 (0x0000152ae5718000)
	libm.so.6 => /usr/lib/libm.so.6 (0x0000152ae55d2000)
	libpthread.so.0 => /usr/lib/libpthread.so.0 (0x0000152ae55af000)
	libc.so.6 => /usr/lib/libc.so.6 (0x0000152ae53ec000)
	libdl.so.2 => /usr/lib/libdl.so.2 (0x0000152ae53e7000)
	/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x0000152ae5a15000)
anonymous
()
Ответ на: комментарий от emmanuel

А вот ffmpeg целый месяц отлично работал со звуком и h264 в обе стороны без libx265. Не так уж сильно он на неё и завязан.

kirill_rrr ★★★★★
() автор топика
Ответ на: комментарий от iZEN

Внешние библиотеки там нужны только для кодирования в основном.

anonymous
()
Ответ на: комментарий от anonymous

Речь шла про удаление бинарников в убунте, причем тут бог, я атеист и в исходники вообще не лазил. Так в убунте собрали, что удаление одного бинарного файла все ломает.

anonymous
()
Ответ на: комментарий от kirill_rrr

Я говорил про deb зависимости. От libx265 в современных системах туева хуча зависит, вплоть до последнего плеера. Попробуй удалить пакет и посмотри, что он потащит за собой.

Debian 8 несовременная система и libx265 там опциональный, из бэкпортов.

anonymous
()
Ответ на: комментарий от anonymous

Почему вы все такие тугие как американцы? Я удалил бинарный установленный файл /usr/lib/i386-linux-gnu/libx265.so.79 чтобы посмотреть будут ли плееры (а MPV и VLC используют ffmpeg компоненты) играть VP9 без этого файла.

Они не стали играть VP9. Но они не стали играть не только VP9, а вообще все форматы, потому что эта библиотека обязательна для запуска (даже если она не используется). Без нее нарушается целостность.

Это не значит, что она используется для декодирования, это мы уже выяснили. Почему я не полез в сырцы? Вот мне делать больше нечего.

На всякий случай расскажу как проверить deb зависимости и установленные файлы: Установить Synaptic

sudo apt-get install synaptic
Synaptic - Поиск - libx265 - левая кнопка мыши по «установленному» пакету - Свойства - Зависимости/установленные файлы. Там есть еще пункт «обратные зависимости». Это не то, от чего зависит libx265. Это те, кто от него зависит (список неполный, потому что там цепочка будет разрастаться).

Я понимаю, что лето, каникулы и лор опустел, но мозг включать то тоже нужно.

anonymous
()
Ответ на: комментарий от anonymous

обязательна для запуска

Нет, не обязательна. Выше я постил ldd собранного без нее рабочего ffmpeg.

целостность

Какая ещё «целостность»?

anonymous
()
Ответ на: комментарий от anonymous

Они не стали играть VP9. Но они не стали играть не только VP9, а вообще все форматы, потому что эта библиотека обязательна для запуска (даже если она не используется). Без нее нарушается целостность.

Ну, о'кей. Если ffmpeg собран с разделяемой библиотекой и перестаёт нормально работать при её удалении, то что из этого следует-то? Так и задумано!©

Большую гибкость обеспечивают операционные системы, где пользователю легче пересобирать установленные бинарные пакеты из исходников с нужными ему опциями. Например, FreeBSD позволяет пересобрать порт ffmpeg без массы ненужных библиотек и оставить его при этом работоспособным.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от anonymous

Пакетные зависимости это одно, их при желании можно игнорировать. Вся темя о зависимостях собственно бинарника. Он ведь мог запуститься, запросить библиотеку, не найти и вывалиться с ошибкой сразу. А он месяц работал молча пока с кодеками нового поколения не встретился, и только тогда начал ругаться.

kirill_rrr ★★★★★
() автор топика
Ответ на: комментарий от kirill_rrr

На Jessie собрано немного по другому. Но вот это вот

Он месяц работал молча пока с кодеками нового поколения не встретился, и только тогда начал ругаться
Мне нужно было декодировать vp9, а ffmpeg сказал что не может, потому что отсутствует libx265

странно. Может знающие люди подскажут как так, для декодирования vp9 требуется x265 encoder? Но меня смущает:

Пруф: нужно сделать собственную сборку ffmpeg (запускается и работает без установки), потом выпилить libx265 и libx265-dev из дистрибутива и попробовать без них перекодировать

А если без сборок на родном ffmpeg'е дебиана и без бэкпортов? Придется запускать и проверять в Live. Сдается мне требование libx265 является особенностью сборки как в примере выше, то есть не для декода или чей-то зависимостью.

anonymous
()
Ответ на: комментарий от anonymous

Если бы разработчики ffmpeg использовали dlopen() вместо прямой линковки, то он бы запустился даже дефолтный из дебиана после твоего удаления библиотеки.

Хотя она была бы ему нужна (для КОДирования), он бы запустился без неё.

Так что твое удаление не показатель.

anonymous
()
Ответ на: комментарий от emmanuel

В принципе, если x265 только кодер, то логично и что libx265 только кодер. Какое они имеют отношение к декоду?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.