Compare commits
No commits in common. "6f697ba107f073218af2268a7e3c5b3891420634" and "37ee68278bdbc4c090727f9579313c0665c4497d" have entirely different histories.
6f697ba107
...
37ee68278b
@ -23,10 +23,6 @@
|
|||||||
|
|
||||||
\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}
|
||||||
@ -70,11 +66,6 @@ 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}
|
||||||
@ -882,107 +873,7 @@ 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)
|
||||||
|
|
||||||
# ... and the output filename
|
# ... ant 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