To be clear, i want to give an example, i use a 10s duration, 30fps video. The ifmt_ctx->streams[stream_index]->time_base is same as ofmt_ctx->streams[stream_index]->time_base after initializing. The stream->dec_ctx->time_base is default 0,60 but stream->enc_ctx->time_base is set to av_inv_q(dec_ctx->framerate) so it's 0,30
174 /* video time_base can be set to whatever is handy and supported by encoder */ 175 enc_ctx->time_base = av_inv_q(dec_ctx->framerate); so the twice rescale is this: input pkt in_tb: 15360 out_tb: 60 output pkt in_tb: 30 out_tb: 15360 so i get one 20s duration and 15fps video(audio duration is normal because the input's audio sample ratio is 44100) So i think the problem is that the enc_ctx->time_base shouldn't set to av_inv_q(dec_ctx->framerate) On Wed, Feb 5, 2025 at 10:29 AM Jack Lau <jacklau122...@gmail.com> wrote: > > AVCodecContext.time_base is not used for decoding. > > > > Thank you for your reply. I understand that time_base is not used during > decoding, but the transcoding code calls av_packet_rescale_ts twice, once > before decoding and once after encoding, as shown below: > > 540 if (filter_ctx[stream_index].filter_graph) { > 541 StreamContext *stream = &stream_ctx[stream_index]; > 542 > 543 av_log(NULL, AV_LOG_DEBUG, "Going to reencode&filter the > frame\n"); > 544 > 545 av_packet_rescale_ts(packet, > > > 546 > ifmt_ctx->streams[stream_index]->time_base, > 547 stream->dec_ctx->time_base); > 548 ret = avcodec_send_packet(stream->dec_ctx, packet); > > 448 /* prepare packet for muxing */ > > > 449 enc_pkt->stream_index = stream_index; > 450 av_packet_rescale_ts(enc_pkt, > 451 stream->enc_ctx->time_base, > 452 > ofmt_ctx->streams[stream_index]->time_base); > 453 > 454 av_log(NULL, AV_LOG_DEBUG, "Muxing frame\n"); > 455 /* mux encoded frame */ > 456 ret = av_interleaved_write_frame(ofmt_ctx, enc_pkt); > > If dec_ctx->time_base and enc_ctx->time_base are not consistent, it can > lead to incorrect packet duration, which in turn causes issues with the > output file's duration. > _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".