diff --git a/ffmpeg.c b/ffmpeg.c index a3f4bbdc00..ff782d285e 100644 --- a/ffmpeg.c +++ b/ffmpeg.c @@ -764,8 +764,29 @@ static void print_report(AVFormatContext **output_files, frame_number = ost->frame_number; sprintf(buf + strlen(buf), "frame=%5d q=%2.1f ", frame_number, enc->coded_frame ? enc->coded_frame->quality/(float)FF_QP2LAMBDA : 0); - if (enc->flags&CODEC_FLAG_PSNR) - sprintf(buf + strlen(buf), "PSNR= %6.2f ", psnr(enc->coded_frame->error[0]/(enc->width*enc->height*255.0*255.0))); + if(is_last_report) + sprintf(buf + strlen(buf), "L"); + if (enc->flags&CODEC_FLAG_PSNR){ + int j; + double error, error_sum=0; + double scale, scale_sum=0; + char type[3]= {'Y','U','V'}; + sprintf(buf + strlen(buf), "PSNR="); + for(j=0; j<3; j++){ + if(is_last_report){ + error= enc->error[j]; + scale= enc->width*enc->height*255.0*255.0*frame_number; + }else{ + error= enc->coded_frame->error[j]; + scale= enc->width*enc->height*255.0*255.0; + } + if(j) scale/=4; + error_sum += error; + scale_sum += scale; + sprintf(buf + strlen(buf), "%c:%2.2f ", type[j], psnr(error/scale)); + } + sprintf(buf + strlen(buf), "*:%2.2f ", psnr(error_sum/scale_sum)); + } vid = 1; } /* compute min output value */