带有 Quicksync 的 FFmpeg:无法硬件解码文件

带有 Quicksync 的 FFmpeg:无法硬件解码文件

我正在尝试使用 iGPU 的硬件解码/解码(Quicksync)将 h264 视频转换为 h265。解码不起作用,并抛出错误“无法在过滤器‘来自流 0:0 的图 0 输入’和过滤器‘auto_scaler_0’支持的格式之间进行转换”

我使用的最基本的例子来自https://trac.ffmpeg.org/wiki/Hardware/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 -

我没什么主意了。

完整的 ffmpeg 输出:

ffmpeg 版本 4.3.6-0+deb11u1 版权所有 (c) 2000-2023 FFmpeg 开发者
  使用 gcc 10(Debian 10.2.1-6)构建
  配置:--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 --启用 libopenjpeg --启用 libopenmpt --启用 libopus --启用 libpulse --启用 librabbitmq --启用 librsvg --启用 librubberband --启用 libshine --启用 libsnappy --启用 libsoxr --启用 libspeex --启用 libsrt --启用 libssh --启用 libtheora --启用 libtwolame --启用 libvidstab --启用 libvorbis --启用 libvpx --启用 libwavpack --启用 libwebp --启用 libx265 --启用 libxml2 --启用 libxvid --启用 libzmq --启用 libzvbi --启用 lv2 --启用 omx --启用 openal --启用 opencl --启用 opengl --启用 sdl2 --启用 pocketsphinx --启用 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] 将上下文重新初始化为 1920x1088,pix_fmt:yuv420p
输入 #0,mov,mp4,m4a,3gp,3g2,mj2,来自‘VID_20230526_174925.mp4’:
  元数据:
    主要品牌:mp42
    次要版本:0
    兼容品牌: isommp42
    创作时间:2023-05-26T15:49:25.000000Z
    com.android.版本: 10
  时长:00:01:22.88,开始:0.000000,比特率:14784 kb/s
    流#0:0(eng):视频:h264(高)、1 个参考帧(avc1 / 0x31637661)、yuv420p(tv、bt709、左)、1920x1080(1920x1088)、14517 kb/s、SAR 1:1 DAR 16:9、29.69 fps、29.75 tbr、90k tbn、180k tbc(默认)
    元数据:
      旋转 :90
      创作时间:2023-05-26T15:49:25.000000Z
      handler_name : 视频句柄
    侧面数据:
      displaymatrix:旋转-90.00度
    流#0:1(eng):音频:aac (LC) (mp4a / 0x6134706D),48000 Hz,立体声,fltp,191 kb/s(默认)
    元数据:
      创作时间:2023-05-26T15:49:25.000000Z
      handler_name :声音处理
流映射:
  流 #0:0 -> #0:0 (h264 (h264_qsv) -> wrapped_avframe (本机))
  流 #0:1 -> #0:1 (aac (原生) -> pcm_s16le (原生))
按 [q] 停止,按 [?] 获取帮助
[graph_1_in_0_1 @ 0x55d0c3ba67c0] tb:1/48000 samplefmt:fltp 采样率:48000 chlayout:0x3
[format_out_0_1 @ 0x55d0c3b5f100] 在过滤器“Parsed_anull_0”和过滤器“format_out_0_1”之间自动插入过滤器“auto_resampler_0”
[auto_resampler_0 @ 0x55d0c3b81900] ch:2 chl:立体声 fmt:fltp r:48000Hz -> ch:2 chl:立体声 fmt:s16 r:48000Hz
[AVHWDeviceContext @ 0x55d0c3bb4640] 尝试使用设备 0 的 DRM 渲染节点,并匹配内核驱动程序(i915)。
[AVHWDeviceContext @ 0x55d0c3bb4640] libva:VA-API 版本 1.10.0
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: 用户请求驱动程序“iHD”
[AVHWDeviceContext @ 0x55d0c3bb4640] libva:尝试打开 /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: 找到初始化函数 __vaDriverInit_1_10
[AVHWDeviceContext @ 0x55d0c3bb4640] libva: va_openDriver() 返回 0
[AVHWDeviceContext @ 0x55d0c3bb4640] 初始化 VAAPI 连接:版本 1.10
[AVHWDeviceContext @ 0x55d0c3bb4640] VAAPI 驱动程序:适用于 Intel(R) Gen Graphics 的 Intel iHD 驱动程序 - 21.1.1()。
[AVHWDeviceContext @ 0x55d0c3bb4640] 在已知的非标准列表中未找到驱动程序,使用标准行为。
[AVHWDeviceContext @ 0x55d0c3bbc080] 初始化 MFX 会话:API 版本为 1.34,实现版本为 1.34
[AVHWDeviceContext @ 0x55d0c3d4d200] VAAPI 驱动程序:适用于 Intel(R) Gen Graphics 的 Intel iHD 驱动程序 - 21.1.1()。
[AVHWDeviceContext @ 0x55d0c3d4d200] 在已知的非标准列表中未找到驱动程序,使用标准行为。
[h264_qsv@0x55d0c3b59940]解码器:输出是显存表面
[AVHWDeviceContext @ 0x55d0c3d82640] VAAPI 驱动程序:适用于 Intel(R) Gen Graphics 的 Intel iHD 驱动程序 - 21.1.1()。
[AVHWDeviceContext @ 0x55d0c3d82640] 在已知的非标准列表中未找到驱动程序,使用标准行为。
[h264_qsv@0x55d0c3b59940]解码器:输出是显存表面
[来自流 0:0 @ 0x55d0c3da30c0 的图 0 输入] w:1920 h:1080 pixfmt:qsv tb:1/90000 fr:119/4 sar:1/1
[auto_scaler_0 @ 0x55d0c3d6f2c0] w:iw h:ih 标志:'bicubic' 间隔:0
[transpose @ 0x55d0c3de3600] 在过滤器“来自流 0:0 的图 0 输入”和过滤器“transpose”之间自动插入过滤器“auto_scaler_0”
无法在过滤器“来自流 0:0 的图 0 输入”和过滤器“auto_scaler_0”支持的格式之间进行转换
重新初始化过滤器时出错!
无法将帧注入过滤网络:功能未实现
处理流 #0:0 的解码数据时出错
[AVIOContext @ 0x55d0c3b43140] 统计信息:已读取 670703 字节,3 次寻道
转换失败!

答案1

看起来这只是一个老旧的 ffmpeg 错误。

Debian bullseye 中的版本是 4.3.5,即将推出的版本是 5.1.3,并且一切都按预期运行,只是图像旋转了,但这是不应该的 :-D 花了我一天的时间,超级烦人。

相关内容