我正在尝试使用 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_qsv
或h264_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 编解码器。
我注意到我的测试文件中的音频不起作用,我会想办法解决。