vlc以错误的帧速率支付使用libavcodec创建的视频

时间:2013-03-12 14:34:37

标签: h.264 vlc libavcodec

作为测试,我想创建一个帧速率为1 fps的视频。当我创建它时,这个vlc仍然以25 fps的速度播放。有没有人有想法?

AVFormatContext* formatContext;
avformat_alloc_output_context2(&formatContext, NULL, NULL, "test.h264");
AVOutputFormat* outputFormat = formatContext->oformat;

AVStream* videoStream = av_new_stream(formatContext, 0);
AVCodecContext* ctx  = videoStream->codec;

ctx->codec_type = AVMEDIA_TYPE_VIDEO;  
ctx->codec_id = CODEC_ID_H264;    

ctx->bit_rate = 500*1000;
ctx->bit_rate_tolerance = 0;
ctx->width = w;
ctx->height = h;
ctx->pix_fmt = AV_PIX_FMT_YUV420P;
ctx->time_base.den = 1;//25;
ctx->time_base.num = 1;

1 个答案:

答案 0 :(得分:1)

这是一个老问题,但我希望它可以帮助其他人解决同样的问题

AVStream有一个明确的time_base,由muxer根据容器设置。 如AVStream.time_base评论中所述:

  

muxer MAY 使用用户提供的值   AVCodecContext.time_base作为提示。

您需要使用av_rescale_q() RAW FRAME 点设置为正确的值:

/* AVFrame* */ raw_frame->pts = av_rescale_q(my_pts, ctx->time_base, videoStream->time_base);
.
.
.
/* AVPacket pkt; */
avcodec_encode_video2(ctx, pkt, &got_packet);
.
.
.
av_write_frame(formatContext, &pkt);