gros bla en plus

master
tth 3 years ago
parent 884a9ab296
commit 6f697ba107
  1. 113
      doc/the_floatimg_hack.tex

@ -23,6 +23,10 @@
\setlength \parskip {0.40em}
\makeatletter
\def\verbatim@font{\normalfont\ttfamily\small}
\makeatother
\setlength{\hoffset}{0em}
\setlength{\textheight}{640pt}
\setlength{\textwidth}{422pt}
@ -66,6 +70,11 @@ Mais le service après-vente est assez réactif. Du moins
pour ceux qui suivent le canal \texttt{\#tetalab} sur le réseau
IRC de Freenode.
\textbf{Attention !} ce document commence par une bonne rafale
de technique parfois hardue\footnote{gni?}.
Vous avez parfaitement le droit de auter directement à
la page \pageref{outils} pour quelque chose de plus concret.
% -------------------------------------------------------------------
\setlength \parskip {0em}
@ -865,7 +874,7 @@ pour comprendre.
Quand au second fichier, il contient un compteur (stocké en ascii) qui
est incrémenté après chaque capture réussie. Et ce compteur est
utilisable par la variable \texttt{OFORMAT} que nous avons
vue quelques lignes plus haut.
vue quelques lignes plus haut.
\subsection{Fonderie}\index{fonderie}\label{fonderie}
@ -873,7 +882,107 @@ Ce projet externe\footnote{... pour le moment, j'ai des soucis sur
l'architecture du \textbf{pipdeprod} à adopter\dots} est destiné à la confection
de films flous\index{film} à partir de photos floues.
Le script \texttt{scripts/echomix.sh} est une première expérimentation
en bash, utilisant deux outils en \textsc{cli}.
en bash, utilisant deux outils en \textsc{cli},
le premier pouvant salement brotcher une image, et le second capable de
mélanger harmonieusement deux images, la balance est équilibrée.
Il s'agit donc d'un petit programme écrit en Bash\index{bash}, un langage
dont la connaissance est, pour moi, indispendable à qui veut faire des
images kitchies\index{kitchy}. Mais ne vous inquiétez pas, c'est en
fait assez simple à comprendre. Et comprendre, c'est apprendre.
Voici donc le script, décomposé et expliqué :
\begin{verbatim}
#!/bin/bash
SRCDIR="Fist"
DSTDIR="Pong"
FTMP="/dev/shm/tmp.fimg"
FDST="/dev/shm/foo.fimg"
# count the nomber of picz in the source directory
NBRE=$(ls -1 ${SRCDIR}/*.fimg | wc -l)
# compute the echo picz offset
OFFS=$(( NBRE / 4 ))
\end{verbatim}
Dans ce préliminaire logiciel, nous avons nommés le répertoire
\textsc{srcdir} contenant les captures d'image au format fimg, le répertoire
\textsc{dstdir} dans lequel seront rangées les images calculées,
et l'emplacement de deux fichiers de travail.
Les quelques lignes suivantes, qui semble bien magiques, ne sont en fait
que de la magie Unix\index{Unix}. Elles nous permettent d'avoir
\textsc{nbre}, le nombre d'images à traiter, et \textsc{offs}, un décalage
dépendant du nombre d'image. Muni de toutes ces informations, nous
pouvons rentrer dans le lard du sujet, la boucle qui travaille.
\begin{verbatim}
# MAIN LOOP
for idx in $(seq 0 $NBRE)
do
# build the two input filenames ...
#
imgA=$(printf "$SRCDIR/%04d.fimg" $idx)
vb=$(( $(( idx + OFFS )) % NBRE))
imgB=$(printf "$SRCDIR/%04d.fimg" $vb)
# ... and the output filename
#
dst=$(printf "%s/%05d.png" ${DSTDIR} $idx)
\end{verbatim}
Dans cette première partie de la boucle nous avons construit plusieurs
noms de fichier à partir du rang de la boucle en cours d'exécution,
des deux valeurs \textsc{nbre} et \textsc{offs} calculées en préambule.
\begin{verbatim}
# trying to autocompute the mixing coefficient
#
compute=" s(${idx} / 16) "
K=$(echo $compute | bc -l)
printf " %25s => %8.3f\n" "$compute" $K
\end{verbatim}
Cette seconde partie sert à calculer avec la commande
\texttt{bc}\index{bc}
un coefficient variable en fonction du temps :
$sin(idx/16)$ afin d'avoir une oscillation du coefficient entre
-1.0 et 1.0, deux valeurs probablement glitchantes.
\begin{verbatim}
# do the hard floating computation
#
fimgfx -v cos010 ${imgB} ${FTMP}
fimgops -k ${K} ${FTMP} ${imgA} mix ${FDST}
\end{verbatim}
Étape suivante, étape cruciale : le brassage d'une multitude de
pixels flottants.
Tout d'abord, nous faisons subir à l'image-echo
(\texttt{imgB}, définie au début du script) un distorsion
chromatique de type \textsl{cos010}, le résultat étant écrit
dans un fichier temporaire. Ensuite, nous mixons l'image
primaire et son echo en utilisant le rapport de mixage
calculé quelques lignes plus haut.
\begin{verbatim}
# write the output as PNG for video encoding
#
fimg2png ${FDST} ${dst}
done
\end{verbatim}
Et en fin de boucle, nous convertissons le résultat de nos
savants au format PNG, et écrivons le fichier dans le répertoire
de destination fixé au début.
C'est le moment de passer la main à ffmpeg\index{ffmpeg}.
C'est juste une POC\index{POC}, et une implémentation bien plus
complète écrite en \textbf{C}\index{C} est déja en chantier,

Loading…
Cancel
Save