forked from tTh/FloatImg
gros bla en plus
This commit is contained in:
parent
884a9ab296
commit
6f697ba107
@ -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}
|
||||
@ -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…
Reference in New Issue
Block a user