Ffmpeg VLC:“;avcodec错误:延迟视频超过5秒”;

Ffmpeg VLC:“;avcodec错误:延迟视频超过5秒”;,ffmpeg,vlc,libavformat,pts,Ffmpeg,Vlc,Libavformat,Pts,我正在将mpeg4视频复制到avi容器。视频流为4fps,因此我将avcodecextenttime\u base设置为1/4(formatContext->streams[0]->codec->time\u base),然后重新缩放每个帧时间戳,因为原始时间戳以毫秒为单位。我分配给数据包pts和dts的结果值 当我用VLC播放此avi时,视频不流畅,我反复收到以下消息: avcodec错误:超过5秒的延迟视频->丢弃帧 (计算机太慢?) 上述pts/dts计算是否有问题 下表演示了如何重新缩放

我正在将mpeg4视频复制到avi容器。视频流为4fps,因此我将
avcodecextent
time\u base
设置为1/4(
formatContext->streams[0]->codec->time\u base
),然后重新缩放每个帧时间戳,因为原始时间戳以毫秒为单位。我分配给数据包
pts
dts
的结果值

当我用VLC播放此avi时,视频不流畅,我反复收到以下消息:

avcodec错误:超过5秒的延迟视频->丢弃帧 (计算机太慢?)

上述pts/dts计算是否有问题

下表演示了如何重新缩放时间戳(原始->重新缩放)


你不应该把它重新缩放到0,250,500,750,…@arash kordi为什么?请注意,时基是帧率的倒数,即1/4。所以我像这样重新缩放:`AVRational time_base_1kHz={1,1000},stream_timebase={1,4};pkt.pts=av_rescale_q(流点、时基、时基)`这是错误的吗?@arash kordi在avformat.h中评论说:“对于固定fps内容,时基应为1/帧速率,时间戳增量应为1。”是的,你是对的,但av_read_frame()保证pts和dts始终设置为正确的值,如果你只是重新调整帧,你可以保持一切不变。还有一件事。。。您是否也设置了pkt->duration?您还可以使用AV_NOPTS_值,看看是什么happens@arashkordi我不从标准容器中读取这些帧,正如我提到的,它们最初驻留在某个专有文件中,时间戳以毫秒为单位。至于
duration
,文档上说:“这个数据包的持续时间以AVStream->time\u为基本单位,如果未知,则为0。等于next\u pts-表示顺序中的this\u pts。”我刚刚试着设置1,0,AV\u NOPTS\u值,似乎没有任何效果。
stream: 0 1329471005111->1
stream: 0 1329471005348->2
stream: 0 1329471005588->3
stream: 0 1329471005828->4
stream: 0 1329471006068->5
stream: 0 1329471006308->6
stream: 0 1329471006551->7
stream: 0 1329471006788->8
stream: 0 1329471007028->9
stream: 0 1329471007268->10
stream: 0 1329471007508->11
stream: 0 1329471007748->12
stream: 0 1329471007988->13
stream: 0 1329471008228->14
stream: 0 1329471008468->15