FFmpeg x264编码b帧时时间戳,帧率等总结

11 篇文章 1 订阅
7 篇文章 1 订阅

1. 在进行FFmpeg API转码视频时,解码出来的视频帧是包含有frame->pict_type字段的,如果编码前不处理,x264会按照该类型强制编码。如果希望x264自动插入b帧编码,在编码前需要将frame->pict_type设置为AV_PICTURE_TYPE_NONE。x264编码出来后的帧类型可以通过AVCodecContext的coded_frame成员来判断。


2. 在编码含有b帧的情况下,p帧和b帧的pts和dts是不相同的。如果希望编码器自动处理帧时间戳,需要在编码前的frame中设置pts和dts为相同值,编码器会根据延迟打dts时间戳。如果编码前没有设置frame的pts和dts,则时间戳需要在编码后自己计算加上去。


3. ffmpeg转码时的编码AVCodecContext的framerate字段设置了未必是有效的(实际上是由每一帧的真实显示时间偏移决定的)。一般可以通过结合AVCodecContext的time_base字段和每一帧的时间戳来计算每一帧的实际显示时间偏移(s),比如设置time_base为{1, 50},视频帧时间戳按1递增,则每一帧的显示间隔为0.02s,一秒显示50帧,从而控制每秒钟显示的帧数。 


4. 每一帧的显示时间是由frame中的pts来决定的,该pts的time_base为AVCodecContext的time_base。在解码前需要将input stream的time_base转换为input AVCodecContext的time_base,在编码后需要将output 的AVCodecContext的time_base转换为output stream的的time_base。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值