time_base of ffmpeg transcode

ffmpeg-2.2.2 

ffmpeg -f mpegts -i film.ts -c:a libfaac -c:v libx264 -f mp4 ff.mp4


1. video

1.1 get frame_rate in transcode_init

Line: 2497

           if (codec->codec_type == AVMEDIA_TYPE_VIDEO) {
                if (ost->filter && !ost->frame_rate.num)
                    ost->frame_rate = av_buffersink_get_frame_rate(ost->filter->filter);

.......................................................

           }

      => ost->frame_rate = {num = 24000, den = 1001}

so far, (initializing value)

enc->time_base = {0, 1}

enc->pkt_timebase = {0, 0}

ost->st->time_base = {1, 90000}


1.2 get codec->time_base in transcode_init

Line: 2531

            case AVMEDIA_TYPE_VIDEO:
                codec->time_base = av_inv_q(ost->frame_rate);

=>

codec->time_base = {1001, 24000}


1.3 get st->time_base and enc->pkt_timebase

=>avformat_write_header =>mov_write_header =>

 for (i = 0; i < s->nb_streams; i++) {
        AVStream *st= s->streams[i];
        MOVTrack *track= &mov->tracks[i];

...........................................................................................

        track->enc = st->codec;
        track->st = st;

..............................................................................................

            if (mov->video_track_timescale) {
                track->timescale = mov->video_track_timescale;
            } else {
                track->timescale = st->codec->time_base.den;    // track->timescale = 24000;
                while(track->timescale < 10000)
                    track->timescale *= 2;
            }

....................................................................................................

            avpriv_set_pts_info(st, 64, 1, track->timescale);

=>st->time_base = {1, 24000}

=>st->codec->pkt_timebase = {1, 24000}

.......................................................................................................

}


而如果: ffmpeg -f mpegts -i film.ts -c:a libfaac -c:v libx264 -f mpegts ff.ts


st->codec->time_base = {1001, 24000}


则在    mpegts_write_header => 

for(i = 0;i < s->nb_streams; i++) {
        st = s->streams[i];
        avpriv_set_pts_info(st, 33, 1, 90000);

=>st->time_base = {1, 90000}

=>st->codec->pkt_timebase = {1, 90000}

..........................................................................

}





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值