Conversion vidéo en lot avec ffmpeg
Avec ffmpeg, il est possible de convertir par lot n’importe quel format de vidéo. Voici un exemple simple pour convertir des fichiers H.265 vers H.264 :
for i in *.mp4 ; do
ffmpeg -i "$i" -c:v libx264 -vf scale=1280:-2 -c:a copy -map 0:0 -map 0:1 "H $i"
sleep 3
done
Explication
for i in *.mp4 ; do
Prend tous les fichiers .mp4 dans le dossier courant. La commande for permet de boucler sur chaque fichier.
ffmpeg -i "$i"
Exécute ffmpeg avec le fichier d’entrée $i.
-map 0:0 -map 0:1
Spécifie uniquement les deux premiers flux : vidéo (0:0) et audio (0:1). Optionnel, mais utile pour éviter d’inclure des pistes inutiles.
-c:v libx264
Définit le codec vidéo. Peut être personnalisé avec des options comme -preset slow, -crf 23, etc.
-vf scale=1280:-2
Redimensionne la vidéo en largeur 1280 pixels et ajuste automatiquement la hauteur pour conserver les proportions.
-c:a copy
Copie directement la piste audio sans ré-encodage.
"H $i"
Crée un nouveau fichier avec le préfixe "H" pour éviter d’écraser le fichier original.
sleep 3
Pause de 3 secondes entre les conversions.
Extraire uniquement l’audio (en AAC)
for i in *.MP4; do
ffmpeg -i "$i" -vn -acodec copy "${i%}.aac"
sleep 3
done
-vn: ignore les flux vidéo-acodec copy: copie l’audio sans le ré-encoder
Script bash multithread
Pour tirer parti de plusieurs cœurs du processeur et lancer plusieurs conversions en parallèle :
#!/bin/bash
function encode {
base="${1%.*}"
extension="${1##*.}"
out="${base}_output.${extension}"
ffmpeg -i "$1" -c:v libx264 -vf scale=1280:-2 -c:a copy -map 0:0 -map 0:1 "$out"
}
encode video1.mp4 &
encode video2.mp4 &
echo "ZZzzzzzzZZzzzzz"
wait
Chaque appel à encode est lancé en arrière-plan grâce au &, et wait force le script à attendre que tous les processus soient terminés.
Pour utiliser ce script :
- Copiez le code dans un fichier (par exemple
convert.sh) - Donnez-lui les permissions d’exécution :
chmod +x convert.sh - Lancez-le :
./convert.sh
- ← Précédent
Premiers pas avec ffmpeg - Suivant →
Comprendre le bitrate et les options d'encodage avec ffmpeg