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