\chapter{Vidéo}
\label{chap:video}

Le traitement de la vidéo, c'est vraiment compliqué : entre
les multiples \textsl{codec} et les multiples \textsl{containers},
on est rapidement perdu. Voici donc quelques recettes de cuisine
à appliquer avec modération (et respect des gestes barrières).

% https://unixsheikh.com/tutorials/remuxing-iso-dvd-or-bluray-using-cat-and-ffmpeg-on-linux.html

% --------------------------------------------------------------------

\section{mplayer}
\index{mplayer}

Une belle grosse usinagaz...

\texttt{mplayer tv:// -tv
driver=v4l2:width=640:height=480:fps=25:device=/dev/video0}

\texttt{mencoder tv:// -tv driver=v4l2:width=640:height=480:fps=25:device=/dev/
video0:forceaudio:alsa=1:adevice=default -ovc lavc -oac mp3lame -lameopts 
cbr:br=64:mode=3 -o}

Pour faire une planche contact d'une vidéo : 
\texttt{mplayer -benchmark -nosound -quiet -zoom -vf scale=320:-3 -vo
jpeg:outdir=/tmp -sstep 60 monfichier.ts}

% --------------------------------------------------------------------
%
% <doug> https://img.ly/blog/ultimate-guide-to-ffmpeg/
%

\section{ffmpeg}
\index{ffmpeg}

D'après certaines rumeurs des intertubes, ce serait un peu le remplaçant
de mencoder pour pas mal de trucs, et d'après d'autres rumeurs
(je confirme clairement) c'est vraiment tortueux à utiliser.

Pour convertir une sextape prise avec un \textit{iMachin} :

\texttt{ffmpeg -i tthsf.mov -target film-dvd sextape.mpeg}

Extraire le son d'une vidéo Youtube :

\texttt{ffmpeg -i myvideo.flv -f mp3 -vn -acodec copy myvideo.mp3}

\texttt{ffmpeg -i fichiervideo.flv -vn -ar 44100 -ac 2 -f wav fichierson.wav}

Extraire les images individuelles, dans le but avoué de les maltraiter
avec d'ignobles logiciels~:

\texttt{ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-\%03d.jpeg}

J'avoue ne pas avoir tout saisi : l'option\texttt{-r N} qui fixe le
\textsl{frame rate} sert à quoi ??? 


Il existe bien une alternative, mais je n'ai pas encore essayé~:
\texttt{mplayer -vo png -ss 3:46 -frames 20 stairs.mp4}
 \# Write out 20 png format frames from a video starting at 3 minutes, 46 seconds.


Tu peux générer les images de transition avec
ImageMagick\index{ImageMagick} :
\texttt{convert a.png b.png -alpha set -channel A
-evaluate set 10\% +channel 
  -compose src-atop -composite -alpha off out.png}

Tu peux assez facilement insérer ça dans une boucle et piper
les images à ffmpeg :

\begin{verbatim}
for image in ...; do
  next=... dépend de tes noms de fichiers
  for a in {0..24}; do
    convert $image $next -alpha set -channel A -evaluate set $[i*4]% \
    +channel -compose src-atop -composite -alpha off png:-
  done
done |
ffmpeg -f image2pipe -c png -i - ...
\end{verbatim}


\subsection{quelques trucs en vrac}

\begin{verbatim}
fichier .avi -> mpeg ( qualité DVD )
    ffmpeg -i fichier.avi -target pal-dvd fichier.mpeg

fichier .avi -> mpeg ( qualité DVD, bitrate 7Mbps, 16/9 )
    ffmpeg -i fichier.avi -target pal-dvd -aspect 16:9 -b 7000000
fichier.mpeg

fichier .avi -> mpeg ( qualité dvd, en 2 passes, 16/9 )
    ffmpeg -i fichier.avi -target pal-dvd -aspect 16:9 -pass 1
fichier_tempo.mpeg
    ffmpeg -i fichier.avi -target pal-dvd -aspect 16:9 -pass 2
fichier_final.mpeg

préciser le "framerate" ( images par secondes : ici 25 )
    ffmpeg -i fichier.avi -r 25 fichier.mpeg

préciser la taille ( défaut = taille du source ( option -s ))
    ffmpeg -i fichier.avi -s 720x576 fichier.mpeg

les deux précédents :
    ffmpeg -i fichier.avi -r 25 -s 640x480 fichier.mpeg

préciser le coef de qualité ( qscale : 1 = le mieux / 3 = correcte )
    ffmpeg -i fichier.dv -target pal-dvd -qscale 2 Fichier.mpeg
