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