VPF(视频处理框架)的目的是在使用Python处理视频时利用NVIDIA GPU的简单而强大的工具。VPF利用NVIDIA Video Codec SDK来提高灵活性和性能,并为开发人员提供Python固有的易用性。
VPF是需要自己编译的python库,github也提供了编译步骤 https://github.com/NVIDIA/VideoProcessingFramework/wiki/Building-from-source
以下是我的编译过程及遇到的问题解决方法。
目录
1.环境
系统:ubuntu18
nvcc: 10.2
ffmpeg:4.2
Video Codec SDK:11.0.10
2.编译ffmpeg
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
mkdir -p $(pwd)/build_x64_release_shared
./configure \
--prefix=$(pwd)/build_x64_release_shared \
--disable-static \
--disable-stripping \
--disable-doc \
--enable-shared
make -j -s -Wl,-Bsymbolic && make install
3.下载Video Codec SDK
https://developer.nvidia.com/nvidia-video-codec-sdk/download
4.编译VPF
cmake参数需要指定
git clone https://github.com/NVIDIA/VideoProcessingFramework.git
cd VideoProcessingFramework
export INSTALL_PREFIX=$(pwd)/install
mkdir -p install
mkdir -p build
cd build
# If you want to generate Pytorch extension, set up corresponding CMake value GENERATE_PYTORCH_EXTENSION
cmake .. \
-DFFMPEG_DIR:PATH="$PATH_TO_FFMPEG" \
-DVIDEO_CODEC_SDK_DIR:PATH="$PATH_TO_SDK" \
-DGENERATE_PYTHON_BINDINGS:BOOL="1" \
-DCMAKE_INSTALL_PREFIX:PATH="$INSTALL_PREFIX"
# 可选参数
# -DGENERATE_PYTORCH_EXTENSION:BOOL="1" \
# -DPYTHON_LIBRARY=/home/user/anaconda3/lib/libpython3.7m.so \
make && make install
Done!
error1
编译VPF时报错
libavcodec.a(vc1dsp_mmx.o):
> relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when
> making a shared object; recompile with -fPIC
重新编译编译ffmpeg
./configure --prefix=./build --disable-static --disable-stripping --disable-doc --enable-shared
make -j -s -Wl,-Bsymbolic && make install
error2
如果报错:
nvDec = nvc.PyNvDecoder(encFilePath, gpuID)
ValueError: FFmpegDemuxer: no AVFormatContext provided.
// 在 VideoProcessingFramework/PyNvCodec/TC/src/FFmpegDemuxer.cpp 中的 avformat_open_input()前加上 'av_register_all();'
重新编译即可