🌿 En bourgeon · Vidéo Web · 4 juillet 2024
A partir d’une vidéo de haute qualité, produire ces deux formats :
-vp9.webm
ffmpeg -i "$i" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 1 -an -f null /dev/null && \ ffmpeg -i "$i" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 2 -an "${i%.*}-vp9.webm"
Avec audio : sur la 2e passe remplacer -an
par -c:a libopus -b:a 64k
.
-compat.mp4
ffmpeg -i "$i" -c:v libx264 -profile:v main -level 3.1 -pix_fmt:v yuv420p -movflags faststart -an "${i%.*}-compat.mp4"
Avec audio : remplacer -an
par -c:a aac
.
La vidéo MP4 peut parfois être très lourde. Pour limiter sa résolution, ajouter -vf scale=-2:480
pour 480p par exemple.
Il serait possible d’être encore plus compatible avec le profil baseline
et l’AVC level 3, mais les paramètres proposés sont suffisants pour iOS depuis un moment.
Sur Mac, appeler le fichier script.command
par exemple.
Le placer dans le dossier au-dessus des vidéos.
Le code n’est pas élégant, je suis ouvert aux suggestions.
#!/bin/bash mydir="$(dirname "$BASH_SOURCE")" cd "$mydir" printf "Choisir un dossier contenant des vidéos :\n" select d in */; do test -n "$d" && break; echo "Sélection invalide, entrer le numéro du dossier."; done cd "$d" pwd echo "Activer la piste audio ? (y/n)" read -r keep_audio echo "Convertir en (1) vp9 (2) h264 (3) vp9 et h264 ? (1/2/3)" read -r convert_to if [[ $convert_to != "1" ]]; then echo "Scale h264 video to 480p? (y/n)" read -r scale_down fi for i in *.{mp4,webm} do if [[ -f "$i" ]]; then if [[ $convert_to != "2" ]]; then echo "Conversion de $i en ${i%.*}-vp9.webm..." if [[ $keep_audio == "y" ]]; then ffmpeg -loglevel warning -i "$i" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 1 -an -f null /dev/null ffmpeg -loglevel warning -i "$i" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 2 -c:a libopus -b:a 64k "${i%.*}-vp9.webm" else ffmpeg -loglevel warning -i "$i" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 1 -an -f null /dev/null && \ ffmpeg -loglevel warning -i "$i" -c:v libvpx-vp9 -b:v 0 -crf 30 -pass 2 -an "${i%.*}-vp9.webm" fi fi if [[ $convert_to != "1" ]]; then echo "Conversion de $i en ${i%.*}-compat.mp4..." if [[ $keep_audio == "y" ]]; then if [[ $scale_down == "y" ]]; then ffmpeg -loglevel warning -i "$i" -c:v libx264 -profile:v main -level 3.1 -pix_fmt:v yuv420p -movflags faststart -vf scale=-2:480 -c:a aac "${i%.*}-compat.mp4" else ffmpeg -loglevel warning -i "$i" -c:v libx264 -profile:v main -level 3.1 -pix_fmt:v yuv420p -movflags faststart -c:a aac "${i%.*}-compat.mp4" fi else if [[ $scale_down == "y" ]]; then ffmpeg -loglevel warning -i "$i" -c:v libx264 -profile:v main -level 3.1 -pix_fmt:v yuv420p -movflags faststart -vf scale=-2:480 -an "${i%.*}-compat.mp4" else ffmpeg -loglevel warning -i "$i" -c:v libx264 -profile:v main -level 3.1 -pix_fmt:v yuv420p -movflags faststart -an "${i%.*}-compat.mp4" fi fi fi fi done
<video> <source src="video-vp9.webm" type='video/webm; codecs="vp9, vorbis"'> <source src="video-compat.mp4" type="video/mp4"> </video>
Non testé.
ffmpeg -i "$i" -ss 00:00:00 -vframes 1 "${i%.*}-thumb.webp"