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

oxcyiej7  于 2023-03-13  发布在  Windows
关注(0)|答案(1)|浏览(530)

我无法在Windows 10上使用OpenCV进行硬件加速解码。
有什么提示吗?我已经编译并尝试了最新的OpenCV 4. 1. 0 for Windows中的所有后端。
我对MSMF解码最有信心,因为它提供了DXVA支持。
(MSMF=微软媒体基金会,带DXVA)
这是OpenCV的构建信息。

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 )
}

有没有更简单(硬件加速)的方法将帧从视频文件到OpenCV?我需要解析每第18帧(1 FPS解析)的运动活动的安全录像。越快越好!!
使用DXVA Checker,我应该能够实现800 fps/~ 40 x实时播放速度与英特尔_CPU硬件加速解码。(我也有一个AMD GPU,但其硬件加速解码速度慢@100fps/~5x实时播放)
有没有一个替代的FFMPEG二进制文件,我可以编译,迫使硬件解码?我知道FFMPEG有硬件加速支持!

8oomwypt

8oomwypt1#

我确实使用了FFMPEG管道和nvdec来为python提供帧。至少它不需要编译OpenCV就能工作。

相关问题