\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}

\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}

\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, mais je ne sais pas
si ça a un sens caché. Mais soyons sérieux deux minutes.
VLC propose une interface 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}

% --------------------------------------------------------------------
\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 vari‐
       ety of sources other than disk files. Depending on platform, a  variety
       of different video and audio output methods are supported.
\end {quote}

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

\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. 

\subsection{rtmp} \index{rtmp}

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

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






