6aef03df8d
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
43 lines
1.6 KiB
Bash
Executable File
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) ==="
|