Compare commits
2 Commits
37ee68278b
...
6f697ba107
Author | SHA1 | Date | |
---|---|---|---|
6f697ba107 | |||
884a9ab296 |
@ -23,6 +23,10 @@
|
|||||||
|
|
||||||
\setlength \parskip {0.40em}
|
\setlength \parskip {0.40em}
|
||||||
|
|
||||||
|
\makeatletter
|
||||||
|
\def\verbatim@font{\normalfont\ttfamily\small}
|
||||||
|
\makeatother
|
||||||
|
|
||||||
\setlength{\hoffset}{0em}
|
\setlength{\hoffset}{0em}
|
||||||
\setlength{\textheight}{640pt}
|
\setlength{\textheight}{640pt}
|
||||||
\setlength{\textwidth}{422pt}
|
\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
|
pour ceux qui suivent le canal \texttt{\#tetalab} sur le réseau
|
||||||
IRC de Freenode.
|
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}
|
\setlength \parskip {0em}
|
||||||
@ -865,7 +874,7 @@ pour comprendre.
|
|||||||
Quand au second fichier, il contient un compteur (stocké en ascii) qui
|
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
|
est incrémenté après chaque capture réussie. Et ce compteur est
|
||||||
utilisable par la variable \texttt{OFORMAT} que nous avons
|
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}
|
\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
|
l'architecture du \textbf{pipdeprod} à adopter\dots} est destiné à la confection
|
||||||
de films flous\index{film} à partir de photos floues.
|
de films flous\index{film} à partir de photos floues.
|
||||||
Le script \texttt{scripts/echomix.sh} est une première expérimentation
|
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
|
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,
|
complète écrite en \textbf{C}\index{C} est déja en chantier,
|
||||||
|
@ -30,7 +30,7 @@ do
|
|||||||
vb=$(( $(( idx + OFFS )) % NBRE))
|
vb=$(( $(( idx + OFFS )) % NBRE))
|
||||||
imgB=$(printf "$SRCDIR/%04d.fimg" $vb)
|
imgB=$(printf "$SRCDIR/%04d.fimg" $vb)
|
||||||
|
|
||||||
# ... ant the output filename
|
# ... and the output filename
|
||||||
#
|
#
|
||||||
dst=$(printf "%s/%05d.png" ${DSTDIR} $idx)
|
dst=$(printf "%s/%05d.png" ${DSTDIR} $idx)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user