Question / Help vp9_vaapi video encoder always fails with unclear error message

KozRoss

New Member
I'm trying to record into a webm, using vp9_vaapi for video and libopus for audio. My settings are below:
obs-settings.png

When I hit 'Start Recording', however, I always get the following error:
Code:
An unspecified error occurred while recording.

Failed to open video codec: Invalid argument

I've attached the log file, though it doesn't seem to contain anything relevant. I know that I can use FFmpeg from the command line to do hardware VP9 encoding (since that DRI surface supports it). I'm using an Intel(R) Core(TM) i7-8700K. What additional configuration am I missing?
 

Attachments

  • 2019-07-31 09-34-21.txt
    4.9 KB · Views: 35

KozRoss

New Member
Since no dev has chimed in yet, I did some investigation of my own. If I understand correctly, OBS uses the FFmpeg that I have installed - the following seems to agree:

Code:
[koz@Sebastian ~]$ ldd $(which obs)
    linux-vdso.so.1 (0x00007ffc247f8000)
    libQt5Svg.so.5 => /usr/lib/libQt5Svg.so.5 (0x00007f4fb5c4f000)
    libobs-frontend-api.so.0 => /usr/lib/libobs-frontend-api.so.0 (0x00007f4fb5c47000)
    libavcodec.so.58 => /usr/lib/libavcodec.so.58 (0x00007f4fb46ef000)
    libavutil.so.56 => /usr/lib/libavutil.so.56 (0x00007f4fb45d4000)
    libavformat.so.58 => /usr/lib/libavformat.so.58 (0x00007f4fb4370000)
    libcurl.so.4 => /usr/lib/libcurl.so.4 (0x00007f4fb42e4000)
    libQt5X11Extras.so.5 => /usr/lib/libQt5X11Extras.so.5 (0x00007f4fb42db000)
    libQt5Widgets.so.5 => /usr/lib/libQt5Widgets.so.5 (0x00007f4fb3c44000)
    libobs.so.0 => /usr/lib/libobs.so.0 (0x00007f4fb3b79000)
    libQt5Gui.so.5 => /usr/lib/libQt5Gui.so.5 (0x00007f4fb3597000)
    libQt5Core.so.5 => /usr/lib/libQt5Core.so.5 (0x00007f4fb301f000)
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f4fb2e37000)
    libm.so.6 => /usr/lib/libm.so.6 (0x00007f4fb2cef000)
    libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f4fb2cd5000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f4fb2cb4000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f4fb2af1000)
    /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f4fb5f2f000)
    libz.so.1 => /usr/lib/libz.so.1 (0x00007f4fb28da000)
    libswresample.so.3 => /usr/lib/libswresample.so.3 (0x00007f4fb28ba000)
    libvpx.so.6 => /usr/lib/libvpx.so.6 (0x00007f4fb2596000)
    libwebpmux.so.3 => /usr/lib/libwebpmux.so.3 (0x00007f4fb258a000)
    libwebp.so.7 => /usr/lib/libwebp.so.7 (0x00007f4fb251a000)
    liblzma.so.5 => /usr/lib/liblzma.so.5 (0x00007f4fb22f4000)
    libdav1d.so.1 => /usr/lib/libdav1d.so.1 (0x00007f4fb21db000)
    libopencore-amrwb.so.0 => /usr/lib/libopencore-amrwb.so.0 (0x00007f4fb21c5000)
    libaom.so.0 => /usr/lib/libaom.so.0 (0x00007f4fb1d6e000)
    libgsm.so.1 => /usr/lib/libgsm.so.1 (0x00007f4fb1b62000)
    libmp3lame.so.0 => /usr/lib/libmp3lame.so.0 (0x00007f4fb18e9000)
    libopencore-amrnb.so.0 => /usr/lib/libopencore-amrnb.so.0 (0x00007f4fb18be000)
    libopenjp2.so.7 => /usr/lib/libopenjp2.so.7 (0x00007f4fb1861000)
    libopus.so.0 => /usr/lib/libopus.so.0 (0x00007f4fb1803000)
    libspeex.so.1 => /usr/lib/libspeex.so.1 (0x00007f4fb17e6000)
    libtheoraenc.so.1 => /usr/lib/libtheoraenc.so.1 (0x00007f4fb15a7000)
    libtheoradec.so.1 => /usr/lib/libtheoradec.so.1 (0x00007f4fb138d000)
    libvorbis.so.0 => /usr/lib/libvorbis.so.0 (0x00007f4fb1161000)
    libvorbisenc.so.2 => /usr/lib/libvorbisenc.so.2 (0x00007f4fb0eb8000)
    libx264.so.157 => /usr/lib/libx264.so.157 (0x00007f4fb0bed000)
    libx265.so.176 => /usr/lib/libx265.so.176 (0x00007f4faf96b000)
    libxvidcore.so.4 => /usr/lib/libxvidcore.so.4 (0x00007f4faf65a000)
    libva.so.2 => /usr/lib/libva.so.2 (0x00007f4faf635000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f4faf630000)
    libva-drm.so.2 => /usr/lib/libva-drm.so.2 (0x00007f4faf62b000)
    libva-x11.so.2 => /usr/lib/libva-x11.so.2 (0x00007f4faf623000)
    libvdpau.so.1 => /usr/lib/libvdpau.so.1 (0x00007f4faf61c000)
    libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f4faf4dc000)
    libdrm.so.2 => /opt/amdgpu/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f4faf2c7000)
    libxml2.so.2 => /usr/lib/libxml2.so.2 (0x00007f4faf15f000)
    libbz2.so.1.0 => /usr/lib/libbz2.so.1.0 (0x00007f4faf14c000)
    libmodplug.so.1 => /usr/lib/libmodplug.so.1 (0x00007f4faefc1000)
    libbluray.so.2 => /usr/lib/libbluray.so.2 (0x00007f4faef6f000)
    libgmp.so.10 => /usr/lib/libgmp.so.10 (0x00007f4faeedb000)
    libgnutls.so.30 => /usr/lib/libgnutls.so.30 (0x00007f4faed1a000)
    libssh.so.4 => /usr/lib/libssh.so.4 (0x00007f4faec93000)
    libnghttp2.so.14 => /usr/lib/libnghttp2.so.14 (0x00007f4faec6b000)
    libidn2.so.0 => /usr/lib/libidn2.so.0 (0x00007f4faec4c000)
    libssh2.so.1 => /usr/lib/libssh2.so.1 (0x00007f4faec19000)
    libpsl.so.5 => /usr/lib/libpsl.so.5 (0x00007f4faec06000)
    libssl.so.1.1 => /usr/lib/libssl.so.1.1 (0x00007f4faeb76000)
    libcrypto.so.1.1 => /usr/lib/libcrypto.so.1.1 (0x00007f4fae8a1000)
    libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0x00007f4fae851000)
    libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0x00007f4fae764000)
    libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0x00007f4fae72e000)
    libcom_err.so.2 => /usr/lib/libcom_err.so.2 (0x00007f4fae728000)
    libxcb-xinput.so.0 => /usr/lib/libxcb-xinput.so.0 (0x00007f4fae703000)
    libdbus-1.so.3 => /usr/lib/libdbus-1.so.3 (0x00007f4fae6b9000)
    libX11-xcb.so.1 => /usr/lib/libX11-xcb.so.1 (0x00007f4fae6b4000)
    libpulse.so.0 => /usr/lib/libpulse.so.0 (0x00007f4fae661000)
    libjansson.so.4 => /usr/lib/libjansson.so.4 (0x00007f4fae650000)
    libswscale.so.5 => /usr/lib/libswscale.so.5 (0x00007f4fae5c3000)
    libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f4fae530000)
    libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f4fae4f8000)
    libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x00007f4fae40a000)
    libicui18n.so.64 => /usr/lib/libicui18n.so.64 (0x00007f4fae115000)
    libicuuc.so.64 => /usr/lib/libicuuc.so.64 (0x00007f4fadf3b000)
    libdouble-conversion.so.3 => /usr/lib/libdouble-conversion.so.3 (0x00007f4fadf24000)
    libzstd.so.1 => /usr/lib/libzstd.so.1 (0x00007f4fade7c000)
    libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007f4fadd5a000)
    libsoxr.so.0 => /usr/lib/libsoxr.so.0 (0x00007f4fadae6000)
    libogg.so.0 => /usr/lib/libogg.so.0 (0x00007f4fad8dd000)
    libmvec.so.1 => /usr/lib/libmvec.so.1 (0x00007f4fad8b1000)
    libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f4fad89c000)
    libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0x00007f4fad696000)
    libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f4fad66c000)
    libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x00007f4fad623000)
    libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x00007f4fad555000)
    libp11-kit.so.0 => /usr/lib/libp11-kit.so.0 (0x00007f4fad424000)
    libunistring.so.2 => /usr/lib/libunistring.so.2 (0x00007f4fad0a4000)
    libtasn1.so.6 => /usr/lib/libtasn1.so.6 (0x00007f4fad08e000)
    libnettle.so.7 => /usr/lib/libnettle.so.7 (0x00007f4fad054000)
    libhogweed.so.5 => /usr/lib/libhogweed.so.5 (0x00007f4fad019000)
    librt.so.1 => /usr/lib/librt.so.1 (0x00007f4fad00e000)
    libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x00007f4facfff000)
    libkeyutils.so.1 => /usr/lib/libkeyutils.so.1 (0x00007f4facff8000)
    libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00007f4facfdf000)
    libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f4facfd8000)
    libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f4facfd0000)
    libelogind.so.0 => /usr/lib/libelogind.so.0 (0x00007f4facf47000)
    libpulsecommon-12.2.so => /usr/lib/pulseaudio/libpulsecommon-12.2.so (0x00007f4facec3000)
    libGLX.so.0 => /usr/lib/libGLX.so.0 (0x00007f4face90000)
    libGLdispatch.so.0 => /usr/lib/libGLdispatch.so.0 (0x00007f4facdd2000)
    libgraphite2.so.3 => /usr/lib/libgraphite2.so.3 (0x00007f4facdad000)
    libicudata.so.64 => /usr/lib/libicudata.so.64 (0x00007f4fab369000)
    libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007f4fab2f6000)
    libgomp.so.1 => /usr/lib/libgomp.so.1 (0x00007f4fab2bd000)
    libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007f4fab28e000)
    libuuid.so.1 => /usr/lib/libuuid.so.1 (0x00007f4fab285000)
    libffi.so.6 => /usr/lib/libffi.so.6 (0x00007f4fab27a000)
    libsndfile.so.1 => /usr/lib/libsndfile.so.1 (0x00007f4fab1fe000)
    libasyncns.so.0 => /usr/lib/libasyncns.so.0 (0x00007f4fab1f6000)
    libFLAC.so.8 => /usr/lib/libFLAC.so.8 (0x00007f4fab1b5000)

