print video/audio/global_header size and muxing overhead
Originally committed as revision 3014 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
23
ffmpeg.c
23
ffmpeg.c
@@ -203,6 +203,9 @@ static int using_vhook = 0;
|
|||||||
static int verbose = 1;
|
static int verbose = 1;
|
||||||
static int thread_count= 1;
|
static int thread_count= 1;
|
||||||
static int q_pressed = 0;
|
static int q_pressed = 0;
|
||||||
|
static int64_t video_size = 0;
|
||||||
|
static int64_t audio_size = 0;
|
||||||
|
static int64_t extra_size = 0;
|
||||||
|
|
||||||
#define DEFAULT_PASS_LOGFILENAME "ffmpeg2pass"
|
#define DEFAULT_PASS_LOGFILENAME "ffmpeg2pass"
|
||||||
|
|
||||||
@@ -434,6 +437,7 @@ static void do_audio_out(AVFormatContext *s,
|
|||||||
&ost->fifo.rptr) == 0) {
|
&ost->fifo.rptr) == 0) {
|
||||||
ret = avcodec_encode_audio(enc, audio_out, audio_out_size,
|
ret = avcodec_encode_audio(enc, audio_out, audio_out_size,
|
||||||
(short *)audio_buf);
|
(short *)audio_buf);
|
||||||
|
audio_size += ret;
|
||||||
av_write_frame(s, ost->index, audio_out, ret);
|
av_write_frame(s, ost->index, audio_out, ret);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -451,6 +455,7 @@ static void do_audio_out(AVFormatContext *s,
|
|||||||
}
|
}
|
||||||
ret = avcodec_encode_audio(enc, audio_out, size_out,
|
ret = avcodec_encode_audio(enc, audio_out, size_out,
|
||||||
(short *)buftmp);
|
(short *)buftmp);
|
||||||
|
audio_size += ret;
|
||||||
av_write_frame(s, ost->index, audio_out, ret);
|
av_write_frame(s, ost->index, audio_out, ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -816,7 +821,6 @@ static void do_video_stats(AVFormatContext *os, AVOutputStream *ost,
|
|||||||
int frame_size)
|
int frame_size)
|
||||||
{
|
{
|
||||||
static FILE *fvstats=NULL;
|
static FILE *fvstats=NULL;
|
||||||
static int64_t total_size = 0;
|
|
||||||
char filename[40];
|
char filename[40];
|
||||||
time_t today2;
|
time_t today2;
|
||||||
struct tm *today;
|
struct tm *today;
|
||||||
@@ -840,7 +844,6 @@ static void do_video_stats(AVFormatContext *os, AVOutputStream *ost,
|
|||||||
|
|
||||||
ti = MAXINT64;
|
ti = MAXINT64;
|
||||||
enc = &ost->st->codec;
|
enc = &ost->st->codec;
|
||||||
total_size += frame_size;
|
|
||||||
if (enc->codec_type == CODEC_TYPE_VIDEO) {
|
if (enc->codec_type == CODEC_TYPE_VIDEO) {
|
||||||
frame_number = ost->frame_number;
|
frame_number = ost->frame_number;
|
||||||
fprintf(fvstats, "frame= %5d q= %2.1f ", frame_number, enc->coded_frame->quality/(float)FF_QP2LAMBDA);
|
fprintf(fvstats, "frame= %5d q= %2.1f ", frame_number, enc->coded_frame->quality/(float)FF_QP2LAMBDA);
|
||||||
@@ -854,9 +857,9 @@ static void do_video_stats(AVFormatContext *os, AVOutputStream *ost,
|
|||||||
ti1 = 0.01;
|
ti1 = 0.01;
|
||||||
|
|
||||||
bitrate = (double)(frame_size * 8) * enc->frame_rate / enc->frame_rate_base / 1000.0;
|
bitrate = (double)(frame_size * 8) * enc->frame_rate / enc->frame_rate_base / 1000.0;
|
||||||
avg_bitrate = (double)(total_size * 8) / ti1 / 1000.0;
|
avg_bitrate = (double)(video_size * 8) / ti1 / 1000.0;
|
||||||
fprintf(fvstats, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ",
|
fprintf(fvstats, "s_size= %8.0fkB time= %0.3f br= %7.1fkbits/s avg_br= %7.1fkbits/s ",
|
||||||
(double)total_size / 1024, ti1, bitrate, avg_bitrate);
|
(double)video_size / 1024, ti1, bitrate, avg_bitrate);
|
||||||
fprintf(fvstats,"type= %c\n", av_get_pict_type_char(enc->coded_frame->pict_type));
|
fprintf(fvstats,"type= %c\n", av_get_pict_type_char(enc->coded_frame->pict_type));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -953,8 +956,16 @@ static void print_report(AVFormatContext **output_files,
|
|||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_last_report && verbose >= 0)
|
if (is_last_report && verbose >= 0){
|
||||||
|
int64_t raw= audio_size + video_size + extra_size;
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
|
fprintf(stderr, "video:%1.0fkB audio:%1.0fkB global headers:%1.0fkB muxing overhead %f%%\n",
|
||||||
|
video_size/1024.0,
|
||||||
|
audio_size/1024.0,
|
||||||
|
extra_size/1024.0,
|
||||||
|
100.0*(total_size - raw)/raw
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* pkt = NULL means EOF (needed to flush decoder buffers) */
|
/* pkt = NULL means EOF (needed to flush decoder buffers) */
|
||||||
@@ -1117,6 +1128,7 @@ static int output_packet(AVInputStream *ist, int ist_index,
|
|||||||
}
|
}
|
||||||
|
|
||||||
do_video_out(os, ost, ist, &picture, &frame_size, audio_sync);
|
do_video_out(os, ost, ist, &picture, &frame_size, audio_sync);
|
||||||
|
video_size += frame_size;
|
||||||
if (do_vstats && frame_size)
|
if (do_vstats && frame_size)
|
||||||
do_video_stats(os, ost, frame_size);
|
do_video_stats(os, ost, frame_size);
|
||||||
}
|
}
|
||||||
@@ -1513,6 +1525,7 @@ static int av_encode(AVFormatContext **output_files,
|
|||||||
ost->file_index, ost->index);
|
ost->file_index, ost->index);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
extra_size += ost->st->codec.extradata_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user