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}
..........................................................................
}