refactoring the build system

This commit is contained in:
Tonton Th 2025-01-05 00:41:14 +01:00
parent 5b7ad96a29
commit d89876b633
5 changed files with 238 additions and 0 deletions

4
tools/README.md Normal file
View File

@ -0,0 +1,4 @@
# Tools
Build system and utilities.

14
tools/encode.sh Executable file
View File

@ -0,0 +1,14 @@
#!/bin/bash
set -e ; set -u
if [ $# == 1 ]
then
srcdir=$1
else
srcdir="essai"
fi
source tools/fonctions.sh
ff_encodage $srcdir wip.mp4

53
tools/fonctions.sh Normal file
View File

@ -0,0 +1,53 @@
set -eu
# --------------------------------------------------------------
ralentisseur ()
{
temps=$1
load=$(awk '{print int($1)}' < /proc/loadavg)
# echo " load is $load" | tee -a WS/log
if [ $load -gt 10 ] ; then
attente=$(( $temps + ($RANDOM % 90) ))
echo "ralentir $0 $SEQNAME $attente" # | tee -a WS/log
sleep $attente
fi
}
# --------------------------------------------------------------
ff_encodage()
{
SRCDIR="$1"
FILMNAME="$2"
echo "Encoding $SRCDIR to $FILMNAME" | tee -a WS/log
ffmpeg -nostdin \
-y -r 30 -f image2 -i frames/${SRCDIR}/%05d.png \
-metadata artist='--[ tTh ]--' \
-metadata title='-- HexaCone --' \
-c:v libx264 \
-pix_fmt yuv420p \
-tune film \
$FILMNAME
# wc -c $FILMNAME | tee -a WS/log
}
# --------------------------------------------------------------
mp_encodage()
{
#
# NOT WORKING !
#
mencoder 'mf://frames/*.png' \
-mf \
fps=24 \
-ovc lavc \
-lavcopts vcodec=mpeg4 \
-o output.avi
}
# --------------------------------------------------------------
# --------------------------------------------------------------

111
tools/linkfarmer.sh Executable file
View File

@ -0,0 +1,111 @@
#!/bin/bash
set -e ; set -u
IDX=0
SPOOL="frames/Spool"
SEQNAME="none"
TMP="WS/tmp.png"
source tools/fonctions.sh
# -------------------------------------------------------
# /!\ this function just copy the
# file to the spool dir, so
# you can use it for tmp pics.
#
addfile ()
{
src="$1"
dstname=$(printf "%s/%05d.png" $SPOOL $IDX)
# echo "$src -> $dstname"
# ln --force --symbolic $src $dstname
cp -f $src $dstname
IDX=$(( IDX + 1 ))
}
# -------------------------------------------------------
linkfarm ()
{
SRC="frames/$1"
echo "linkfarm $SRC" | tee -a WS/log
local NBRE=30
for foo in $(seq 0 $NBRE)
do
addfile "$SRC/00000.png"
done
for src in "$SRC"/*
do
addfile $src
done
for foo in $(seq 0 $NBRE)
do
addfile "$SRC/00359.png"
done
sync
}
# -------------------------------------------------------
faire_le_titre ()
{
echo "faire le titre"
local NBRE=190
for foo in $(seq 0 $NBRE)
do
Ypos=$(( 500 - ( foo / 2 ) ))
convert "WS/negatif.png" \
-gravity north \
-font Courier-Bold \
-pointsize 96 \
-fill white \
-annotate +0+${Ypos} "HexaCone(s)" \
${TMP}
# identify ${TMP}
addfile ${TMP}
done
}
# -------------------------------------------------------
faire_la_fin ()
{
local NBRE=120
for foo in $(seq 0 $NBRE)
do
Ypos=$(( foo + 100 ))
convert "WS/negatif.png" \
-gravity north \
-font Courier-Bold \
-pointsize 48 \
-fill white \
-strokewidth 2 -stroke gray30 \
-annotate +0+${Ypos} \
"tTh des Bourtoulots\n2025" \
${TMP}
# identify ${TMP}
addfile ${TMP}
done
}
# -------------------------------------------------------
rm frames/Spool/*.png
tools/plot-timing.sh
faire_le_titre
linkfarm hexabenz
linkfarm orbite
linkfarm topview
linkfarm passage
linkfarm scene
linkfarm essai
tools/plot-timing.sh
faire_la_fin
ff_encodage Spool full.mp4

56
tools/plot-timing.sh Executable file
View File

@ -0,0 +1,56 @@
#!/bin/bash
set -ue
TMPFILE="/dev/shm/plot-timing.tmp"
IMAGE="timing.png"
echo ; figlet "plot timing" ; echo
wc WS/mp4.timing | tee -a WS/log
grep "passage" WS/mp4.timing | awk ' \
BEGIN { \
nbrames=360; \
for (foo=0; foo<nbrames; foo++) { \
mini[foo] = 666; \
maxi[foo] = -42; \
count[foo] = 0; \
} \
} \
\
{ \
accu[$2] += $3; \
count[$2]++; \
if (mini[$2] > $3) mini[$2] = $3; \
if (maxi[$2] < $3) maxi[$2] = $3; \
} \
\
END { \
for (foo=0; foo<nbrames; foo++) { \
if (count[foo] > 0) { \
mean = accu[foo] / count[foo]; \
printf "%4d %4f %4d %4d\n", foo, mean, \
mini[foo], maxi[foo]; \
} \
} \
} \
' > $TMPFILE
# cat -n $TMPFILE | tail # ; exit
gnuplot << __EOC__
set term png size 1024,768
set output "timing.png"
set grid
set xrange [:360]
set yrange [0:]
set title "HexaCone : temps de rendu"
set xlabel "numéro de la trame"
set ylabel "temps en secondes"
plot "/dev/shm/plot-timing.tmp" u 1:4 w l t "maximum", \
"/dev/shm/plot-timing.tmp" u 1:3 w l t "minimum", \
"/dev/shm/plot-timing.tmp" u 1:2 w l t "moyenne",
__EOC__
convert -negate $IMAGE WS/negatif.png