作为测试,我想创建一个帧速率为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;
答案 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);