FFmpeg搭配QuickSync无法实现硬件解码的问题求助
FFmpeg搭配QuickSync无法实现硬件解码的问题求助
各位大佬好,我现在遇到个棘手的问题:想用Intel核显的QuickSync实现H264视频的硬件解码转H265编码,但硬件解码一直失败,报错提示:
Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scaler_0'
我用的是FFmpeg官方QuickSync教程里最基础的命令,硬件编码是正常的(这个例子里是软解码):
ffmpeg -v verbose -hwaccel qsv -i VID_20230526_174925.mp4 -c:v hevc_qsv -b:v 5M output.mp4
但换成硬件解码的命令就不行了:
ffmpeg -v verbose -hwaccel qsv -c:v h264_qsv -i VID_20230526_174925.mp4 -f null -
看完整输出我发现,我的视频带有90度旋转的元数据,FFmpeg自动插入了transpose滤镜来处理旋转,但QuickSync硬件解码输出的是qsv格式的硬件内存表面,而软件滤镜(比如auto_scaler_0、transpose)没法直接处理这种硬件格式,导致格式转换失败。
我已经试过各种基础排查了,实在没思路了,有没有大佬能指点一下怎么解决?
附完整FFmpeg输出:
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!
备注:内容来源于stack exchange,提问作者MuchToKnow
相关产品推荐
相关产品推荐

