我正在使用emgu
来保存未压缩的视频。 VideoWriter("video.avi", 0, (int)FrameRate, frameSize, true);
0
值表示已保存的视频将被解压缩,请参阅here。此外,FrameRate
aws设置为30。
存储的Mat
文件为:var mat = new Mat(480, 640, Emgu.CV.CvEnum.DepthType.Cv8U, 3)
。对于13994
帧的存储视频,属性窗口显示:9.29 GB (6,449,164,288 bytes)
(窗口)。现在我想手动验证视频大小:
640*480*3*13994= 12,896,870,400 bytes
,窗口属性的两倍返回。
请你详细说明一下吗?
MediaInfo信息:
General
Complete name : name.avi
Format : AVI
Format/Info : Audio Video Interleave
Format profile : OpenDML
File size : 6.01 GiB
Duration : 7 min 46 s
Overall bit rate : 111 Mb/s
Writing application : Lavf56.36.100
Video
ID : 0
Format : YUV
Codec ID : I420
Codec ID/Info : 8 bit Y plane followed by 8 bit 2x2 subsampled U and V planes.
Duration : 7 min 46 s
Bit rate : 111 Mb/s
Width : 640 pixels
Height : 480 pixels
Display aspect ratio : 4:3
Frame rate : 30.000 FPS
Compression mode : Lossless
Bits/(Pixel*Frame) : 12.000
Stream size : 6.01 GiB (100%)
谢谢你。
答案 0 :(得分:1)
我会在今晚稍后调查一下,但是现在可以确认emgu
每帧使用4个字节(32位整数),即使你的像素类型是24位RGB吗? / p>
Formula = Width * Height * 3 (rgb) * 21658 (frames) * 4 (ie: 32bit Int) / 8 (bits per byte)
使用上面的公式我可以得到一个接近的数字......
640 * 480 * 3 * 13994 * 4 / 8 = 6,448,435,200
结果:
on disk size : 6 449 164 288 bytes (Windows)
calculated size : 6 448 435 200 bytes (Formula)
remainder size : 729 088 bytes (possible AVI Header size as bytes?)
暂时只是一个快速的,因为我不想涉及比特率等事情。通常文件大小给出比特率,反之亦然。但是根据你的估计,在文件生成之前你不会知道实际的比特率,所以上面是我最好的猜测,直到我能正确地思考它...
PS:MediaInfo可以显示标题大小(以字节为单位)以确认最后剩余大小号。