2020-09-29 19:41:53 +11:00
|
|
|
|
\chapter{Vidéo}
|
|
|
|
|
\label{chap:video}
|
|
|
|
|
|
2020-11-02 05:32:45 +11:00
|
|
|
|
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).
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
2022-01-20 09:31:51 +11:00
|
|
|
|
% https://unixsheikh.com/tutorials/remuxing-iso-dvd-or-bluray-using-cat-and-ffmpeg-on-linux.html
|
|
|
|
|
|
2020-09-29 19:41:53 +11:00
|
|
|
|
% --------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
\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}
|
|
|
|
|
|
|
|
|
|
% --------------------------------------------------------------------
|
2022-12-17 06:41:32 +11:00
|
|
|
|
%
|
|
|
|
|
% <doug> https://img.ly/blog/ultimate-guide-to-ffmpeg/
|
|
|
|
|
%
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
|
|
|
|
\section{ffmpeg}
|
|
|
|
|
\index{ffmpeg}
|
|
|
|
|
|
|
|
|
|
D'après certaines rumeurs des intertubes, ce serait un peu le remplaçant
|
2021-05-04 19:33:30 +11:00
|
|
|
|
de mencoder pour pas mal de trucs, et d'après d'autres rumeurs
|
|
|
|
|
(je confirme clairement) c'est vraiment tortueux à utiliser.
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
|
|
|
|
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}
|
|
|
|
|
|
2023-06-29 20:23:11 +11:00
|
|
|
|
Extraire les images individuelles, dans le but avoué de les maltraiter
|
|
|
|
|
avec d'ignobles logiciels~:
|
2022-10-05 15:08:23 +11:00
|
|
|
|
|
|
|
|
|
\texttt{ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-\%03d.jpeg}
|
|
|
|
|
|
2024-01-11 12:07:04 +11:00
|
|
|
|
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é~:
|
2020-09-29 19:41:53 +11:00
|
|
|
|
\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.
|
|
|
|
|
|
2024-01-11 12:07:04 +11:00
|
|
|
|
|
|
|
|
|
|
2020-09-29 19:41:53 +11:00
|
|
|
|
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}
|
|
|
|
|
|
2020-10-27 09:06:17 +11:00
|
|
|
|
|
|
|
|
|
\subsection{quelques trucs en vrac}
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
|
|
|
|
\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}
|
|
|
|
|
|
2021-01-20 14:53:48 +11:00
|
|
|
|
https://engineering.giphy.com/how-to-make-gifs-with-ffmpeg/ \index{gif89a}
|
|
|
|
|
|
2023-03-21 10:16:54 +11:00
|
|
|
|
\begin{verbatim}
|
2023-06-29 20:23:11 +11:00
|
|
|
|
ffmpeg -ss 0:5:59.600 -to 0:6:11.150 -i Downloads/foo.mp4 /tmp/tragic.gif
|
2023-03-21 10:16:54 +11:00
|
|
|
|
\end{verbatim}
|
|
|
|
|
|
|
|
|
|
% -----------------------------------------------------------------
|
|
|
|
|
|
2020-10-27 09:06:17 +11:00
|
|
|
|
\subsection{Encoder un cloître}
|
|
|
|
|
|
|
|
|
|
Là, nous sommes dans du \textsl{serious bizness}, puisque cette vidéo
|
2021-10-20 04:07:28 +11:00
|
|
|
|
a été programmée par James Lewis pour la résidence « Sonoptic 2020 »,
|
|
|
|
|
vidéo dont il a composé la bande originale.
|
2021-01-20 14:53:48 +11:00
|
|
|
|
C'est donc un exemple réel, avec même des méta-données.
|
2020-10-27 09:06:17 +11:00
|
|
|
|
|
|
|
|
|
\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}
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
2023-09-04 05:30:43 +11:00
|
|
|
|
OMFG! Il manque le son.
|
|
|
|
|
|
|
|
|
|
% -----------------------------------------------------------------
|
|
|
|
|
|
2023-10-09 06:56:41 +11:00
|
|
|
|
\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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
% -----------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
2020-11-02 05:32:45 +11:00
|
|
|
|
\subsection{Questions}
|
|
|
|
|
|
2021-05-04 19:33:30 +11:00
|
|
|
|
Comment convertir lors de l'encodage un fichier \texttt{.WAV}
|
|
|
|
|
en un format compressé afin de ne pas saturer la buvette ?
|
2021-10-20 04:07:28 +11:00
|
|
|
|
\textsf{il dit qu'il ne comprend pas la question.}
|
2021-05-04 19:33:30 +11:00
|
|
|
|
|
2021-01-20 14:53:48 +11:00
|
|
|
|
Quand on encode en // images et son, comment arreter quand on atteint
|
2021-03-18 05:24:30 +11:00
|
|
|
|
la fin du plus court des deux flux ?
|
|
|
|
|
\textit{look up the options -shortest and -apad}
|
2021-01-20 14:53:48 +11:00
|
|
|
|
|
|
|
|
|
Comment limiter le nombre de \textsl{cores} utilisés lors d'un encodage
|
2021-10-16 08:22:38 +11:00
|
|
|
|
violent sur une toute petite machine\footnote{Coucou le défunt Vaio :)} ?
|
|
|
|
|
|
2022-02-16 10:53:49 +11:00
|
|
|
|
ffmpeg -f x11grab -video\_size cif -framerate 25 -i :0.0 /tmp/out.mpg
|
|
|
|
|
|
2021-10-16 08:22:38 +11:00
|
|
|
|
% --------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
\section{VLC} \index{vlc}
|
|
|
|
|
|
|
|
|
|
VLC est un peu le couteau suisse à 112 lames du multimédia.
|
2023-09-04 05:30:43 +11:00
|
|
|
|
Son emblème est un cône de chantier, je ne sais pas
|
2021-10-16 08:22:38 +11:00
|
|
|
|
si ça a un sens caché. Mais soyons sérieux deux minutes.
|
2023-09-04 05:30:43 +11:00
|
|
|
|
VLC propose une interface \textsl{clickconvi},
|
|
|
|
|
que nous allons
|
2021-10-16 08:22:38 +11:00
|
|
|
|
soigneusement éviter, pour nous concentrer sur la ligne
|
|
|
|
|
de commande.
|
|
|
|
|
|
|
|
|
|
Pour balancer toutes les vidéos en boucle random~:
|
2021-10-20 04:07:28 +11:00
|
|
|
|
\texttt{vlc -f -Z *.mp4}. Mais comment supprimer l'affichage
|
|
|
|
|
du nom de fichier au début de chaque séquence ?
|
2021-10-16 08:22:38 +11:00
|
|
|
|
|
|
|
|
|
VLC peut éventuellement aussi être utilisé comme un outil
|
2021-10-20 04:07:28 +11:00
|
|
|
|
de streaming, voyez ça page \pageref{streamvlc}, bon courage.
|
2020-11-02 05:32:45 +11:00
|
|
|
|
|
2020-09-29 19:41:53 +11:00
|
|
|
|
% --------------------------------------------------------------------
|
2022-03-19 07:40:44 +11:00
|
|
|
|
\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}
|
|
|
|
|
|
2023-09-04 05:30:43 +11:00
|
|
|
|
Et avec du \textbf{Zenitram} dedans \textit{:)}
|
|
|
|
|
|
2022-03-19 07:40:44 +11:00
|
|
|
|
% --------------------------------------------------------------------
|
2022-10-05 15:08:23 +11:00
|
|
|
|
\section{MPV} \index{MPV}
|
2022-03-19 07:40:44 +11:00
|
|
|
|
|
2022-10-05 15:08:23 +11:00
|
|
|
|
\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}
|
|
|
|
|
|
2023-09-04 05:30:43 +11:00
|
|
|
|
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.
|
|
|
|
|
|
2022-10-05 15:08:23 +11:00
|
|
|
|
% --------------------------------------------------------------------
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
|
|
|
|
\section{Autres trucs}
|
|
|
|
|
|
2021-01-20 14:53:48 +11:00
|
|
|
|
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}
|
2020-09-29 19:41:53 +11:00
|
|
|
|
|
|
|
|
|
\texttt{flvstreamer -r rtmp://lacantine.live-fstreams.cdn02.rambla.be:1935/live-lacantine/live-lacantine-2 | mplayer -}
|
|
|
|
|
|
|
|
|
|
% --------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|