YUV 420电影流的文件结构是什么

时间:2013-09-01 17:52:34

标签: video file-format yuv

问题不是关于库或工具,而是关于YUV 4:2:0电影流的规范(标准或汇总定义)。

YUV 420电影流只是一些连接的YUV图像,如果是这样,这些帧和流的规格是什么?

我想为YUV 420助手制作一个简单的图像,但如果它发生它还需要一些计算/压缩/预测,我只会投降。如果它只需要将图像转换为YUV然后将它们附加在一起,我将对其进行编码并在此处共享C#源。

2 个答案:

答案 0 :(得分:2)

两种方式:第一种方法实际上只是连接的YUV图像(请注意,平面的顺序通常是YVU,而不是YUV)。对于单帧的格式,请查看YV12格式,这是在内存中布置YUV 420图像的一种方式。

另一种方式是用于MPEG格式的YUV,它做同样的事情,但从一些标题信息开始:​​例如见:http://wiki.multimedia.cx/index.php?title=YUV4MPEG2

如果你有一个用于MPEG文件的YUV,你可以获得在文件中使用它所需的所有信息。如果你有一个原始的YUV文件,你需要知道它的分辨率,帧率和子采样。

另一个有趣的问题是,将4:4:4 YUV图像转换为4:2:0 YUV图像有不同的方法,具体取决于放置子采样网格的位置。隔行扫描也使这有点复杂。

答案 1 :(得分:0)

这是一个非常古老的话题,但是我花了一些时间来修复YUV4MPEG2未压缩的视频例程,所以我决定将其写下来。

要理解的重要一点是,Y,U,V帧被写为单独的帧。最简单的方法是以444格式写入,因为每次只需加载一个输入图像。

假设您有800x600像素的图像,将其命名为image1,image2 ...,并希望帧率为5 fps:

首先编写一个字符串标题:

        'YUV4MPEG2 W800 H600 F05:1 Ip A0:0 C444'+#10

加载输入image1并写一个以char 10结尾的字符串头FRAME:

        'FRAME'+#10

写完整的800x600像素Y帧,其中Y:= trunc(R x 77/256 + G x 150/256 + B x 29/256),R,G,B是红色,绿色和蓝色像素值。 Y是一个1字节的值

         YYYY
         YYYY
         YYYY
         YYYY

写入完整的800x600像素U帧,其中U:= trunc(R x -43/256 + G x -84/256 + B x 127/256 +128),R,G,B是红色,绿色和蓝色像素值。 U是1个字节的值。

         UUUU
         UUUU
         UUUU
         UUUU

编写完整的800x600像素V帧,其中V:= trunc(R x 127/256 + G x -106/256 + B x -21/256 +128),R,G,B为红色,绿色和蓝色像素值。 V是一个1字节的值。

         VVVV
         VVVV
         VVVV
         VVVV

对于每次以“ FRAME” +#10开头的下一张图像重复此操作。 可以通过VLC,FFMPEG和Youtube显示文件。更多信息: http://wiki.multimedia.cx/index.php?title=YUV4MPEG2

另请参阅 https://en.wikipedia.org/wiki/YUV

相关问题