LINUX.ORG.RU

Прошу помощи со сборкой FFmpeg с NVENC для Debian

 , , , ,


0

1

Нашёл ман по сборке FFmpeg с поддержкой кодека Nvidia NVENC, однако тут описывается локальная сборка, чисто под свою систему. А мне хотелось бы собрать deb-пакеты с FFmpeg с поддержкой NVENC. Товарищи, разбирающиеся в сборке deb-пакетов. Подскажите пожалуйста, как добавить необходимые заголовочные файлы из статьи в дэбианизацию? Или можно как-то обойтись без этого?

Собралось вроде...
Попробую описать. Сначала зарегистрировался тут https://developer.nvidia.com/nvidia-video-codec-sdk, чтобы скачать Video_Codec_SDK_7.0.1.zip
Из архива Video_Codec_SDK_7.0.1/Samples/common/inc/ тупо скопировал все файлы в /usr/include (ибо использовал pbuilder/chroot с подготовленным окружением для своих сборок => не жалко)
Скачал исходный код и нужные зависимости ffmpeg из bpo (используя утилиты apt).
Скомпилировал qt-faststart (из поддиректории tools) и переместил получившийся бинарный файл в /usr/bin
Добавил в debian/rules опцию --enable-nvenc
Используя dch меняем changelog
Компилируем и получаем deb-пакеты.
Установил и запустил ffmpeg. Судя по выводу, опция --enable-nvenc есть, но проверить мне корректную работы негде

yrii
()

Есть подозрение, что кодирует оно значительно хуже. Но вот для кодирования картинки с какой-нибудь вебки (в 1 поток ограничение в драйвере, надо больше — покупайте квадро) подходит вполне. Или там скринкаста. Часом не собираешься им нормальное видео кодировать?

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

Спасибо! А ещё такой вопрос: легально ли распространять deb-пакеты с таким FFmpeg, ведь там будут находиться заголовочные файлы от Нвидиевского SDK, а они вроде как несвободны?

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

Тут хз, надо читать лицензии. А так, не вижу проблемы. Есть же спец. секция nonfree. И там будут скомпилированные «штуки» :-) а не сами заголовочные файлы.
Кстати, забыл кое что. При компиляции используется опция --enable-gpl и вроде как попадалось на глаза, что при использовании «не тру» библиотек, нужно добавлять опцию --enable-nonfree.
У меня «английский со словарем». Может что не так перевел/понял.

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

Спасибо. В целом всё понял. Сейчас пытаюсь решить проблему: создал в каталоге debian директорию include, куда закинул нужные заголовки. В debian/rules добавляю опцию --extra-cflags=-Idebian/include однако при сборке, несмотря на задействование этой дириктории - пишет что не может найти эти заголовочные файлы (видимо ищет в /usr/include). Может я как-то не так их добавляю?

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

По-всякому пробовал, он её подключает, судя по тому что я вижу в консоли, но в упор не видит там эти файлы:

cc -D_FORTIFY_SOURCE=2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-strict-overflow -fstack-protector-all -I debian/include -std=c99 -fomit-frame-pointer -fPIC -pthread -I/usr/include/p11-kit-1 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/fribidi -I/usr/include/freetype2 -I/usr/include/bs2b -I/usr/include/freetype2 -I/usr/include/freetype2 -I/usr/include/fribidi -I/usr/include/opus -D_REENTRANT -I/usr/include/p11-kit-1 -I/usr/include/schroedinger-1.0 -I/usr/include/orc-0.4 -c -o /tmp/ffconf.Au9Rryuo.o /tmp/ffconf.8wcMzrSn.c
cc -Wl,-z,relro -L debian/include -Wl,-z,relro -Wl,-z,now -Wl,--as-needed -Wl,-z,noexecstack -o /tmp/ffconf.Rok1MWEz /tmp/ffconf.Au9Rryuo.o -lzvbi -lzmq -lxvidcore -lx265 -lx264 -lwebp -lwavpack -lvpx -lm -lvpx -lm -lvpx -lm -lvpx -lm -lvorbisenc -lvorbis -logg -lvo-amrwbenc -ltwolame -ltwolame -ltheoraenc -ltheoradec -logg -lspeex -lssh -lsoxr -lsnappy -lm -lshine -lschroedinger-1.0 -lrubberband -lrtmp -lz -lgmp -lpulse -lopus -lopenjp2 -DOPJ_STATIC -lopencore-amrwb -lopencore-amrnb -lmp3lame -lmodplug -lgsm -lgme -lstdc++ -lfribidi -lfreetype -lfontconfig -lfreetype -lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite -lcaca -lbs2b -lbluray -lass -lraw1394 -lavc1394 -lrom1394 -liec61883 -lgnutls -lchromaprint -ldl -lcrystalhd -lm -llzma -lbz2 -lz -pthread


cc -D_FORTIFY_SOURCE=2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-strict-overflow -fstack-protector-all -I debian/include -std=c99 -fomit-frame-pointer -fPIC -pthread -I/usr/include/p11-kit-1 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/fribidi -I/usr/include/freetype2 -I/usr/include/bs2b -I/usr/include/freetype2 -I/usr/include/freetype2 -I/usr/include/fribidi -I/usr/include/opus -D_REENTRANT -I/usr/include/p11-kit-1 -I/usr/include/schroedinger-1.0 -I/usr/include/orc-0.4 -E -o /tmp/ffconf.Au9Rryuo.o /tmp/ffconf.8wcMzrSn.c
check_header nvEncodeAPI.h
check_cpp
BEGIN /tmp/ffconf.8wcMzrSn.c
    1   #include <nvEncodeAPI.h>
    2   int x;
END /tmp/ffconf.8wcMzrSn.c
cc -D_FORTIFY_SOURCE=2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fno-strict-overflow -fstack-protector-all -I debian/include -std=c99 -fomit-frame-pointer -fPIC -pthread -I/usr/include/p11-kit-1 -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/fribidi -I/usr/include/freetype2 -I/usr/include/bs2b -I/usr/include/freetype2 -I/usr/include/freetype2 -I/usr/include/fribidi -I/usr/include/opus -D_REENTRANT -I/usr/include/p11-kit-1 -I/usr/include/schroedinger-1.0 -I/usr/include/orc-0.4 -E -o /tmp/ffconf.Au9Rryuo.o /tmp/ffconf.8wcMzrSn.c
/tmp/ffconf.8wcMzrSn.c:1:25: fatal error: nvEncodeAPI.h: No such file or directory
 #include <nvEncodeAPI.h>
                         ^
compilation terminated.
ERROR: nvEncodeAPI.h not found.

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

Я хз. Экспериментировать лень, да и я уже все удалил.
А какая проблема использовать /usr/include/? Из твоего же лога видно, что он без проблем используется для других компонентов.
И да, попробуй указать полный путь к файлам (например, /srv/ffmpeg/debian/include).

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

Дело в том, что я планирую собирать пакеты в OBS и PPA, и нужно эти заголовочные файлы притащить с дэбианизацией.

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

Получилось! Добавил переменную $(CURDIR), чтобы прописался полный путь, и теперь всё собирается! Спасибо за помощь!

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