I need to compile FFMPEG with MSDK support. There are no official instructions for openSUSE. I install the libmfx package from zypper and yet I get the error “libmfx not found”. I detail the steps I followed below.
I am doing the test in a container with Distrobox.
distrobox create --image registry.opensuse.org/opensuse/tumbleweed:latest --name opensuse_root --root && distrobox enter --root opensuse_root
First I install the dependencies that I deem appropriate from zypper:
sudo zypper install autoconf automake bzip2 cmake-full freetype2-devel gcc gcc-c++ git libfreetype6 libmfx libmp3lame0 libtool libvorbis make mingw64-zlib1 nasm pkgconf yasm
I compile another dependencies that I can’t get from zypper:
### libx264
mkdir -p ~/ffmpeg_sources ~/bin && cd ~/ffmpeg_sources && \
git clone --branch stable --depth 1 https://code.videolan.org/videolan/x264.git && cd x264 && \
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic && \
make && make install
### libx265
mkdir -p ~/ffmpeg_sources ~/bin && cd ~/ffmpeg_sources && \
git clone --branch stable --depth 2 https://bitbucket.org/multicoreware/x265_git && cd x265_git/build/linux && \
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source && \
make && make install
### libvpx
mkdir -p ~/ffmpeg_sources ~/bin && cd ~/ffmpeg_sources && \
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && cd libvpx && \
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
make && make install
### libfdk-aac
mkdir -p ~/ffmpeg_sources ~/bin && cd ~/ffmpeg_sources && \
git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && cd fdk-aac && autoreconf -fiv && \
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
make && make install
I check:
sudo find ~/ffmpeg_build -name "*.pc"
~/ffmpeg_build/lib/pkgconfig/x264.pc
~/ffmpeg_build/lib/pkgconfig/x265.pc
~/ffmpeg_build/lib/pkgconfig/vpx.pc
~/ffmpeg_build/lib/pkgconfig/fdk-aac.pc
Now that, in principle, I have everything that is needed, I proceed with FFMPEG:
mkdir -p ~/ffmpeg_sources ~/bin && cd ~/ffmpeg_sources && \
curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && tar xjvf ffmpeg-snapshot.tar.bz2 && cd ffmpeg && \
export PATH="$PATH:$HOME/bin" && export PKG_CONFIG_PATH="/usr/lib64/pkgconfig:$HOME/ffmpeg_build/lib/pkgconfig" && \
./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-libs=-lpthread \
--extra-libs=-lm \
--bindir="$HOME/bin" \
--enable-gpl `#libx264 libx265` \
--enable-libfdk_aac `#libfdk_aac` \
--enable-libfreetype `#freetype2-devel` \
--enable-libmfx `#libmfx` \
--enable-libmp3lame `#libmp3lame` \
--enable-libvpx `#libvpx` \
--enable-libx264 `#libx264` \
--enable-libx265 `#libx265` \
--enable-nonfree `#libfdk_aac`
At this point I get the error:
ERROR: libmfx not found
I try to locate the library that the configurator doesn’t find and that I installed using zypper:
sudo find / -name "*libmfx*"
/run/host/usr/share/licenses/libmfx1
/run/host/usr/lib64/mfx/libmfx_h264la_hw64.so
/run/host/usr/lib64/mfx/libmfx_hevc_fei_hw64.so
/run/host/usr/lib64/mfx/libmfx_hevcd_hw64.so
/run/host/usr/lib64/mfx/libmfx_hevce_hw64.so
/run/host/usr/lib64/mfx/libmfx_vp8d_hw64.so
/run/host/usr/lib64/mfx/libmfx_vp9d_hw64.so
/run/host/usr/lib64/mfx/libmfx_vp9e_hw64.so
/run/host/usr/lib64/libmfx-tracer.so.1
/run/host/usr/lib64/libmfx-tracer.so.1.35
/run/host/usr/lib64/libmfx.so.1
/run/host/usr/lib64/libmfx.so.1.35
/run/host/usr/lib64/libmfxhw64.so.1
/run/host/usr/lib64/libmfxhw64.so.1.35
/usr/lib64/mfx/libmfx_h264la_hw64.so
/usr/lib64/mfx/libmfx_hevc_fei_hw64.so
/usr/lib64/mfx/libmfx_hevcd_hw64.so
/usr/lib64/mfx/libmfx_hevce_hw64.so
/usr/lib64/mfx/libmfx_vp8d_hw64.so
/usr/lib64/mfx/libmfx_vp9d_hw64.so
/usr/lib64/mfx/libmfx_vp9e_hw64.so
/usr/lib64/libmfx-tracer.so.1
/usr/lib64/libmfx-tracer.so.1.35
/usr/lib64/libmfx.so.1
/usr/lib64/libmfx.so.1.35
/usr/lib64/libmfxhw64.so.1
/usr/lib64/libmfxhw64.so.1.35
/usr/share/doc/packages/libmfx
/usr/share/licenses/libmfx1
Does not locate any file with *.pc extension!
I will look for all files with the *.pc extension
sudo find / -name "*.pc"
~/ffmpeg_sources/x264/x264.pc
~/ffmpeg_sources/x265_git/build/linux/x265.pc
~/ffmpeg_sources/libvpx/vpx.pc
~/ffmpeg_sources/fdk-aac/fdk-aac.pc
~/ffmpeg_build/lib/pkgconfig/x264.pc
~/ffmpeg_build/lib/pkgconfig/x265.pc
~/ffmpeg_build/lib/pkgconfig/vpx.pc
~/ffmpeg_build/lib/pkgconfig/fdk-aac.pc
/run/host/usr/share/pkgconfig/shared-mime-info.pc
/run/host/usr/share/pkgconfig/systemd.pc
/run/host/usr/share/pkgconfig/udev.pc
/run/host/usr/share/pkgconfig/dracut.pc
/run/host/home/user/ffmpeg_sources/x264/x264.pc
/run/host/home/user/ffmpeg_sources/x265_git/build/linux/x265.pc
/run/host/home/user/ffmpeg_sources/libvpx/vpx.pc
/run/host/home/user/ffmpeg_sources/fdk-aac/fdk-aac.pc
/run/host/home/user/ffmpeg_build/lib/pkgconfig/x264.pc
/run/host/home/user/ffmpeg_build/lib/pkgconfig/x265.pc
/run/host/home/user/ffmpeg_build/lib/pkgconfig/vpx.pc
/run/host/home/user/ffmpeg_build/lib/pkgconfig/fdk-aac.pc
/usr/lib64/pkgconfig/libcrypt.pc
/usr/lib64/pkgconfig/libxcrypt.pc
/usr/lib64/pkgconfig/libbrotlicommon.pc
/usr/lib64/pkgconfig/libbrotlidec.pc
/usr/lib64/pkgconfig/libbrotlienc.pc
/usr/lib64/pkgconfig/zlib.pc
/usr/lib64/pkgconfig/bzip2.pc
/usr/lib64/pkgconfig/freetype2.pc
/usr/share/pkgconfig/xkeyboard-config.pc
/usr/share/pkgconfig/shared-mime-info.pc
/usr/share/pkgconfig/systemd.pc
/usr/share/pkgconfig/adwaita-icon-theme.pc