gpt4 book ai didi

video - 以编程方式将 Sdd 水印到 YUV 视频数据 (SDL_Overlay)

转载 作者:行者123 更新时间:2023-12-04 23:17:32 25 4
gpt4 key购买 nike

我的应用程序通过 SDL + ffmpeg 库(不是 exe 工具)播放视频。

我想将文字添加到视频中

ffmpeg 的 VHOOK source code显示它将数据转换为 RGB32。
不能直接在YUV中完成吗?

这是我当前的代码,你能给我一些建议吗?

SDL_Overlay * pOverlay = SDL_CreateYUVOverlay( pDecodedFrame->width
, pDecodedFrame->height
, SDL_YV12_OVERLAY
, pThis->m_pSurface
);
if( pOverlay != NULL )
{
SDL_LockYUVOverlay(pOverlay);

pSwsContext = sws_getCachedContext( pSwsContext
, pDecodedFrame->width
, pDecodedFrame->height
, pThis->m_pMediaFile->GetVideoPixcelFormat()
, pDecodedFrame->width
, pDecodedFrame->height
, PIX_FMT_YUV420P
, SWS_SPLINE
, NULL
, NULL
, NULL
);

AVPicture tPicture;
tPicture.data[0] = pOverlay->pixels[0];
tPicture.data[1] = pOverlay->pixels[2];
tPicture.data[2] = pOverlay->pixels[1];

tPicture.linesize[0] = pOverlay->pitches[0];
tPicture.linesize[1] = pOverlay->pitches[2];
tPicture.linesize[2] = pOverlay->pitches[1];

int nSliceHeight = sws_scale( pSwsContext
, pDecodedFrame->data
, pDecodedFrame->linesize
, 0
, pDecodedFrame->height
, tPicture.data
, tPicture.linesize
);


SDL_UnlockYUVOverlay(pOverlay);
VideoPicture tVideoPicture = {0};
tVideoPicture.pOverlay = pOverlay;
tVideoPicture.nWidth = pDecodedFrame->width;
tVideoPicture.nHeight = pDecodedFrame->height;
tVideoPicture.dbPTS = dbPTS;

pThis->m_pVideoPictureQueue.Append(tVideoPicture);
}

最佳答案

是的,您可以只编写 foreach 循环来遍历 YUV 像素(YUV 基本上是亮度+色度),您只需很少的处理即可将 RGB 数据(水印图像)转换为 YUV 并将它们组合起来。这不会那么难,但您需要了解如何将 rgb 混合和转换为 yuv420p。

关于video - 以编程方式将 Sdd 水印到 YUV 视频数据 (SDL_Overlay),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12237042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com