一、问题描述
ffmpeg mux输出音视频文件时(如mp3),在加入视频流时设置time_base = 1/30, 但当调用 avformat_write_header() 之后,time_base 被修改为 1/15360 ,如下面两图所示:
调用函数之前:
调用函数之后:
二、问题溯源
- 准确来说这不是问题,时间基修改的原因是 它是从文件容器中直接读取的, 比如flv的视频和音频读取到的是1000,ts文件读取到的是90k,mp4文件视频比较变化多样,可能是24,1000等,这个时间基被称为 封装层time_base,
三、解决方案
- 建议编解码时采用自己设定的time_base, 然后写文件时将 packet 从自己设置的时间基转换到 文件时间基 即可。