当前位置:   article > 正文

视频基础知识——编码时,帧率、码率、分辨率之间的联系_编码帧率和编码码率的区别

编码帧率和编码码率的区别

本文主要补充基础概念,在设置编码器的时候,参数设置不对,录制的屏幕就会出现花屏。所以梳理了基础知识,就知道哪里设置不对了。
如下是ffmpeg自带的sample,encode_video的例子,选取H264的编码器,进行编码。

const AVCodec *codec;
AVCodecContext *c= NULL;
 
/* find the mpeg1video encoder */
codec = avcodec_find_encoder_by_name(codec_name);
c = avcodec_alloc_context3(codec);
 
/* put sample parameters */
c->bit_rate = 400000;
/* resolution must be a multiple of two */
c->width = 352;
c->height = 288;
/* frames per second */
c->time_base = (AVRational){1, 25};
c->framerate = (AVRational){25, 1};
 
    /* emit one intra frame every ten frames
     * check frame pict_type before passing frame
     * to encoder, if frame->pict_type is AV_PICTURE_TYPE_I
     * then gop_size is ignored and the output of encoder
     * will always be I frame irrespective to gop_size
     */
c->gop_size = 10;
c->max_b_frames = 1;
c->pix_fmt = AV_PIX_FMT_YUV420P;
 
if (codec->id == AV_CODEC_ID_H264)
        av_opt_set(c->priv_data, "preset", "slow", 0);
 
/ * open it */
ret = avcodec_open2(c, codec, NULL);

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

其中,c->bit_rate = 400 000; 一直不知道怎么来的,导致录制屏幕花屏。下面整理了基础知识,才知道这个东西是怎么来的,以及如何设置。

一、像素
通常说的像素,一般指图像含有多少个像素点。

720P: 实际像素是1280x720,相乘结果921600, 即有921600个像素点,也就是常说的100万像素
1080P:实际像素是1920x1080,相乘结果2073600,即有2073600个像素点,也就是常说的200万像素
二、图像占用空间大小计算
公式:图像像素数 * 图像位深 / 8 = 占用字节。一个像素点占用8位。

比如:一张图片像素为:1024x1024,位深32位,则图像大小为:1024102432/8=4194304byte = 4KB 1024102432/8=4MB
三、分辨率
分辨率是指设备输出分辨率或叫屏幕 分辨率,即屏幕上横竖有多少个容器点,每个容器点用于容纳一个像素。说人话就是:屏幕的像素点总和。比如某手机分辨率为720*640, 给它播放1080P的视频,根本不能发挥1080P的优势。

常见的视像分辨率有352×288,176×144,640×480,1024×768
四、密度
每英寸包含多少个像素点,单位PPI(pixel per inch).
在这里插入图片描述
根据公式,就可以计算出,这个5.8寸的手机的PPI是多少。PPI超过300就可以算是视网膜屏了,肉眼已经分辨不出像素点来。
四、码流(data rate):
是指视频文件在单位时间内使用的数据流量,也叫码率,经过视频压缩后每秒产生的数据量,而压缩是去掉图像的空间冗余和视频的时间冗余,是视频编码中画面质量控制中最重要的部分。同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越高。

码流越大,说明单位时间内取样率越大,数据流的精度就越高,处理出来的文件就越接近原始文件,画面质量越好,画质越清晰,要求播放设备的解码能力也越高。

对应ffmpeg中的就是 c->bit_rate。单位kb/s 或Mb/s。

在开发过程中,如果一帧图像的尺寸设置成:352388,20帧/秒, 35238820=2 731 520b/s(压缩前), 所以压缩后 bit_rate = 400 000, 则画面清晰,且录制的视频也比较小。如果尺寸设置成1280720,则bit_rate需要设置大一些,比如设置成800 000, 此时画面才会清晰,如果依然设置成400000,则画面非常模糊,像打马赛克一样。 当尺寸改大,且bit_rate设置大时,录制的视频文件也会偏大。
六、视频文件大小的计算
视频文件大小:(音频码率+视频码率)*时长/8 。 前面单位是kbit, 体积单位也是kb

如果一个视频码率为3Mbps, 音频码率为512Kbps,时长是90分钟(5400秒),那么整个文件大小就是: (3+512/1024)* 5400/8=2362.5MB=2.307G
一个视频文件的大小为5.86M,播放时长为3分7秒: 则该文件对应的码流就是:5.86 * 1024 * 1024 * 8 / (3 * 60 + 7) =262872.95657754bps=262.873Kbps=0.263Mbps
通过上面的分析,可以看出,码率对视频文件的大小,影响很关键呀!
七、帧速率
帧速率(画面的实时性、流畅性),指每秒钟刷新的图片的帧数。也可以理解为图形处理器每秒钟能够刷新几次。对视频内容而言,帧速率指每秒所显示的静止帧格数。要生成平滑连贯的动画效果,帧速率一般不小于8;而电影的帧速率为24fps。捕捉动态视频内容时,此数字愈高愈好。

八、比特率
比特率是指每秒钟传送的比特(bite)数。单位为bps(Bit Per Second)。比特率越高,单位时间传送的数据量越大。比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示。

九、例子
不同参数,导致的巨大差异,主要是文件大小的差异,太大了。我们都希望高清且体积小的文件,但是参数调节不好,就不能得到理想的效果。可以看到,录屏的话,帧率不用很大,这时候,需要的码率也就不大,然后文件体积就小了。前提是,这种录制的效果,是自己可以接受的。
在这里插入图片描述
在这里插入图片描述
以上内容,是在处理音视频过程中遇到的基础知识,整理学习用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/410280
推荐阅读
相关标签
  

闽ICP备14008679号