According to my system-wide FFmpeg installation, it was compiled with the VP9 option:

Code:
[koz@Sebastian ~]$ ffmpeg -version
ffmpeg version n4.2 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.1.0 (GCC)
configuration: --prefix=/usr --disable-debug --disable-static --disable-stripping --enable-fontconfig --enable-gmp --enable-gnutls --enable-gpl --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libdav1d --enable-libdrm --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libiec61883 --enable-libjack --enable-libmodplug --enable-libmp3lame --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libv4l2 --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxcb --enable-libxml2 --enable-libxvid --enable-nvdec --enable-nvenc --enable-omx --enable-shared --enable-version3

This is doubly confirmed by the fact that, using FFmpeg from the command line, I can encode VP9 using hardware encoding (vp9_vaapi) just fine. This doesn't appear to be FFmpeg-related to me.
 

TiZ

New Member
I'm having the same trouble with this. I thought it might be a thing of where you have to pass the -vaapi_device and the hwupload video filter somehow, but I can't find any place for them that works. Having hardware accelerated VP8/VP9 as an encode option for recording would be a great way to save some disk space and gain quality!
 

SkeletonBow

Member
I get the exact same error. Using Webm with VP9, and vorbis or opus selected. No useful information in the log to speculate about what is missing or wrong.
 
Top