Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video 使用C库将帧编码为视频_Video_Encoding_Ffmpeg_Video Encoding - Fatal编程技术网

Video 使用C库将帧编码为视频

Video 使用C库将帧编码为视频,video,encoding,ffmpeg,video-encoding,Video,Encoding,Ffmpeg,Video Encoding,为了保持连续性,我们假设“RGB值”如下: typedef struct RGB { uint8_t r, g, b; } rgb; 但是,如果您觉得不同的颜色空间更适合此问题,请使用该颜色空间 在给定输出格式和帧率的情况下,如何将RGB值的2D数组写入C格式的视频? 在继续之前,我应该指定我希望能够在一个程序中完成这一切。我正在尝试向一个应用程序添加功能,使其能够在不必离开的情况下逐帧编译视频 此外,我对该功能的需求非常基本;我只需要能够将单个像素设置为特定的颜色 到目前为止,我最接

为了保持连续性,我们假设“RGB值”如下:

typedef struct RGB {
    uint8_t r, g, b;
} rgb;
但是,如果您觉得不同的颜色空间更适合此问题,请使用该颜色空间

在给定输出格式和帧率的情况下,如何将RGB值的2D数组写入C格式的视频? 在继续之前,我应该指定我希望能够在一个程序中完成这一切。我正在尝试向一个应用程序添加功能,使其能够在不必离开的情况下逐帧编译视频

此外,我对该功能的需求非常基本;我只需要能够将单个像素设置为特定的颜色

到目前为止,我最接近的解决方案是C库。请允许我描述一下我自己能够学到的东西:

在浏览了它的文档之后,我发现了这个函数,它的参数类型分别为和如果这些工具不适合我尝试做的事情,请忽略问题的其余部分,而是告诉我应该使用什么。

但是,我不知道
avctx
frame
的哪些字段必须手动设置,哪些字段不需要手动设置。我认为有些不是因为它们都是非常大的结构,但如果我错了,请纠正我

问题1:必须设置
AVCodecContext
AVFrame
的哪些值?其中,每一项的建议值是多少

此外,我只能找到有关如何初始化
AVFrame
(使用and)的说明,但找不到有关
AVCodexConstant
的说明

问题2:是否有正确的方法初始化
AVCodexConstant
?为了以防万一,上述初始化
AVFrame
的方法正确吗?其中任何一个字段是否有正确的初始化方法

另外,我也找不到关于如何将这个
AVCodexConstant
(我假设它包含视频信息)转换成视频的官方文档。我很抱歉,如果这个文档很容易找到,我只是错过了它

问题3:如何将
AVCodexConstant
转换为给定格式的文件

鉴于我所知有限:

问题4:我是否遗漏了该流程的其他部分,以及上述部分是否有错误


请记住,我是最近第一次了解FFmpeg的,因此,我完全是这方面的初学者。此外,我对C的经验非常有限,如果您能注意到哪些文件需要包含在
#include
中,我将不胜感激

您可以随意推荐FFmpeg以外的内容,只要它是用C编写的。我不需要高级用户选项,但我更希望库能够灵活处理音频和视频文件类型


解决潜在的重复问题 我对这一部分的时间表示歉意;我只想把我的底子盖好。然而,如果这是我找不到的问题的重复,我深表歉意

  • -这个问题太开放了,得到的答案指向了一个教程,该教程通过将重点放在所选的图形库上而令人困惑地搅乱了局面。请不要把这当作我说的不好;我只是一个初学者,不可能一劳永逸地完成这一切
  • -尽管这个问题似乎一直在问同样的问题,但它针对的是虚幻的引擎4,询问者提供了示例代码,使我难以理解接受答案的哪些部分对我来说是必要的,哪些部分不是
  • -虽然这也问了同样的问题,但接受的答案只是提供了一个命令,而不是对代码的解释
  • 虽然这个问题的答案是一个命令,但问题是它正在寻找一种编码C++代码生成的帧的方法。有没有办法在我找不到的代码中运行命令
  • -不仅asker的代码是用Python编写的,而且似乎还将现有的图像文件用作帧
  • -被接受的答案似乎描述了一个需要多个应用程序的过程,但我可能是错的,因为我是一个初学者,除了步骤3之外,我不确定它到底意味着什么
  • -虽然问题指定ogg格式不是问题,但公认的答案表明这是一个问题,似乎只适用于ogg文件
检查此工具 这是一个专门为某些品牌的PCI-E卡编写的linux工具。只需忽略特定于卡的调用和函数

函数有问题1-4的答案。 它的
Player::ScheduleNextFrame()
函数通过新的API对帧进行解码

据我所知,你真正要求的是将一张(小)图片叠加到现有的视频帧上

几乎总是会发现视频文件使用YUV格式的视频帧。最常用的命令是YUV420P。您可以将每个帧转换为RGB,然后处理它,但这会增加额外的开销。所以最好使用本机格式

这里的关键是图片和视频帧应该有相同的格式。因此,您应该事先将图片转换为视频帧格式(我假设它是静止图片)

RGB是线性格式,所以如果您的源恰好是这种格式,只需编写一个算法将图片复制到视频帧。(即
AVFrame::data[0]

YUV420P是平面格式。 由3个平面组成:
Y(AVFrame::data[0])

U(AVFrame::data[1])

V