
我正在嘗試在 Debian 9.3 上編譯具有 Nvidia Cuda 支援的 FFMPEG。參數,我正在使用的:
--enable-cuda --enable-cuvid --enable-nvenc --extra-cflags=-I/usr/local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-gpl --enable-libx264 --disable-x86asm --enable-libx265 --enable-libfdk-aac --enable-nonfree
Nvidia Cuda 及其驅動程式已安裝。當我嘗試配置 ffmpeg 時,它說:
ERROR: cuvid requested, but not all dependencies are satisfied: cuda
較新的 ffmpeg 將顯示類似的、重新措詞的訊息:
ERROR: cuda requested, but not all dependencies are satisfied: ffnvcodec
我完全不知道為什麼會遇到這個問題,因為我正在ffmpeg
所有的轉碼伺服器上進行編譯。
答案1
NVIDIA 標頭已從 FFmpeg 程式碼庫移至獨立儲存庫提交中27cbbbb。從提交訊息:
外部標頭在 ffmpeg 程式碼庫中不再受歡迎,因為它們增加了維護負擔。然而,在 NVidia 的情況下,普通標頭需要進行一些修改才能在 ffmpeg 中使用,因此我們仍然提供它們,但在單獨的儲存庫中。
FFmpeg 現在對 nvidias CUDA/nvenc/nvdec 相關函式庫使用自己稍微修改過的執行時間載入程式。如果您從配置中收到錯誤,抱怨缺少 ffnvcodec,這就是你所需要的。
它有
Makefile
一個安裝目標:make install PREFIX=/usr
FFmpeg 將會尋找其
pkg-config
名為ffnvcodec.pc
.確保它在您的PKG_CONFIG_PATH
.
編譯 FFmpeg NVIDIA 標頭(“ffnvcodec”):
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make
sudo make install
現在ffmpeg
照常編譯。標頭應該會自動檢測。如果沒有則聲明指向FFmpeg運行時所在PKG_CONFIG_PATH
路徑。例如:ffnvcodec.pc
configure
PKG_CONFIG_PATH="/path/to/lib/pkgconfig" ./configure
答案2
我遇到了類似的錯誤,但事實證明,這是由於缺少工具包配置引起的。在 Ubuntu 16.04 上你可以執行
apt-get install pkgconf
並檢查遺失的包裹是否真的遺失:
pkgconf --list-all | grep package-name
答案3
這可能是由於 nv-codec-headers 和 FFmpeg 之間的版本不匹配造成的。原因:我遵循了將 nv-codec-headers 固定在 n8.2.15.8 的特定說明,但將 FFmpeg 保留在 master 上。
從標籤 n4.4 開始 FFmpeg 需要該CUVIDAV1PICPARAMS
結構。僅在以標籤 n11.0.10.0 開頭的 nv-codec-headers 的 dynlink_cuviddec.h 中找到。
我在 Ubuntu 18.04LTS nvidia-docker 映像中成功配置/編譯了 CUDA 11.4 的 nv-codec-headersn11.1.5.1
和 FFmpeg n5.1.2
(需要附加參數/env.vars.:
PKG_CONFIG_PATH="<path_to_ffnvcodec.pc_folder>"
和--nvccflags="-gencode arch=compute_52,code=sm_52 -O2"
)
答案4
https://github.com/FFmpeg/FFmpeg/commit/27cbbbb33f259de7c795d2b75edf7b240f0f82e6
我發現這個提交程式碼發生錯誤。使用之前的提交代碼
複製https://github.com/FFmpeg/FFmpeg.git
git結帳7414d0bda7763f9bd69c26c068e482ab297c1c96
git重置——硬