在 Windows 上使用 OpenCV 和 Python 进行硬件加速解码(MSMT / IntelMFX / FFMPEG / 任何后端)

问题描述 投票:0回答:1

我无法在 Windows 10 上使用 OpenCV 进行硬件加速解码。

有什么建议吗?我已经在最新的 Windows OpenCV 4.1.0 中编译并尝试了所有后端。

我最信任 MSMF 解码,因为它支持 DXVA。
(MSMF = Microsoft Media Foundation w/ DXVA)

这里是OpenCV的BuildInformation。

getBuildInformation()
{
    Video I/O:
        DC1394:                      NO
        FFMPEG:                      YES (prebuilt binaries)
          avcodec:                   YES (58.35.100)
          avformat:                  YES (58.20.100)
          avutil:                    YES (56.22.100)
          swscale:                   YES (5.3.100)
          avresample:                YES (4.0.0)
        GStreamer:                   YES (1.16.0)
        DirectShow:                  YES
        Media Foundation:            YES
          DXVA:                      YES
        Intel Media SDK:             YES (.../x64/libmfx_vs2015.lib)
}

这是我的输入视频测试结果。

Results()
{
    Intel_MFX   
        [12.0x]     Frame: 12279/0      Speed: 224fps
        Elapsed:    58.081 s  <-- (Result Maxed CPU so it wasnt HWacclerated Decoding)

    FFMPEG  
        [9.4x]      Frame: 12400/12451  Speed: 170fps
        Elapsed:    74.809 s         <-- (Software Decoded, not HWacclerated)


    GSTREAMER
        [1.0x]      Frame: 1382/-1      Speed: 18fps
        Elapsed:    Realtime Video Playback

    MSMT
        ERROR OPENING WITH BACKEND
        Elapsed:    0.172 s

    DSHOW
        ERROR OPENING WITH BACKEND
        Elapsed:    0.002 s
}

这是我如何用 Python 读取输入文件

{
video=cv2.VideoCapture('input_video.264', cv2.CAP_INTEL_MFX )
video=cv2.VideoCapture('input_video.264', cv2.CAP_FFMPEG )
video=cv2.VideoCapture('input_video.264', cv2.CAP_GSTREAMER )
video=cv2.VideoCapture('input_video.264', cv2.CAP_MSMF )
video=cv2.VideoCapture('input_video.264', cv2.CAP_DSHOW )
}

是否有更简单的(HW 加速)方法将视频文件中的帧导入 OpenCV?我需要每 18 帧(解析 1 FPS)解析安全镜头的运动活动。越快越好!!

使用 DXVA Checker,我应该能够通过 Intel_CPU HW 加速解码实现 800fps/~40x 实时播放速度。 (我也有一个 AMD gpu,但它的硬件加速解码速度慢 @ 100fps/~5x 实时播放)

我可以编译强制硬件解码的替代 FFMPEG 二进制文件吗?我知道 FFMPEG 支持硬件加速!

python opencv decoding hardware-acceleration
1个回答
0
投票

我从字面上使用 FFMPEG 管道和 nvdec 来为 python 提供框架。至少它不需要编译 OpenCV 就可以工作。

© www.soinside.com 2019 - 2024. All rights reserved.