Ab heute ist es möglich, FFmpeg mit VAAPI zu erstellen, mit der Sie auf unterstützten Systemen VP9 auf der Intel Integrated GPU kodieren können.
Der neue Encoder wird aufgerufen, wenn ffmpeg mit VAAPI-Unterstützung kompiliert wird vp9_vaapi
.
Führen Sie folgende Schritte aus, um die verfügbaren Optionen beim Abstimmen des Encoders anzuzeigen:
ffmpeg -hide-banner -h encoder=vp9_vaapi
Ausgabe:
Encoder vp9_vaapi [VP9 (VAAPI)]: General capabilities: delay Threading capabilities: none Supported pixel formats: vaapi_vld vp9_vaapi AVOptions: -loop_filter_level <int> E..V.... Loop filter level (from 0 to 63) (default 16) -loop_filter_sharpness <int> E..V.... Loop filter sharpness (from 0 to 15) (default 4)
Was passiert, wenn Sie versuchen, dies mit nicht unterstützter Hardware durchzuführen, sagen Sie Skylake?
Siehe die Beispielausgabe unten:
[Parsed_format_0 @ 0x42cb500] compat: called with args=[nv12] [Parsed_format_0 @ 0x42cb500] Setting 'pix_fmts' to value 'nv12' [Parsed_scale_vaapi_2 @ 0x42cc300] Setting 'w' to value '1920' [Parsed_scale_vaapi_2 @ 0x42cc300] Setting 'h' to value '1080' [graph 0 input from stream 0:0 @ 0x42cce00] Setting 'video_size' to value '3840x2026' [graph 0 input from stream 0:0 @ 0x42cce00] Setting 'pix_fmt' to value '0' [graph 0 input from stream 0:0 @ 0x42cce00] Setting 'time_base' to value '1/1000' [graph 0 input from stream 0:0 @ 0x42cce00] Setting 'pixel_aspect' to value '1/1' [graph 0 input from stream 0:0 @ 0x42cce00] Setting 'sws_param' to value 'flags=2' [graph 0 input from stream 0:0 @ 0x42cce00] Setting 'frame_rate' to value '24000/1001' [graph 0 input from stream 0:0 @ 0x42cce00] w:3840 h:2026 pixfmt:yuv420p tb:1/1000 fr:24000/1001 sar:1/1 sws_param:flags=2 [format @ 0x42cba40] compat: called with args=[vaapi_vld] [format @ 0x42cba40] Setting 'pix_fmts' to value 'vaapi_vld' [auto_scaler_0 @ 0x42cd580] Setting 'flags' to value 'bicubic' [auto_scaler_0 @ 0x42cd580] w:iw h:ih flags:'bicubic' interl:0 [Parsed_format_0 @ 0x42cb500] auto-inserting filter 'auto_scaler_0' between the filter 'graph 0 input from stream 0:0' and the filter 'Parsed_format_0' [AVFilterGraph @ 0x42ca360] query_formats: 6 queried, 4 merged, 1 already done, 0 delayed [auto_scaler_0 @ 0x42cd580] w:3840 h:2026 fmt:yuv420p sar:1/1 -> w:3840 h:2026 fmt:nv12 sar:1/1 flags:0x4 [hwupload @ 0x42cbcc0] Surface format is nv12. [AVHWFramesContext @ 0x42ccbc0] Created surface 0x4000000. [AVHWFramesContext @ 0x42ccbc0] Direct mapping possible. [AVHWFramesContext @ 0x42c3e40] Created surface 0x4000001. [AVHWFramesContext @ 0x42c3e40] Direct mapping possible. [AVHWFramesContext @ 0x42c3e40] Created surface 0x4000002. [AVHWFramesContext @ 0x42c3e40] Created surface 0x4000003. [AVHWFramesContext @ 0x42c3e40] Created surface 0x4000004. [AVHWFramesContext @ 0x42c3e40] Created surface 0x4000005. [AVHWFramesContext @ 0x42c3e40] Created surface 0x4000006. [AVHWFramesContext @ 0x42c3e40] Created surface 0x4000007. [AVHWFramesContext @ 0x42c3e40] Created surface 0x4000008. [AVHWFramesContext @ 0x42c3e40] Created surface 0x4000009. [AVHWFramesContext @ 0x42c3e40] Created surface 0x400000a. [vp9_vaapi @ 0x409da40] Encoding entrypoint not found (19 / 6). Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height [AVIOContext @ 0x40fdac0] Statistics: 0 seeks, 0 writeouts [aac @ 0x40fcb00] Qavg: -nan [AVIOContext @ 0x409f820] Statistics: 32768 bytes read, 0 seeks Conversion failed!
Die interessanten Bits sind die Eingangspunktwarnungen für das Fehlen der VP9-Codierung auf dieser Plattform, wie durch die Ausgabe von vainfo bestätigt wird:
libva info: VA-API version 0.40.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/local/lib/dri/i965_drv_video.so libva info: Found init function __vaDriverInit_0_40 libva info: va_openDriver() returns 0 vainfo: VA-API version: 0.40 (libva 1.7.3) vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.8.4.pre1 (glk-alpha-71-gc3110dc) vainfo: Supported profile and entrypoints VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Simple : VAEntrypointEncSlice VAProfileMPEG2Main : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointEncSlice VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264Main : VAEntrypointEncSliceLP VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileH264High : VAEntrypointEncSliceLP VAProfileH264MultiviewHigh : VAEntrypointVLD VAProfileH264MultiviewHigh : VAEntrypointEncSlice VAProfileH264StereoHigh : VAEntrypointVLD VAProfileH264StereoHigh : VAEntrypointEncSlice VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD VAProfileNone : VAEntrypointVideoProc VAProfileJPEGBaseline : VAEntrypointVLD VAProfileJPEGBaseline : VAEntrypointEncPicture VAProfileVP8Version0_3 : VAEntrypointVLD VAProfileVP8Version0_3 : VAEntrypointEncSlice VAProfileHEVCMain : VAEntrypointVLD VAProfileHEVCMain : VAEntrypointEncSlice VAProfileVP9Profile0 : VAEntrypointVLD
Der VLD-Einstiegspunkt (für Variable Length Decode) für das VP9-Profil 0 ist der am weitesten entfernte Punkt, an dem Skylake in Bezug auf die VP9-Hardwarebeschleunigung ankommt.
Diese mit Kabylake-Testbetten führen diese Verschlüsselungstests durch und melden einen Bericht :-)