我正在尝试使用 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 花了我一天的时间,超级烦人。