ffmpeg 和 vp9_qsv:编码期间出错:空指针

ffmpeg 和 vp9_qsv:编码期间出错:空指针

我正在尝试使用 ffmpeg 对 VP9 进行编码vp9_qsv我的 CPU 支持 QuickSync (i7 11700k)。我知道多显示器问题并通过设置比特率和最大速率vp9_qsv找到了解决错误的方法。[vp9_qsv] Selected ratecontrol mode is unsupported

我正在使用这个命令行: fmpeg.exe -i input.mp4 -b:v 10M -maxrate:v 10M -c:v vp9_qsv -c:a copy output.mp4

我收到以下错误:

ffmpeg version n4.4-80-g262a744a0a-20210720 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 10-win32 (GCC) 20210408
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-shared --disable-static --disable-w32threads --enable-pthreads --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libvmaf --enable-vulkan --disable-libxcb --disable-xlib --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-libglslang --enable-libgme --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-lv2 --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-librubberband --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-libuavs3d --disable-libdrm --disable-vaapi --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags= --extra-libs=-lgomp --extra-version=20210720
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2021-07-01T10:28:31.000000Z
    encoder         : HandBrake 1.0.7 2017040900
  Duration: 00:01:21.02, start: 0.000000, bitrate: 30597 kb/s
  Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 30430 kb/s, 29.97 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
    Metadata:
      creation_time   : 2021-07-01T10:28:31.000000Z
      handler_name    : VideoHandler
      vendor_id       : [0][0][0][0]
  Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 160 kb/s (default)
    Metadata:
      creation_time   : 2021-07-01T10:28:31.000000Z
      handler_name    : Stereo
      vendor_id       : [0][0][0][0]
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> vp9 (vp9_qsv))
  Stream #0:1 -> #0:1 (copy)
[vp9_qsv @ 000001fdf9f7dcc0] Error during encoding: NULL pointer (-2)

如果我交换vp9_qsvh264_qsv编码hevc_qsv工作正常。

它是从最新的 4.4 版本开始自建的 ffmpeg,最新的 master 也是如此。

答案1

同样的问题在这里,我通过在启动时添加一些选项并在命令中添加过滤器来修复它按照您的命令:

fmpeg.exe -i input.mp4 -b:v 10M -maxrate:v 10M -c:v vp9_qsv -c:a copy output.mp4

-init_hw_device qsv=hw -filter_hw_device hw在输入文件之前添加了并添加了过滤器-vf hwupload=extra_hw_frames=64,format=qsv

fmpeg.exe -init_hw_device qsv=hw -filter_hw_device hw -i input.mp4 -b:v 10M -maxrate:v 10M -c:v vp9_qsv -c:a copy -vf hwupload=extra_hw_frames=64,format=qsv output.webm

根据 QSV trac ffmpeg 页面,这些选项用于初始化过滤器以与 QSV 编码器一起使用,我有点认为这可能是解决方案,而且确实如此。我还注意到您在使用 VP-X 编解码器时使用了 mp4,我很确定 mp4 不能包含 VP-X 编解码器。

我注意到我的测试文件中的音频不起作用,我会想办法解决。

相关内容