ffmpeg 的时间

ffmpeg 的时间


名词解释

PTS:播放时间戳
DTS:解码时间戳

注意:如果没有 B 帧,那么 PTS 和 PTS 是一样的

音视频流中有一些信息表明了,音视频以多快的速度播放,音频是采样率,视频则是帧率


ffmpeg 中的时间单位


AV_TIME_BASE:ffmpeg 的时间单位,也叫做时间基。ffmpeg 中的时间单位不是秒,而是AV_TIME_BASE,所有的时间都是以他为单位的。定义如下:

#define AV_TIME_BASE 1000000
AV_TIME_BASE_Q:时间基的倒数,实际是 (AVRational){1, AV_TIME_BASE},也就是 1/AV_TIME_BASE。

AVRational 表示分数,定义如下:

typedef struct AVRational{
int num; //分子
int den; //分母

} AVRational;

另外,可以用 av_q2d 函数 把   AVRational 转换成浮点数


ffmpeg 的时间计算


4.1、根据 pts 计算真实的时间(秒):

timestamp = pts * av_q2d(st→time_base)

4.2、根据 duration 计算视频的长度:
time = st->duration * av_q2d(st->time_base)

4.3、时间转换公式:
ffmpeg 内部时间:timestamp(ffmpeg 内部时间戳) = AV_TIME_BASE * time(秒)
常规时间:time(秒) = AV_TIME_BASE_Q * timestamp(ffmpeg 内部时间戳)

4.4、视频跳转的方法:
int64_t timestamp = N * AV_TIME_BASE;
av_seek_frame(fmtctx, index_of_video, timestamp,AVSEEK_FLAG_BACKWARD);


4.5、不同的时间基之间的转换:

int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)


使用ffmpeg截取视频的第一帧时出现黑屏的问题,可能是由于视频文件本身的编码方式或者帧率不适配导致的。 首先,要确保你所使用的ffmpeg版本是最新的,因为在每个版本中都有可能修复了一些问题。你可以通过更新到最新版本来尝试解决问题。 其次,要查看视频文件的编码方式。有些编码方式可能不被某些ffmpeg版本所支持,会导致截取第一帧时出现黑屏。你可以使用以下命令查看视频文件的编码信息: `ffmpeg -i input.mp4` 在输出中会显示视频的编码方式,例如H.264(AVC),如果你发现视频的编码方式在支持列表中没有被提及,那么很可能这就是导致黑屏的原因之一。 如果你确认视频的编码方式是支持的,那么可能是因为视频的帧率不适配导致的问题。你可以通过以下命令尝试指定输出帧率来解决问题: `ffmpeg -i input.mp4 -vf "fps=30" output.mp4` 上述命令中的fps=30表示输出的视频帧率为30帧每秒。你可以根据实际情况调整帧率数值。 最后,还有可能是文件本身出现了一些损坏或错误的问题,导致ffmpeg无法正确解码视频。你可以尝试重新获取视频文件,确保它是有效的。 总之,截取视频第一帧出现黑屏的问题可能是由于视频文件编码方式不被支持或者帧率不适配所引起的。你可以尝试更新ffmpeg版本、查看视频编码方式、调整输出帧率,或者重新获取有效的视频文件来解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值