1

I'm trying to convert a h264 video to h265 using hardware decoding/decoding of the iGPU (Quicksync). Decoding does not work throwing the error "Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'"

I'm using the most basic example from https://trac.ffmpeg.org/wiki/Hardware/QuickSync. Hardware encoding works (in this example it's software decoded)

ffmpeg -v verbose -hwaccel qsv -i VID_20230526_174925.mp4 -c:v hevc_qsv -b:v 5M output.mp4

but hardware decoding does not work:

ffmpeg -v verbose -hwaccel qsv -c:v h264_qsv -i VID_20230526_174925.mp4 -f null -

I'm out of ideas.

Full ffmpeg output:

ffmpeg version 4.3.6-0+deb11u1 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 10 (Debian 10.2.1-6)
  configuration: --prefix=/usr --extra-version=0+deb11u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
[h264 @ 0x55d0c3b3bfc0] Reinit context to 1920x1088, pix_fmt: yuv420p
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'VID_20230526_174925.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2023-05-26T15:49:25.000000Z
    com.android.version: 10
  Duration: 00:01:22.88, start: 0.000000, bitrate: 14784 kb/s
    Stream #0:0(eng): Video: h264 (High), 1 reference frame (avc1 / 0x31637661), yuv420p(tv, bt709, left), 1920x1080 (1920x1088), 14517 kb/s, SAR 1:1 DAR 16:9, 29.69 fps, 29.75 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      rotate          : 90
      creation_time   : 2023-05-26T15:49:25.000000Z
      handler_name    : VideoHandle
    Side data:
      displaymatrix: rotation of -90.00 degrees
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 191 kb/s (default)
    Metadata:
      creation_time   : 2023-05-26T15:49:25.000000Z
      handler_name    : SoundHandle
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (h264_qsv) -> wrapped_avframe (native))
  Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
[graph_1_in_0_1 @ 0x55d0c3ba67c0] tb:1/48000 samplefmt:fltp samplerate:48000 chlayout:0x3
[format_out_0_1 @ 0x55d0c3b5f100] auto-inserting filter 'auto_resampler_0' between the filter 'Parsed_anull_0' and the filter 'format_out_0_1'
[auto_resampler_0 @ 0x55d0c3b81900] ch:2 chl:stereo fmt:fltp r:48000Hz -> ch:2 chl:stereo fmt:s16 r:48000Hz
[AVHWDeviceContext @ 0x55d0c3bb4640] Trying to use DRM render node for device 0, with matching kernel driver (i915).
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: VA-API version 1.10.0
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: User requested driver 'iHD'
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: Found init function __vaDriverInit_1_10
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: va_openDriver() returns 0
[AVHWDeviceContext @ 0x55d0c3bb4640] Initialised VAAPI connection: version 1.10
[AVHWDeviceContext @ 0x55d0c3bb4640] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 21.1.1 ().
[AVHWDeviceContext @ 0x55d0c3bb4640] Driver not found in known nonstandard list, using standard behaviour.
[AVHWDeviceContext @ 0x55d0c3bbc080] Initialize MFX session: API version is 1.34, implementation version is 1.34
[AVHWDeviceContext @ 0x55d0c3d4d200] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 21.1.1 ().
[AVHWDeviceContext @ 0x55d0c3d4d200] Driver not found in known nonstandard list, using standard behaviour.
[h264_qsv @ 0x55d0c3b59940] Decoder: output is video memory surface
[AVHWDeviceContext @ 0x55d0c3d82640] VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 21.1.1 ().
[AVHWDeviceContext @ 0x55d0c3d82640] Driver not found in known nonstandard list, using standard behaviour.
[h264_qsv @ 0x55d0c3b59940] Decoder: output is video memory surface
[graph 0 input from stream 0:0 @ 0x55d0c3da30c0] w:1920 h:1080 pixfmt:qsv tb:1/90000 fr:119/4 sar:1/1
[auto_scaler_0 @ 0x55d0c3d6f2c0] w:iw h:ih flags:'bicubic' interl:0
[transpose @ 0x55d0c3de3600] auto-inserting filter 'auto_scaler_0' between the filter 'graph 0 input from stream 0:0' and the filter 'transpose'
Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
[AVIOContext @ 0x55d0c3b43140] Statistics: 670703 bytes read, 3 seeks
Conversion failed!
3
  • Is ffmpeg -v verbose -hwaccel qsv -c:v h264_qsv -i VID_20230526_174925.mp4 -f null - the actual full command you ran though? Your log seems to suggest that you were trying to have to transpose filter inserted. You probably need something like hwdownload,format=nv12 earlier in the filter chain for software filters. (I don't have a QSV-capable host to test, but apparently that's the case for VA-API. In my test software decoding end up being faster in such scenario.)
    – Tom Yan
    Jun 9, 2023 at 21:19
  • There's also a hwmap which may be a more appropriate filter to use than hwdownload+hwupload when you want to insert some software filter but hardware decode and encode. (I don't really know how it works or whether that's really what it's for though. Just some wild guess after read this (the Burn subtitles into the video while transcoding case). (Also note that VAAPI is not the same thing as QSV under the ffmpeg context; just that for newer Intel platform you can use either and they ultimately use the same VAAPI driver.)
    – Tom Yan
    Jun 9, 2023 at 22:04
  • It's the full command yes, basically whenever I try to hardware decode (specifying -c:v h264_qsv before the -i-argument) I get this weird error.
    – MuchToKnow
    Jun 9, 2023 at 23:57

1 Answer 1

1

It seems like this is just a good old ffmpeg bug.

The version in Debian bullseye is 4.3.5 and the upcoming version is 5.1.3 and with it all is working as expected except that the image is rotated which should not be the case :-D Cost me a day, super annoying.

1
  • Great to hear you solved it.
    – Blindspots
    Jun 10, 2023 at 1:29

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .