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

标签 video ffmpeg sdl video-processing yuv

我的应用程序通过 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/

相关文章:

amazon-s3 - 如何从媒体文件中判断它是视频还是音频?

audio - ffmpeg FLAC 到 MP3 转换后 Mp3tag 中歌曲长度(持续时间)的值不正确

c++ - 如何从 Linux for Windows 交叉编译 SDL 2

javascript - 通过用户控制在基本 HTML 播放器中播放 Youtube 视频

javascript - 如何让视频在html结束后消失?

javascript - HTML 5 如何记录过滤的 Canvas

ffmpeg 输出图像文件名和时间位置

android - 如何使用 ffmpeg 和 sdl 为 Android 制作视频播放器?

c - OpenGL 与 SDL,我做错了什么?

android - 如何在我的 Android 应用程序中录制视频?