美文网首页音视频开发集锦
H264编码系列之获取分辨率和帧率

H264编码系列之获取分辨率和帧率

作者: C_GO流媒体后台开发 | 来源:发表于2018-10-31 15:44 被阅读191次

从码流中获取分辨率

宽高可从SPS字段计算得到,公式如下:

width =  (pic_width_in_mbs_minus1+1) * 16; 
height = (2 - frame_mbs_only_flag) *(pic_height_in_map_units_minus1 +1) * 16;

但以上是针对宽高是16的整数倍的情况,当不是16整数倍时,frame_cropping_flag值为1,则调整为(计算方法参考mkvtoolnix,这里只考虑yuv420p的情况

if (frame_cropping_flag)
{
    unsigned int crop_unit_x; 
    unsigned int crop_unit_y;
    crop_unit_x = 2; 
    crop_unit_y = 2 * (2 - frame_mbs_only_flag);

    width -= crop_unit_x * (frame_crop_left_offset +  frame_crop_right_offset);
    height -= crop_unit_y * (frame_crop_top_offset +  frame_crop_bottom_offset); 
}

比如文件318x238分辨率(宽高必须都可以整除2)


318x238分辨率
  • 第一步

width = (pic_width_in_mbs_minus1+1) * 16 = (19+1)*16 = 320;
height = (2 - frame_mbs_only_flag) *(pic_height_in_map_units_minus1 +1) * 16 = (2-1)*(14+1)*16 = 240;

  • 第二步
    因为frame_cropping_flag = 1,所以width和height都需要做调整。
crop_unit_x = 2; 
crop_unit_y = 2 * (2 - 1) = 2;

width -= 2* (0+  1) ;
height -= 2* (0+  1);
即是
width -= 2;
height -= 2;

width = 320-2 = 318;
height = 240 -2 = 238;

帧率获取

  1. sps 中的帧率
    不是所有的编码器都带有帧率信息,在nalu 中的sps里,应为耗费带宽,通过解析nalu 中的数据结构可以发现里面有个标志位:
    vui_parameters_present_flag 负责是否带帧率

  2. 帧率计算
    framerate = time_scale/2*num_units_in_tick.
    我们可以使用ffmpeg来生成码流进行测试

ffmpeg -i input.mp4 -r 15 r15.h264
ffmpeg -i input.mp4 -r 25 r25.h264
ffmpeg -i input.mp4 -r 29 r29.h264
# r15.h264
000010    timing_info_present_flag:            Yes
000010    num_units_in_tick:                   1 (0x00000001) - (32 bits)
000014    time_scale:                          30 (0x0000001E) - (32 bits)
# r25.h264
000010    timing_info_present_flag:            Yes
000010    num_units_in_tick:                   1 (0x00000001) - (32 bits)
000014    time_scale:                          50 (0x00000032) - (32 bits)
# r29.h264
000010    timing_info_present_flag:            Yes
000010    num_units_in_tick:                   1 (0x00000001) - (32 bits)
000014    time_scale:                          58 (0x0000003A) - (32 bits)

相关文章

  • H264编码系列之获取分辨率和帧率

    从码流中获取分辨率 宽高可从SPS字段计算得到,公式如下: 但以上是针对宽高是16的整数倍的情况,当不是16整数倍...

  • 教程

    [总结]FFMPEG视音频编解码零基础学习方法 用FFmpeg获取视频流+音频流的信息(编码格式、分辨率、帧率、播...

  • Android音视频编码(二)

    视频编码 说明:使用MediaCodec对由Camera采集的数据进行H264编码 1.采集视频数据参数设置:帧率...

  • VideoToolBox 编码H.264

    VideoToolBox 编码H.264 使用VideoToolBox硬编码获取H264 简单介绍一下 H264,...

  • FFmpeg - H264编码

    H264编码实现步骤 获取编码器 avcodec_find_encoder_by_name 检查输入格式 创建编码...

  • 视频码率,帧率和分辨率和带宽

    码率和宽带 码率 分辨率和帧率

  • ios获取LaunchImage

    获取对应分辨率的尺寸图片,无需硬编码判断分辨率写图片尺寸获取

  • VLC转换视频格式

    背景介绍: 本人因为工作原因,需要制作一个帧率为25,编码方式为h264的视频流,但由于学艺不精,ffmpeg指令...

  • 音视频分辨率、帧率、码率参考值

    分辨率、帧率、码率参考值 分辨率 (宽 × 高)帧率 (fps)基准码率 (Kbps,适用于通信)直播码率 (Kb...

  • 帧率和分辨率日志Tag

    Best产品: 帧率和分辨率日志Tag StatOnEvent Camera1Imp

网友评论

    本文标题:H264编码系列之获取分辨率和帧率

    本文链接:https://www.haomeiwen.com/subject/zspatqtx.html