From 0258d4e7901c7d4c2b1035a476bbcbbae7675963 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Mon, 4 Dec 2023 16:37:40 +0100 Subject: Add metric test script/filtergraph. --- metrics.script | 27 +++++++++++++++++++++++++++ metrics.sh | 32 ++++++++++++++++++++++++++++++++ scale.script | 5 +++++ 3 files changed, 64 insertions(+) create mode 100644 metrics.script create mode 100755 metrics.sh create mode 100644 scale.script diff --git a/metrics.script b/metrics.script new file mode 100644 index 0000000000..05b282300d --- /dev/null +++ b/metrics.script @@ -0,0 +1,27 @@ +[dec:3]split=outputs=3[ref_ssim_1080_1080][ref_ssim_1080_720][ref_ssim_1080_540]; +[dec:4]split=outputs=3[ref_ssim_720_1080] [ref_ssim_720_720] [ref_ssim_720_540]; +[dec:5]split=outputs=3[ref_ssim_540_1080] [ref_ssim_540_720] [ref_ssim_540_540]; + +[dec:0]split=outputs=3[cmp_ssim_1080][for_encoded_scale_1080_720][for_encoded_scale_1080_540]; +[for_encoded_scale_1080_720]scale=size=hd720[encoded_scaled_1080_720]; +[for_encoded_scale_1080_540]scale=size=qhd[encoded_scaled_1080_540]; + +[dec:1]split=outputs=3[cmp_ssim_720][for_encoded_scale_720_1080][for_encoded_scale_720_540]; +[for_encoded_scale_720_1080]scale=size=hd1080[encoded_scaled_720_1080]; +[for_encoded_scale_720_540] scale=size=qhd[encoded_scaled_720_540]; + +[dec:2]split=outputs=3[cmp_ssim_540][for_encoded_scale_540_1080][for_encoded_scale_540_720]; +[for_encoded_scale_540_1080]scale=size=hd1080[encoded_scaled_540_1080]; +[for_encoded_scale_540_720] scale=size=hd720[encoded_scaled_540_720]; + +[ref_ssim_1080_1080][cmp_ssim_1080] ssim=stats_file=1080_1080.ssim[out_1080_1080]; +[ref_ssim_720_1080] [encoded_scaled_1080_720]ssim=stats_file=1080_720.ssim [out_1080_720]; +[ref_ssim_540_1080] [encoded_scaled_1080_540]ssim=stats_file=1080_540.ssim [out_1080_540]; + +[ref_ssim_720_720] [cmp_ssim_720] ssim=stats_file=720_720.ssim [out_720_720]; +[ref_ssim_1080_720][encoded_scaled_720_1080]ssim=stats_file=720_1080.ssim [out_720_1080]; +[ref_ssim_540_720] [encoded_scaled_720_540] ssim=stats_file=720_540.ssim [out_720_540]; + +[ref_ssim_540_540] [cmp_ssim_540] ssim=stats_file=540_540.ssim [out_540_540]; +[ref_ssim_1080_540][encoded_scaled_540_1080]ssim=stats_file=540_1080.ssim [out_540_1080]; +[ref_ssim_720_540] [encoded_scaled_540_720] ssim=stats_file=540_720.ssim [out_540_720] diff --git a/metrics.sh b/metrics.sh new file mode 100755 index 0000000000..af29b8ad13 --- /dev/null +++ b/metrics.sh @@ -0,0 +1,32 @@ +set -x + +if [ -z "$1" ]; then + echo "Usage: $0 [] []" + exit 1 +fi + +ENCODER=${2:-h264} +CONTAINER=${3:-matroska} + +METRICS_SCRIPT="$(dirname "$0")/metrics.script" +[ -z "$METRICS_SCRIPT" ] && exit 1 + +SCALE_SCRIPT="$(dirname "$0")/scale.script" +[ -z "$SCALE_SCRIPT" ] && exit 1 + +./ffmpeg_g -y -v verbose \ + -i "$1" \ + -/filter_complex "$SCALE_SCRIPT" \ + -f "$CONTAINER" -c:v "$ENCODER" -enc_time_base demux -fps_mode vfr -map '[1080_for_enc]' out_1080p.mkv \ + -f "$CONTAINER" -c:v "$ENCODER" -enc_time_base demux -fps_mode vfr -map '[720_for_enc]' out_720p.mkv \ + -f "$CONTAINER" -c:v "$ENCODER" -enc_time_base demux -fps_mode vfr -map '[540_for_enc]' out_qhd.mkv \ + -f null -c:v wrapped_avframe -enc_time_base demux -fps_mode vfr -map '[1080_for_metrics]' - \ + -f null -c:v wrapped_avframe -enc_time_base demux -fps_mode vfr -map '[720_for_metrics]' - \ + -f null -c:v wrapped_avframe -enc_time_base demux -fps_mode vfr -map '[540_for_metrics]' - \ + -/filter_complex "$METRICS_SCRIPT" \ + -dec 0:0 -dec 1:0 -dec 2:0 -dec 3:0 -dec 4:0 -dec 5:0 \ + -map '[out_1080_1080]' -map '[out_1080_720]' -map '[out_1080_540]' \ + -map '[out_720_1080]' -map '[out_720_720]' -map '[out_720_540]' \ + -map '[out_540_1080]' -map '[out_540_720]' -map '[out_540_540]' \ + -fps_mode vfr -enc_time_base filter \ + -f null - diff --git a/scale.script b/scale.script new file mode 100644 index 0000000000..3f5988cde4 --- /dev/null +++ b/scale.script @@ -0,0 +1,5 @@ +[0:v]split=outputs=3[for_1080][for_720][for_540]; + +[for_1080]scale=size=hd1080,split=outputs=2[1080_for_enc][1080_for_metrics]; +[for_720] scale=size=hd720, split=outputs=2[720_for_enc] [720_for_metrics]; +[for_540] scale=size=qhd, split=outputs=2[540_for_enc] [540_for_metrics]; -- cgit v1.2.3