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

本文主要补充基础概念,在设置编码器的时候,参数设置不对,录制的屏幕就会出现花屏。所以梳理了基础知识,就知道哪里设置不对了。

如下是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);

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

 

一、像素

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

  • 720P: 实际像素是1280x720,相乘结果921600, 即有921600个像素点,也就是常说的100万像素
  • 1080P:实际像素是1920x1080,相乘结果2073600,即有2073600个像素点,也就是常说的200万像素

二、图像占用空间大小计算

公式:图像像素数 * 图像位深 / 8 = 占用字节。一个像素点占用8位。

  • 比如:一张图片像素为:1024x1024,位深32位,则图像大小为:1024*1024*32/8=4194304byte = 4KB   1024*1024*32/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。

在开发过程中,如果一帧图像的尺寸设置成:352*388,20帧/秒, 352*388*20=2 731 520b/s(压缩前), 所以压缩后 bit_rate = 400 000, 则画面清晰,且录制的视频也比较小。如果尺寸设置成1280*720,则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)。比特率越高,单位时间传送的数据量越大。比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示。

九、例子

不同参数,导致的巨大差异,主要是文件大小的差异,太大了。我们都希望高清且体积小的文件,但是参数调节不好,就不能得到理想的效果。可以看到,录屏的话,帧率不用很大,这时候,需要的码率也就不大,然后文件体积就小了。前提是,这种录制的效果,是自己可以接受的。

 

以上内容,是在处理音视频过程中遇到的基础知识,整理学习用。

 

 

 

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值