ffmpeg и vp9_qsv: ошибка при кодировании: NULL-указатель
Я пытаюсь использовать ffmpeg для кодирования VP9 в Windows 10. Мой процессор поддерживает QuickSync (i7 11700k). Я знаю о проблеме с несколькими мониторами и нашел способ обойти ее.[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
кодировка работает нормально.
Это самодельный ffmpeg из последней версии 4.4, то же самое происходит и с последней версией 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, я подумал, что это может быть решением, и так оно и было. Я также заметил, что вы использовали mp4 при использовании кодека VP-X, я почти уверен, что mp4 не может содержать кодеки VP-X.
В тестовом файле я заметил, что звук не работает, я что-нибудь придумаю.