TetaTricks/chap/video.tex
2024-01-11 02:07:04 +01:00

258 lines
8.1 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\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 vari
ety 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.
\subsection{rtmp} \index{rtmp}
\texttt{flvstreamer -r rtmp://lacantine.live-fstreams.cdn02.rambla.be:1935/live-lacantine/live-lacantine-2 | mplayer -}
% --------------------------------------------------------------------