On Tue, May 22, 2018 at 03:40:54PM -0700, Wang Cao wrote: > - Make ffmpeg to output stats for each video/audio streams and each ouptut > file ffmpeg output log in print_report. > - The report of video/audio sizes is clear as previously all output > video/audio sizes were combined to report and it is unclear such stats > is for one output files or aggregates for all output files. > > Signed-off-by: Wang Cao <wang...@google.com> > --- > fftools/ffmpeg.c | 65 ++++++++++++++++++++++++++++++++---------------- > 1 file changed, 44 insertions(+), 21 deletions(-) > > diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c > index 5a19a09d9a..0b98521852 100644 > --- a/fftools/ffmpeg.c > +++ b/fftools/ffmpeg.c > @@ -1526,17 +1526,28 @@ static int reap_filters(int flush) > return 0; > } > > -static void print_final_stats(int64_t total_size) > +static void print_final_stats() > { > uint64_t video_size = 0, audio_size = 0, extra_size = 0, other_size = 0; > uint64_t subtitle_size = 0; > uint64_t data_size = 0; > + int64_t total_size; > float percent = -1.0; > int i, j; > int pass1_used = 1; > + AVFormatContext *oc; > > for (i = 0; i < nb_output_streams; i++) { > OutputStream *ost = output_streams[i]; > + if (i > 0 && ost->file_index != output_streams[i-1]->file_index) { > + video_size = 0; > + audio_size = 0; > + extra_size = 0; > + other_size = 0; > + subtitle_size = 0; > + data_size = 0; > + } > + > switch (ost->enc_ctx->codec_type) { > case AVMEDIA_TYPE_VIDEO: video_size += ost->data_size; break; > case AVMEDIA_TYPE_AUDIO: audio_size += ost->data_size; break; > @@ -1545,25 +1556,37 @@ static void print_final_stats(int64_t total_size) > } > extra_size += ost->enc_ctx->extradata_size; > data_size += ost->data_size; > + > if ( (ost->enc_ctx->flags & (AV_CODEC_FLAG_PASS1 | > AV_CODEC_FLAG_PASS2)) > != AV_CODEC_FLAG_PASS1) > pass1_used = 0; > - } > - > + > + // Print stats for each output file. > + if (i == nb_output_streams-1 || ost->file_index != > output_streams[i+1]->file_index) { > + oc = output_files[ost->file_index]->ctx; > + total_size = avio_size(oc->pb); > + if (total_size <= 0) // FIXME improve avio_size() so it works > with non seekable output too > + total_size = avio_tell(oc->pb); > + > if (data_size && total_size>0 && total_size >= data_size) > percent = 100.0 * (total_size - data_size) / data_size;
> - > + Adding trailing whitespace > av_log(NULL, AV_LOG_INFO, "video:%1.0fkB audio:%1.0fkB subtitle:%1.0fkB > other streams:%1.0fkB global headers:%1.0fkB muxing overhead: ", > video_size / 1024.0, > audio_size / 1024.0, > subtitle_size / 1024.0, > other_size / 1024.0, > extra_size / 1024.0); > + > if (percent >= 0.0) not related, whitespace change > av_log(NULL, AV_LOG_INFO, "%f%%", percent); > else > av_log(NULL, AV_LOG_INFO, "unknown"); > av_log(NULL, AV_LOG_INFO, "\n"); > + } > + } > + > + > > /* print verbose per-stream stats */ > for (i = 0; i < nb_input_files; i++) { > @@ -1676,13 +1699,6 @@ static void print_report(int is_last_report, int64_t > timer_start, int64_t cur_ti > > t = (cur_time-timer_start) / 1000000.0; > > - > - oc = output_files[0]->ctx; > - > - total_size = avio_size(oc->pb); > - if (total_size <= 0) // FIXME improve avio_size() so it works with non > seekable output too > - total_size = avio_tell(oc->pb); > - > vid = 0; > av_bprint_init(&buf, 0, AV_BPRINT_SIZE_AUTOMATIC); > av_bprint_init(&buf_script, 0, 1); > @@ -1693,12 +1709,13 @@ static void print_report(int is_last_report, int64_t > timer_start, int64_t cur_ti > if (!ost->stream_copy) > q = ost->quality / (float) FF_QP2LAMBDA; > > - if (vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) { > + if (is_last_report && vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) { > av_bprintf(&buf, "q=%2.1f ", q); > av_bprintf(&buf_script, "stream_%d_%d_q=%.1f\n", > ost->file_index, ost->index, q); > } > - if (!vid && enc->codec_type == AVMEDIA_TYPE_VIDEO) { > + if (is_last_report || !is_last_report && !vid) { > + if (enc->codec_type == AVMEDIA_TYPE_VIDEO) { > float fps; > > frame_number = ost->frame_number; > @@ -1750,14 +1767,16 @@ static void print_report(int is_last_report, int64_t > timer_start, int64_t cur_ti > ost->file_index, ost->index, p); > } > vid = 1; > - } > + } > + > /* compute min output value */ > if (av_stream_get_end_pts(ost->st) != AV_NOPTS_VALUE) > pts = FFMAX(pts, av_rescale_q(av_stream_get_end_pts(ost->st), > - ost->st->time_base, > AV_TIME_BASE_Q)); > + ost->st->time_base, AV_TIME_BASE_Q)); unrelated and incorrect indention change > if (is_last_report) > nb_frames_drop += ost->last_dropped; > - } > + > + total_size = ost->data_size; > > secs = FFABS(pts) / AV_TIME_BASE; > us = FFABS(pts) % AV_TIME_BASE; > @@ -1810,14 +1829,18 @@ static void print_report(int is_last_report, int64_t > timer_start, int64_t cur_ti > av_bprintf(&buf, " speed=%4.3gx", speed); > av_bprintf(&buf_script, "speed=%4.3gx\n", speed); > } > - > + > + if (is_last_report) > + av_bprintf(&buf, "\n"); > + } > + } > + > if (print_stats || is_last_report) { > - const char end = is_last_report ? '\n' : '\r'; > + const char end = '\r'; > if (print_stats==1 && AV_LOG_INFO > av_log_get_level()) { > fprintf(stderr, "%s %c", buf.str, end); > } else > av_log(NULL, AV_LOG_INFO, "%s %c", buf.str, end); > - > fflush(stderr); > } > av_bprint_finalize(&buf, NULL); > @@ -1835,9 +1858,9 @@ static void print_report(int is_last_report, int64_t > timer_start, int64_t cur_ti > "Error closing progress log, loss of information > possible: %s\n", av_err2str(ret)); > } > } > - > + unlreated addition of trailing whitespace please look at and cleanup the patch [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB When the tyrant has disposed of foreign enemies by conquest or treaty, and there is nothing more to fear from them, then he is always stirring up some war or other, in order that the people may require a leader. -- Plato
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel