Cette page est une accmulation de notes prises avec le temps pour mes usages personnels, je vais l'étoffer avec le temps.
Table of Content
Vidéo
Capture avec Vokoscreen(-ng), en encapsulation mkv, audio flac, vidéo x264 qualitté 5 ou moins. mkv est forcé sous les versions récentes de vokoscreen, wp-recorder utilise aussi le mkv par défaut.
Sous X11/X.org on peut utiliser Vokoscreen-ng, sous wayland c'est plus compliqué, cela dépend du compositeur.
Sous Wayland:
- Les bureaux KDE Plasma, LxQt, basés sur Qt, utiliser les outils intégrés.
- Le bureau Gnome basé sur GTK et possédant son propre compositeur utiliser les outils intégrés.
- Avec tous les autres bureaux, basés sur wl-roots, voir la section suivante. Cela concerne, XFCE, wlab, Sway, Hyprland, etc.
Capture avec wf-records avec wl-roots
wf-recorder permet d'enregistrer tout l'écran ou une zone. La zone est définie à l'aide à l'aid du paramètre --geometry
Par défaut, la destionation sera ~/Vidéos/recording.mkv
Par exemple, pour la position à l'écran (en pixels) de 611,368, avec une taille de 720×347 pixels :
wf-recoreder --geometry "611,368 720x347"
La ligne suivante permet de capturer une fenêtre dans un compositeur basés sur wl-roots (cela ne marche pas avec toutes les fenêtres)
wf-recorder --geometry "`xwininfo | awk '/geometry/{print $2}' | sed 's/+/ /' | sed 's/+/,/' | awk '{print $2,$1}'`"
Ajout d'anotations lors du screencast
- gromit-mpx (github) permet de dessiner en overtlay de l'écran, pour mettre en avant des choses essentielles. (AUR: gromit-mx).
- key-mon (github) sur pypi permet de visualiser les touches clavier pressées lors de la capture vidéo (AUR: key-mon).
Capture audio via micro ou autre
Pour trouver le périphérique utiliser arecord d'alsa-utils par exemple dans ce cas, la sortie sera :
arecord -l
-> Sous-périphérique #0 : subdevice #0
Cela correspondra sous ffmpeg au hardware:0,0 c'est à dire ``hw:${subperiph},${subdevice}
ffmpeg -f alsa -t 10 -i hw:0,0 out.wav
- Quand utilisé avant -i : limite les données lues, avant la sortie, arrête d'écrire au temps t (durée t)
- Voir: https://ffmpeg.org/ffmpeg-utils.html#time-duration-syntax
Séparer en un fichier audio et un vidéo
file=VokoscreenNGxxxxxx
intermediaire=nom_intermediaire
# extraction de la vidéo
ffmpeg -i $file.mkv -vcodec copy -an $intermediaire.mp4
# extraire de l'audio :
ffmpeg -i $file.mkv -vn -acodec copy $intermediaire.flac
Normalisation de l'audio via Audacity
audacity $intermediaire.flac
- normaliser:
Menu Effets → Volumet et compression → Normaliser
- Débruiter
Menu Effets → Réduction du bruit et réparation → Réduction du Bruit.
-
Si possible faire une première passe en sélectionant une partie de bruit de fond blanc, puis une deuxième qui n'en sera que plus efficace.
-
Si besoin, vocoder
Menu Effets → Mixer différents effets (attention accélération/décélération/inversion facilement reversible.
- sauvegarder en opus
Remixage
Il y a différentes options selon les codecs, mais le principe esst le même :
ffmpeg -i video_file -i audio_file -c:v ${codec_video} ${settings_codec_video} -acodec copy ${fichierfinale}.${ext}
Encodage dans différents formats
x264 (H.264)
Veryslow est beaucoup plus long, mais très efficace, si c'est une vidéo un peu longue, un encodage en double pass s'impose. Pour une vidéo courte de screencast, cela peut suffir:
ffmpeg -i $intermediaire.mp4 -i $intermédiare.opus -c:v libx264 -preset veryslow -acodec copy ${file}-final.mp4
VP9
ffmpeg -i $intermediaire.mp4 -i $intermédiare.opus -c:v vp9 -threads 4 -row-mt 1 -acodec copy $file.mp4
Plus rapide et plus compact
ffmpeg -i $intermediaire.mp4 -i $intermédiare.opus -c:v vp9 -acodec copy $file.mp4
x265
ffmpeg -i $intermediaire.mp4 -i $intermédiare.opus -c:v libx265 -acodec copy $file.mp4
AV1
AV1 (libsvt-avi1)
Paquet : Arch: svt-av1
ffmpeg -i "$src" -an -c:v libsvtav1 $3 $4 "$dst"
AV1 (Rav1e)
Paquet : Arch: rav1e
ffmpeg -i "$src" -c:a libopus -c:v librav1e -preset veryslow "$dst"
AV1 (libaom-av1)
Paquet : Arch: aom
ffmpeg -i "$src" -c:a libopus -c:v libaom-av1 -preset veryslow "$dst"
Av1an
Outil d'aide à la compression Av1an
Gif
Via ffmpeg:
ffmpeg -i $input -ss 00:33 -t 00:03 -s 480x272 extrait_video.gif
via ffmpeg mais meilleure sortie via Gisicle pour les couleurs, et mieux qu'Imagemagick
name=particle
ffmpeg -i ${name}.mp4 -filter:v "crop=200:200:0:0" -vsync 0 ${name}%3d.png
Via Gifsicle, meilleur choix
gifsicle --loopcount=forever --optimize --colors 4 *.gif >../${name}_gs.gif
# si colormap (lignes de type "0 255 0" ou bien "#00FF00")
gifsicle --loopcount=forever --optimize --colors 4 --use-colormap colormap *.gif >../${name}_gs2.gif
Via imagemagick, mais moins bon que gifsicle
ls ${name}*.png | while read file; do magick ${name} ${name//png}gif; done
Paramètres d'encodage intéressants
précision à la frame près
-c copy -avoid_negative_ts make_zero
Redimensionnage
-vf scale=960:540
Crop w;h;x;y and scale (/2 et -2 pour s'assurer d'un multiple de 2)
-vf 'crop=1080:1080:0:420,scale=iw*.5:-2'
Plus lent => plus compact ou si bitrate précisé, meilleure qualité -preset veryslow
Bite rate (bufsize pour qu'il s'adapte au débit, pas lié au reste)
-b:v 1000K -maxrate 1000K -bufsize 1M
Formats vectoriels
Crée un PDF multipage depuis plusieurs fichier SVG.
L'importation dans Inkscape des pages une par une peut être fastidieux, trouver une méthode pour automatiser.
- Ouvrir la première page via Inkscape
- Importer une par une les autres pages (en précisant ajouter comme nouvelle page)
- Imprimer → Dans un fichier (PDF)
Il est ensuite possible d'optimiser encore le PDF à l'aide de Ghostscript (paquet ghostscript)
Le format PDFSETTIGNS, supporte screen (plus compact), epub, un peu moins, etc
input=file_in
ouput=file_out
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=${output}.pdf ${input}.pdf
Vecteurs animés
- Voir le billet de mon ancien blog sur Lottie et Glaxnimate (à porter sur ce blog)