我有工作解決方案從C++中的視頻中提取幀github。問題是它非常緩慢。我正在做的是我正在使用定時器和播放視頻,每當幀準備就緒時,我將它轉換爲位圖並保存並尋找下一個位置。我認爲這不是正確的做法,必須有另一種拉出框架的方式。請通過Github項目並建議任何更改。C++中的MFT幀提取
以下是我的定時器功能
if (m_spMediaEngine != nullptr)
{
LONGLONG pts;
if (m_spMediaEngine->OnVideoStreamTick(&pts) == S_OK)
{
// new frame available at the media engine so get it
ComPtr<ID3D11Texture2D> spTextureDst;
MEDIA::ThrowIfFailed(
m_d3dDevice->CreateTexture2D(
&CD3D11_TEXTURE2D_DESC(
DXGI_FORMAT_B8G8R8A8_UNORM,
m_rcTarget.right, // Width
m_rcTarget.bottom, // Height
1, // MipLevels
1, // ArraySize
D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET
),
nullptr,
&spTextureDst
)
);
if (FAILED(
m_spMediaEngine->TransferVideoFrame(spTextureDst.Get(), nullptr, &m_rcTarget, &m_bkgColor)
))
{
return;
}
Position = Position + interval;
SetPlaybackPosition(Position);
ComPtr<IDXGISurface2> surface;
MEDIA::ThrowIfFailed(
spTextureDst.Get()->QueryInterface(
__uuidof(IDXGISurface2), &surface)
);
D2D1_BITMAP_PROPERTIES1 bitmapProperties =
D2D1::BitmapProperties1(
D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW,
D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED),
96,
96
);
m_d2dContext->CreateBitmapFromDxgiSurface(surface.Get(), &bitmapProperties, &bitmap);
SaveBitmapToFile();
}
}
我的問題是:這個權利,只提取幀的方法是什麼?
問題是什麼? – egur
「通過Github項目並提出任何更改」這不是StackOverflow的工作原理。您需要提出具體的問題,提供最好的解釋和細節。然後你會得到答案。 –
@羅曼我已經提到,我如何提取框架和代碼。如果有人對此感興趣,那麼他不必設置整個項目,他可以使用我的github項目 –