Files

43 lines
1.6 KiB
Bash
Executable File

#!/bin/bash
# C5: per-codec FPS at N=3 runs. Wall-time measurement, no output file written.
set -u
OUT=$HOME/measurements/p3
mkdir -p $OUT
codecs=("h264:h264.mp4" "vp8:vp8.webm" "mpeg2:mpeg2.ts")
for spec in "${codecs[@]}"; do
codec=${spec%%:*}; ext=${spec#*:}
cf=$HOME/measurements/encoded/bbb_60s_720p.${ext}
log=$OUT/bench_${codec}.log
> $log
echo "=== $codec ===" | tee $log
for run in 1 2 3; do
t0=$(date +%s.%N)
out=$(LIBVA_DRIVER_NAME=v4l2_request timeout 30 ffmpeg -hide_banner -benchmark -loglevel error \
-hwaccel vaapi -hwaccel_output_format vaapi \
-i "$cf" -vf "hwdownload,format=nv12" -f null - 2>&1 </dev/null)
t1=$(date +%s.%N)
el=$(awk "BEGIN { printf \"%.3f\", $t1-$t0 }")
fps_calc=$(awk "BEGIN { printf \"%.2f\", 1440.0 / ($t1-$t0) }")
fps_self=$(echo "$out" | grep -oE "fps=[ ]*[0-9.]+" | tail -1 | awk -F= "{print \$2}" | tr -d " ")
frames=$(echo "$out" | grep -oE "frame=[ ]*[0-9]+" | tail -1 | awk -F= "{print \$2}" | tr -d " ")
bench=$(echo "$out" | grep "^bench:" | tail -1)
echo " run $run: elapsed=${el}s fps_calc=$fps_calc fps_self=$fps_self frames=$frames" | tee -a $log
[ -n "$bench" ] && echo " $bench" | tee -a $log
done
# Compute mean and stddev
awk '/^ run/ { gsub("elapsed=","",$3); gsub("s","",$3); el[NR]=$3; sum+=$3; n++ }
END {
if (n>0) {
mean=sum/n
for (i in el) ss += (el[i]-mean)^2
sd=sqrt(ss/n)
printf " N=%d mean=%.3fs sigma=%.3fs fps=%.2f±%.2f\n", n, mean, sd, 1440/mean, 1440*sd/(mean*mean)
}
}' $log | tee -a $log
done
echo "=== done $(date -Iseconds) ==="