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!
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 totranspose
filter inserted. You probably need something likehwdownload,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.)hwmap
which may be a more appropriate filter to use thanhwdownload
+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 (theBurn 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.)