summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2023-12-04 16:37:40 +0100
committerAnton Khirnov <anton@khirnov.net>2024-03-09 20:03:39 +0100
commit0258d4e7901c7d4c2b1035a476bbcbbae7675963 (patch)
tree506ee8484c5d69c3279f89f15cd577f65356f823
parent7fa9d0d007c7d592d13ec16118971f3065ca91ee (diff)
Add metric test script/filtergraph.metrics
-rw-r--r--metrics.script27
-rwxr-xr-xmetrics.sh32
-rw-r--r--scale.script5
3 files changed, 64 insertions, 0 deletions
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 <filename> [<encoder>] [<container>]"
+ 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];