Aller au contenu principal
Emir Chouchane - Carnet de notes

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

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 :

  1. Copiez le code dans un fichier (par exemple convert.sh)
  2. Donnez-lui les permissions d’exécution :
    chmod +x convert.sh
  3. Lancez-le :
    ./convert.sh