\end{verbatim}

https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/ \index{gif89a}

\begin{verbatim}
ffmpeg  -ss 0:5:59.600 -to 0:6:11.150 -i Downloads/foo.mp4 /tmp/tragic.gif
\end{verbatim}

% -----------------------------------------------------------------

\subsection{Encoder un cloître}

Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo
a été programmée par James Lewis pour la résidence « Sonoptic 2020 »,
vidéo dont il a composé la bande originale.
C'est donc un exemple réel, avec même des méta-données.

\begin{verbatim}
ffmpeg  -nostdin                                        \
        -y -r 30 -f image2 -i lf/%06d.png               \
        -metadata artist='--[ tTh ]--'                  \
        -metadata title='-- Un cloitre en POVray --'    \
        -c:v libx264                                    \
        -pix_fmt yuv420p                                \
        -tune film                                      \
        wip.mp4
\end{verbatim}

OMFG! Il manque le son.

% -----------------------------------------------------------------

\subsection{Capturer une vidéo}

%
%	mais où ai-je bien pu trouver ça ?
%

\begin{verbatim}
read -p "*** Press Enter to start recording ***"
"$FFMPEGBIN"                  \
      -thread_queue_size 512  \
      -r "$RATE"              \
      -f v4l2                 \
      -video_size "$SIZE"     \
      -i "$VIDEODEVICE"       \
      -crf 0                  \
      -c:v libx264            \
      -preset ultrafast       \
      -threads 4              \
      "$FILENAME"
\end{verbatim}

C'est un peu rudimentaire, mais il doit être possible de
\textsl{tweaker} ça avec d'autres options, genre fixer
la durée de la capture.



% -----------------------------------------------------------------


\subsection{Questions}

Comment convertir lors de l'encodage un fichier \texttt{.WAV}
en un format compressé afin de ne pas saturer la buvette ?
\textsf{il dit qu'il ne comprend pas la question.}

Quand on encode en // images et son, comment arreter quand on atteint
la fin du plus court des deux flux ?
\textit{look up the options -shortest and -apad}

Comment limiter le nombre de \textsl{cores} utilisés lors d'un encodage
violent sur une toute petite machine\footnote{Coucou le défunt Vaio :)} ?

ffmpeg -f x11grab -video\_size cif -framerate 25 -i :0.0 /tmp/out.mpg

% --------------------------------------------------------------------

\section{VLC} \index{vlc}

VLC est un peu le couteau suisse à 112 lames du multimédia.
Son emblème est un cône de chantier, je ne sais pas
si ça a un sens caché. Mais soyons sérieux deux minutes.
VLC propose une interface \textsl{clickconvi},
que nous allons
soigneusement éviter, pour nous concentrer sur la ligne
de commande.

Pour balancer toutes les vidéos en boucle random~:
\texttt{vlc -f -Z *.mp4}. Mais comment supprimer l'affichage
du nom de fichier au début de chaque séquence ?

VLC peut éventuellement aussi être utilisé comme un outil
de streaming, voyez ça page \pageref{streamvlc}, bon courage.

% --------------------------------------------------------------------
\section{Mediainfo}

\begin{quote}
MediaInfo\footnote{by the famous Zenitram of DaLFP.} is a utility
used for retrieving technical information and other
metadata about audio or video files.
\end{quote}

Et avec du \textbf{Zenitram} dedans \textit{:)}

% --------------------------------------------------------------------
\section{MPV}	\index{MPV}

\begin{quote}
mpv is a media player based on MPlayer and mplayer2. It supports a wide
variety of video file formats, audio and  video  codecs,  and  subtitle
types. Special input URL types are available to read input from a variety
of sources other than disk files. Depending on platform, a  variety
of different video and audio output methods are supported.
\end {quote}

Un avantage de Mpv sur ses camarades (Mplayer, Ffplay\dots) est évident 
dès que l'on joue une vidéo en boucle~: la transition entre la fin
et le début est propre.

% --------------------------------------------------------------------

\section{Autres trucs}

La video informatique, c'est d'une complexité effarante. La multitude
de codecs, la foultitude de containers, et les nombreuses variantes de
combinaisons codec/container rendent la compréhension de cet univers
assez perturbante. 

\texttt{flvstreamer -r rtmp://lacantine.live-fstreams.cdn02.rambla.be:1935/live-lacantine/live-lacantine-2 | mplayer -}
\index{rtmp}

\texttt{encodedv} - encode a series of images to a digital video stream
\index{encodedv}

% --------------------------------------------------------------------






