ffmpeg hevc_vaapi: Konvertierung zwischen den vom Filter „Parsed_null_0“ und dem Filter „auto_scaler_0“ unterstützten Formaten nicht möglich.

ffmpeg hevc_vaapi: Konvertierung zwischen den vom Filter „Parsed_null_0“ und dem Filter „auto_scaler_0“ unterstützten Formaten nicht möglich.

Unter Linux versuche ich, die Datei mit Hardwarebeschleunigung in H€VC zu kodieren. Ein erfolgreicher Versuch ist:

ffmpeg -v verbose -hwaccel vaapi -vaapi_device /dev/dri/renderD128 -i '/path/file.mkv' -vcodec libx265 -crf 28 '/path/file.mp4'

aber es ist langsam, etwa 30 fps, " ffmpeg -codecs|grep 265" zeigt: (Encoder: libx265 nvenc_hevc hevc_amf hevc_nvenc hevc_qsv hevc_v4l2m2m hevc_vaapi )

also habe ich hevc_vaapi ausprobiert:

ffmpeg -v verbose -hwaccel vaapi -vaapi_device /dev/dri/renderD128 -i '/path/file.mkv' -vcodec hevc_vaapi -crf 28 '/path/file.mp4'

aber es schlägt fehl:

Impossible to convert between the formats supported by the filter 'Parsed_null_0' and the filter 'auto_scaler_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0
[AVIOContext @ 0x55d831121340] Statistics: 0 seeks, 0 writeouts
[aac @ 0x55d831142a00] Qavg: 30414.529
[aac @ 0x55d831142a00] 2 frames left in the queue on closing
[AVIOContext @ 0x55d831109ec0] Statistics: 65536 bytes read, 0 seeks
Conversion failed!

$ ffmpeg -hwaccels zeigt "

Hardware acceleration methods:
vdpau
cuda
vaapi
qsv
drm

"

$ vaapizeigt dies (scheint, als wäre die Va-API da, Mesa-Treiber)

$ ls /dev/dri/*

/dev/dri/card0 /dev/dri/renderD128

/dev/dri/by-Pfad:

PCI-0000:0a:00.0-Karte PCI-0000:0a:00.0-Render

Was denken Sie über diesen Fehler oder wie würden Sie vorgehen, um herauszufinden, welche ffmpeg-Parameter für HW H€VC-Beschleunigung zu verwenden sind?

Update: Ich denke, dass der Parameter "-hwaccel vaapi" redundant sein könnte

Antwort1

Ich denke, dass es richtige Kodierungsparameter erfordert, wie -vf 'format=nv12,hwupload'und der folgende Einzeiler könnte funktionieren, wenn Sie habenVAAPI-Treiber:

echo "Input file:" && read -r i && echo "Quality: 25=identic, 30=a bit worse but small file size, or other numbers:" && read -r q && ffmpeg -vaapi_device /dev/dri/renderD128 -i "$i" -vf 'format=nv12,hwupload' -c:v hevc_vaapi -f mp4 -rc_mode 1 -qp "$q" "$i.hevc.mp4"

Antwort2

keine andere Antwort hilft mir, nicht bis ich installiere intel-media-va-driver-non-free nach der Installation vonhttps://wiki.debian.org/HardwareVideoAcceleration.

sudo apt install intel-media-va-driver-non-free

Es sollte helfen, wenn Sie eine Intel-GPU verwenden.

Und wenn Sie Videos skalieren müssen, verwenden Sie „-vf scale_vaapi=640:360“, um Videos ohne Zeichenfolge wie „format=nv12,hwupload“ zu skalieren.

Antwort3

Ihr erster Befehl zeigt, dass Sie die GPU zum Dekodieren verwenden, die Kodierung jedoch mit der CPU (libx265) durchgeführt wird. Die GPU dekodiert schnell, aber der dekodierte Inhalt kann erst von der CPU verarbeitet werden, nachdem er vom Grafikkartenspeicher in den Computerspeicher heruntergeladen wurde. Dieser Downloadvorgang ist systemweit. Der Overhead ist sehr hoch und übersteigt sogar den Overhead der gleichzeitigen Kodierung und Dekodierung mit reiner CPU-Software, sodass die Geschwindigkeit sehr niedrig ist. Ihr zweiter Befehl hat schließlich entschieden, die GPU zum gleichzeitigen Dekodieren und Kodieren mit Hardwarebeschleunigung zu verwenden, aber Sie haben der GPU nicht mitgeteilt, dass der zu kodierende Inhalt von der Grafikkartenhardware in den Videospeicher dekodiert wurde, und Sie haben den CRF-Parameter verwendet, den die Hardwarekodierung nicht unterstützt. Der Parameter der Hardwarekodierung, der CRF ähnelt, ist qp. PS: Die folgenden Parameter verwende ich häufig:

ffmpeg -init_hw_device vaapi=foo:/dev/dri/renderD128 -hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device foo -i '/path/file.mkv' -filter_hw_device foo -vf 'format=nv12|vaapi,hwupload' -c:v hevc_vaapi  -qp 24  -filter:a volume=1.5 -ar 44100 -acodec aac -ab 64k -y '/path/file_n.mkv'

Antwort4

Ich möchte vorschlagen, dass Sie die folgenden beiden Flags hinzufügen:

  • -hwaccel vaapi
  • -hwaccel_output_format vaapi

Die Befehlszeile sieht also folgendermaßen aus:

ffmpeg -v verbose -hwaccel vaapi -hwaccel_output_format vaapi -vaapi_device /dev/dri/renderD128 -i INPUT.VIDEO -vf 'format=nv12,hwupload' -c:v hevc_vaapi OUTPUT.mp4

(auf meinem Computer ist die Angabe von vaapi_device nicht erforderlich)

verwandte Informationen