다음을 사용하여 NVENC 인식 obs-studio를 구축할 수 있도록 NVENC 인식 ffmpeg를 구축하려고 합니다.이것은 가이드입니다. 많은 고민 끝에 모든 종속성을 해결했고 이제 이 시점에 이르렀습니다.~해야 한다규칙 파일을 편집하여 ffmpeg를 컴파일할 수 있으면 좋을 것입니다. 그러나 나의 믿을 수 있는 단말기는 나에게 다음과 같은 내용을 내보냈습니다.
이것은 내 ffmpeg/debian/rules 파일입니다:
#!/usr/bin/make -f
export V=1
# sets DEBIAN_VERSION variable
include /usr/share/dpkg/pkg-info.mk
# Get the Debian version revision:
DEB_REVISION := $(word 2, $(subst -, ,$(DEB_VERSION)))
# sets DEB_HOST_* variables
include /usr/share/dpkg/architecture.mk
# Ubuntu ld adds -Bsymbolic-functions by default, but that prevents FFmpeg from building.
export DEB_LDFLAGS_MAINT_STRIP=-Wl,-Bsymbolic-functions
# Package name for the extra flavor.
EXTRA_PKGS := $(shell sed -nr 's/^Package:[[:space:]]*(.*extra[0-9]+)[[:space:]]*$$/\1/p' debian/control)
FLAVORS = standard extra static
# Enable as many features as possible, as long as the result is still GPLv2+ (a GPLv3+ variant is built as libavcodec-extra/libavfilter-extra flavor).
# The following flags (and build-dependencies) are not added, because they would require a libavformat-extra flavor:
# --enable-libsmbclient (libsmbclient-dev [!hurd-i386 !m68k !sparc64])
# The following flags are not added, because the necessary libraries are not in Debian:
# --enable-decklink
# --enable-libcelt (see #676592: removed from Debian as abandoned upstream, replaced by opus)
# --enable-libdcadec
# --enable-libilbc (see #675959 for the RFP bug)
# --enable-libkvazaar
# --enable-libmfx
# --enable-libnut
# --enable-libopenh264
# --enable-libopenmpt
# --enable-libschroedinger (see #845037: removal due to security issues)
# --enable-libutvideo
# --enable-libvidstab (see #709193 for the RFP bug)
# --enable-libxavs
# --enable-libzimg
# The following flags are not added for various reasons:
# * --enable-librtmp: ffmpeg has better built-in RTMP support with listen mode.
# * --enable-libv4l2 [!hurd-any]: This is only needed for very old devices and may cause problems for others.
# Should anyone need it, using LD_PRELOAD pointing on libv4l2 has the same effect.
# * --enable-opencl [!hurd-any]: This is considered an experimental API.
CONFIG := --prefix=/usr \
--extra-version="$(DEB_REVISION)" \
--toolchain=hardened \
--libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \
--incdir=/usr/include/$(DEB_HOST_MULTIARCH) \
--enable-gpl \
--disable-stripping \
--enable-avresample \
--enable-avisynth \
--enable-gnutls \
--enable-ladspa \
--enable-libass \
--enable-libbluray \
--enable-libbs2b \
--enable-libcaca \
--enable-libcdio \
--enable-libebur128 \
--enable-libflite \
--enable-libfontconfig \
--enable-libfreetype \
--enable-libfribidi \
--enable-libgme \
--enable-libgsm \
--enable-libmodplug \
--enable-libmp3lame \
--enable-libopenjpeg \
--enable-libopus \
--enable-libpulse \
--enable-librubberband \
--enable-libshine \
--enable-libsnappy \
--enable-libsoxr \
--enable-libspeex \
--enable-libssh \
--enable-libtheora \
--enable-libtwolame \
--enable-libvorbis \
--enable-libvpx \
--enable-libwavpack \
--enable-libwebp \
--enable-libx265 \
--enable-libxvid \
--enable-libzmq \
--enable-libzvbi \
--enable-omx \
--enable-openal \
--enable-opengl \
--enable-sdl2 \
--enable-nonfree \
--enable-nvenc
# The standard configuration only uses the shared CONFIG.
CONFIG_standard = --enable-shared
# With these enabled, resulting binaries are effectively licensed as GPLv3+.
CONFIG_extra = --enable-shared \
--enable-version3 \
--disable-doc \
--disable-programs \
--enable-libopencore_amrnb \
--enable-libopencore_amrwb \
--enable-libtesseract \
--enable-libvo_amrwbenc
# The static libraries should not be built with PIC.
CONFIG_static = --disable-pic \
--disable-doc \
--disable-programs
# Disable optimizations if requested.
ifneq (,$(filter $(DEB_BUILD_OPTIONS),noopt))
CONFIG += --disable-optimizations
endif
# Respect CC/CXX from the environment, if they differ from the default.
# Don't set them if they equal the default, because that disables autodetection needed for cross-building.
ifneq ($(CC),cc)
CONFIG += --cc=$(CC)
endif
ifneq ($(CXX),g++)
CONFIG += --cxx=$(CXX)
endif
# Some libraries are built only on linux.
ifeq ($(DEB_HOST_ARCH_OS),linux)
CONFIG += --enable-libdc1394 \
--enable-libiec61883
endif
# Some build-dependencies are not installable on some architectures.
ifeq (,$(filter $(DEB_HOST_ARCH),powerpcspe))
CONFIG_extra += --enable-netcdf
endif
# ffmpeg is involed in build-dependency cycles with opencv, x264 and chromaprint, so disable them in stage one.
# Also disable frei0r, which build-depends on opencv.
ifneq ($(filter stage1,$(DEB_BUILD_PROFILES)),)
CONFIG += --disable-frei0r \
--disable-chromaprint \
--disable-libopencv \
--disable-libx264
else
CONFIG += --enable-libopencv \
--enable-frei0r
ifeq (,$(filter $(DEB_HOST_ARCH),powerpcspe))
CONFIG += --enable-libx264
endif
ifeq (,$(filter $(DEB_HOST_ARCH),sh4))
CONFIG += --enable-chromaprint
endif
endif
# Disable altivec optimizations on powerpc, because they are not always available on this architecture.
ifeq ($(DEB_HOST_ARCH),powerpc)
CONFIG += --disable-altivec
# Build an altivec flavor of the libraries on powerpc.
# This works around the problem that runtime cpu detection on powerpc currently does not work,
# because, if altivec is enabled, all files are build with '-maltivec' so that the compiler inserts altivec instructions, wherever it likes.
CONFIG_altivec = --enable-shared \
--enable-altivec \
--disable-doc \
--disable-programs
CONFIG_altivec-extra = $(CONFIG_altivec) $(CONFIG_extra)
FLAVORS += altivec altivec-extra
endif
# Disable assembly optimizations on x32, because they don't work (yet).
ifneq (,$(filter $(DEB_HOST_ARCH),x32))
CONFIG += --disable-asm
endif
# Disable optimizations on mips(el) and some on mips64(el), because they are not always available on these architectures.
ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel mips64 mips64el))
CONFIG += --disable-mipsdsp \
--disable-mipsdspr2 \
--disable-loongson3 \
--disable-mips32r6 \
--disable-mips64r6
endif
ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel))
CONFIG += --disable-mipsfpu
endif
# Set cross-build prefix for compiler, pkg-config...
# Cross-building also requires to manually set architecture/OS.
ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE))
CONFIG += --cross-prefix=$(DEB_HOST_GNU_TYPE)- \
--arch=$(DEB_HOST_ARCH) \
--target-os=$(DEB_HOST_ARCH_OS)
endif
# Use the default debhelper scripts, where possible.
%:
dh $@
# Add configuration options:
override_dh_auto_configure:
$(foreach flavor,$(FLAVORS),mkdir -p debian/$(flavor);)
$(foreach flavor,$(FLAVORS),set -e; echo " *** $(flavor) ***"; cd debian/$(flavor); ../../configure $(CONFIG) $(CONFIG_$(flavor)) || (cat config.log && exit 1); cd ../.. ;)
touch override_dh_auto_configure
# Remove the subdirectories generated for the flavors.
override_dh_auto_clean:
$(foreach flavor,$(FLAVORS),[ ! -d debian/$(flavor) ] || rm -r debian/$(flavor);)
# Create doxygen documentation:
override_dh_auto_build-indep:
dh_auto_build -i --sourcedirectory=debian/standard -- apidoc
# Create the minified CSS files.
lessc debian/missing-sources/ffmpeg-web/src/less/style.less | cleancss > debian/standard/doc/style.min.css
rm override_dh_auto_configure
override_dh_auto_build-arch:
# Copy built object files to avoid building them again for the extra flavor.
# Build qt-faststart here, to make it possible to build with 'nocheck'.
set -e && for flavor in $(FLAVORS); do \
echo " *** $$flavor ***"; \
if echo "$$flavor" | grep -q "extra"; then \
subdir=`[ "$$flavor" = "extra" ] && echo "debian/standard/" || echo "debian/altivec/"`; \
for dir in `cd ./$$subdir; find libavcodec libavdevice libavfilter libavformat libavresample libavutil libpostproc libswscale libswresample -type d`; do \
mkdir -p debian/"$$flavor"/"$$dir"; \
echo "$$subdir$$dir"/*.o | grep -q '*' || cp "$$subdir$$dir"/*.o debian/"$$flavor"/"$$dir"; \
done; \
rm debian/"$$flavor"/libavcodec/allcodecs.o; \
rm debian/"$$flavor"/libavfilter/allfilters.o; \
fi; \
if [ "$$flavor" = "standard" ]; then \
$(MAKE) -C debian/standard tools/qt-faststart; \
fi; \
dh_auto_build -a --sourcedirectory=debian/"$$flavor" || (cat debian/"$$flavor"/config.log && exit 1); \
done
# Set the library path for the dynamic linker, because the tests otherwise don't find the libraries.
override_dh_auto_test-arch:
export LD_LIBRARY_PATH="libavcodec:libavdevice:libavfilter:libavformat:libavresample:libavutil:libpostproc:libswresample:libswscale"; \
dh_auto_test -a --sourcedirectory=debian/standard -- -k
# No tests for indep build.
override_dh_auto_test-indep:
override_dh_auto_install-arch:
dh_auto_install -a --sourcedirectory=debian/standard
ifeq ($(DEB_HOST_ARCH),powerpc)
install -d debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/altivec
install -m 644 debian/altivec/*/*.so.* debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/altivec
endif
dh_auto_install -a --sourcedirectory=debian/extra --destdir=debian/tmp/extra
ifeq ($(DEB_HOST_ARCH),powerpc)
install -d debian/tmp/extra/usr/lib/$(DEB_HOST_MULTIARCH)/altivec
install -m 644 debian/altivec-extra/*/*.so.* debian/tmp/extra/usr/lib/$(DEB_HOST_MULTIARCH)/altivec
endif
# Use the static libraries from the --disable-pic build
install -m 644 debian/static/*/lib*.a debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)
override_dh_auto_install-indep:
dh_auto_install -i --sourcedirectory=debian/standard
override_dh_install:
dh_install $(addprefix -p,$(EXTRA_PKGS)) --sourcedir=debian/tmp/extra
dh_install --remaining-packages
override_dh_makeshlibs:
set -e && for pkg in $(shell dh_listpackages -a) ; do \
case $$pkg in \
ffmpeg|*-dev) \
continue \
;; \
*avcodec*) \
soversion=$$(echo $$pkg | sed -nr 's/^[^0-9]*([0-9]+)$$/\1/p'); \
dh_makeshlibs -p $$pkg -V"libavcodec$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM}) | libavcodec-extra$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM})" \
;; \
*avfilter*) \
soversion=$$(echo $$pkg | sed -nr 's/^[^0-9]*([0-9]+)$$/\1/p'); \
dh_makeshlibs -p $$pkg -V"libavfilter$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM}) | libavfilter-extra$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM})" \
;; \
*) \
dh_makeshlibs -p $$pkg -V \
;; \
esac \
done
# Don't compress the example source code files.
override_dh_compress:
dh_compress -Xexamples
저는 Ubuntu 16.04를 기반으로 하는 Linux Lite 3.2 64비트를 실행하고 있습니다. 나는 기본적으로 이것에 대해 완전히 새로운 것이므로 지침이 필요합니다.
답변1
LXC Ubuntu 16.04 컨테이너에서는 문제 없이 빌드할 수 있습니다.
vi /etc/apt/sources.list
소스 코드 및 백포트 저장소가 추가되었습니다.deb http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse deb http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse deb http://security.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu xenial main restricted universe multiverse deb-src http://archive.ubuntu.com/ubuntu xenial-updates main restricted universe multiverse deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted universe multiverse deb-src http://security.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse
백포트 저장소를 포함하여 종속성 및 빌드 도구를 설치
debhelper
하고 현재 버전을 확인합니다dh-autoreconf
.apt-cache policy ...
apt update apt build-dep ffmpeg apt install git openssl ca-certificates devscripts dh-autoreconf=12~ubuntu16.04.1 debhelper=10.2.2ubuntu1~ubuntu16.04.1 libchromaprint-dev libebur128-dev libleptonica-dev libnetcdf-dev libomxil-bellagio-dev libopenjp2-7-dev librubberband-dev libsdl2-dev libtesseract-dev nasm
소스 코드 다운로드
git clone https://anonscm.debian.org/git/pkg-multimedia/ffmpeg.git
추가할 규칙 파일을 수정
--enable-nonfree
하고--enable-nvenc
cd ffmpeg/ echo 'libva 1 libva1' > debian/shlibs.local
vi debian/rules
:CONFIG :=... --enable-sdl2 \ --enable-nonfree \ --enable-nvenc
그것을 구축
debuild -us -uc -b
이것은결과 데비안 패키지 목록.
새로운 오류 메시지로 OP에 답장하세요.
lintian
결과 패키지를 확인하기만 하고 빌드 프로세스에는 영향을 주지 않는 데비안 패키지용 QC 도구입니다.Now running lintian... E: ffmpeg changes: bad-distribution-in-changes-file unstable W: libavdevice57: virtual-package-depends-without-real-package-depends depends: libgl1 N: 9 tags overridden (8 warnings, 1 info) Finished running lintian.
그러나 오류 메시지를 수정하려는 경우. 이 오류는 Debian 버전용으로 준비된 소스 코드를 복사했기 때문에 발생합니다
unstable
. 우리의 경우에는xenial
Ubuntu 버전 이어야 합니다 . 폴더 내에서 실행ffmpeg/
:dch
새 항목을 추가
debian/changelog
하고 예시로 설정합니다xenial
.ffmpeg (7:3.2.2-1ubuntu1) xenial; urgency=medium * backport to xenial -- root <root@ci2> Wed, 28 Dec 2016 11:24:08 +0000
libavfilter-extra*
대안이며libavfilter*
동일한 시스템에 함께 설치할 수 없습니다. 필요에 따라 선택하시면 됩니다.(모르시면 추가로 설치해주세요)dpkg: regarding libavfilter-extra6_3.2.2-1_amd64.deb containing libavfilter-extra6:amd64: libavfilter-extra6 conflicts with libavfilter6
다음과 같이 저장소에 제공되는 기타 누락된 종속성:
ffmpeg-doc depends on libjs-bootstrap; however: Package libjs-bootstrap is not installed.
다음을 사용하여 다운로드할 수 있습니다.
sudo apt -f install