Calculer la durée totale des vidéos d’un dossier avec ffprobe

Vous avez un dossier rempli de vidéos et vous voulez connaître leur durée totale ? C’est typiquement le genre de besoin qui arrive quand on prépare une formation en ligne, une bibliothèque de replays, un cours vidéo ou une fiche produit.

Compter les fichiers, c’est facile. Additionner proprement leurs durées, c’est déjà plus drôle. Heureusement, quelques commandes suffisent pour obtenir un total fiable, sans ouvrir chaque vidéo à la main comme un moine copiste du MP4.

La méthode la plus robuste consiste à utiliser ffprobe, l’outil d’analyse fourni avec FFmpeg. Il lit les métadonnées des fichiers audio et vidéo, puis retourne leur durée dans un format facile à additionner.

Distingo, le livret à 2%

Installer ffprobe

ffprobe est installé avec FFmpeg. Sous Ubuntu ou Debian, installez le paquet ffmpeg :

sudo apt update
sudo apt install ffmpeg

Sur macOS, avec Homebrew :

brew install ffmpeg

Vous pouvez ensuite vérifier que ffprobe répond correctement :

ffprobe -version

Calculer la durée d’une seule vidéo

Avant d’additionner tout un dossier, commençons par une seule vidéo. Cette commande retourne la durée du fichier en secondes :

ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 video.mp4Code language: JavaScript (javascript)

Exemple de résultat :

2286.120000Code language: CSS (css)

Ici, la vidéo dure environ 2 286 secondes, soit 38 minutes et 6 secondes.

Calculer la durée totale des vidéos MP4 du dossier courant

Si toutes vos vidéos sont dans le même dossier et utilisent l’extension .mp4, placez-vous dans ce dossier :

cd /chemin/vers/mes-videos

Puis lancez cette commande :

for file in *.mp4; do
    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file"
done | awk '
{
    total += $1
}
END {
    hours = int(total / 3600)
    minutes = int((total % 3600) / 60)
    seconds = int(total % 60)

    printf "%02d:%02d:%02d\n", hours, minutes, seconds
}'Code language: PHP (php)

Exemple de résultat :

21:03:48Code language: CSS (css)

Dans cet exemple, le dossier contient donc un peu plus de 21 heures de vidéo.

Calculer la durée totale avec les sous-dossiers

Dans la vraie vie, les vidéos sont rarement toutes rangées gentiment dans un seul dossier. On trouve souvent des sous-dossiers par module, par semaine ou par chapitre.

Voici une version récursive, qui parcourt aussi les sous-dossiers :

find . -type f -iname '*.mp4' -print0 |
while IFS= read -r -d '' file; do
    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file" 2>/dev/null
done | awk '
{
    total += $1
}
END {
    hours = int(total / 3600)
    minutes = int((total % 3600) / 60)
    seconds = int(total % 60)

    printf "%02d:%02d:%02d\n", hours, minutes, seconds
}'Code language: PHP (php)

Cette commande utilise find avec -print0 afin de gérer correctement les noms de fichiers contenant des espaces, des apostrophes ou des caractères un peu exotiques.

Distingo, le livret à 2%

Inclure plusieurs formats vidéo

Si votre dossier contient plusieurs formats, par exemple .mp4, .mkv, .mov et .webm, utilisez cette variante :

find . -type f \( \
    -iname '*.mp4' -o \
    -iname '*.mkv' -o \
    -iname '*.mov' -o \
    -iname '*.webm' -o \
    -iname '*.avi' \
\) -print0 |
while IFS= read -r -d '' file; do
    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file" 2>/dev/null
done | awk '
{
    total += $1
}
END {
    hours = int(total / 3600)
    minutes = int((total % 3600) / 60)
    seconds = int(total % 60)

    printf "%02d:%02d:%02d\n", hours, minutes, seconds
}'Code language: PHP (php)

Vous pouvez ajouter ou retirer des extensions selon votre bibliothèque.

Afficher aussi la durée de chaque fichier

Pour auditer un dossier, il peut être utile d’afficher chaque fichier avec sa durée, puis le total à la fin.

find . -type f \( \
    -iname '*.mp4' -o \
    -iname '*.mkv' -o \
    -iname '*.mov' -o \
    -iname '*.webm' \
\) -print0 |
while IFS= read -r -d '' file; do
    duration="$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file" 2>/dev/null)"

    if [ -n "$duration" ]; then
        printf "%s\t%s\n" "$duration" "$file"
    fi
done | awk '
{
    duration = int($1)
    total += duration

    hours = int(duration / 3600)
    minutes = int((duration % 3600) / 60)
    seconds = int(duration % 60)

    $1 = ""
    sub(/^\t? */, "")

    printf "%02d:%02d:%02d  %s\n", hours, minutes, seconds, $0
}
END {
    total_hours = int(total / 3600)
    total_minutes = int((total % 3600) / 60)
    total_seconds = int(total % 60)

    printf "\nTotal: %02d:%02d:%02d\n", total_hours, total_minutes, total_seconds
}'Code language: PHP (php)

Cette version est plus bavarde, mais elle permet de repérer rapidement les fichiers très courts, les doublons ou les vidéos oubliées dans un sous-dossier.

Créer un petit script réutilisable

Si vous faites souvent ce calcul, créez un script nommé video-duration-total :

nano video-duration-total

Collez ce contenu :

#!/usr/bin/env bash

set -o errexit
set -o nounset
set -o pipefail

target_dir="${1:-.}"

if ! command -v ffprobe >/dev/null 2>&1; then
    echo "Erreur : ffprobe est introuvable. Installez ffmpeg." >&2
    exit 1
fi

find "$target_dir" -type f \( \
    -iname '*.mp4' -o \
    -iname '*.mkv' -o \
    -iname '*.mov' -o \
    -iname '*.webm' -o \
    -iname '*.avi' \
\) -print0 |
while IFS= read -r -d '' file; do
    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$file" 2>/dev/null || true
done | awk '
/^[0-9]+(\.[0-9]+)?$/ {
    total += $1
}
END {
    hours = int(total / 3600)
    minutes = int((total % 3600) / 60)
    seconds = int(total % 60)

    printf "%02d:%02d:%02d\n", hours, minutes, seconds
}'Code language: PHP (php)

Rendez-le exécutable :

chmod +x video-duration-total

Puis lancez-le sur le dossier de votre choix :

./video-duration-total /chemin/vers/mes-videos

Vous obtenez une durée totale au format HH:MM:SS.

Alternative avec MediaInfo

MediaInfo reste une très bonne alternative, notamment si vous l’utilisez déjà pour inspecter vos fichiers vidéo.

Sous Ubuntu ou Debian :

sudo apt update
sudo apt install mediainfo

Pour afficher la durée lisible de chaque fichier MP4 :

mediainfo --Output="General;%Duration/String%" *.mp4Code language: JavaScript (javascript)

Pour obtenir une durée exploitable en millisecondes, puis additionner les valeurs :

mediainfo '--Output=General;%Duration%\n' *.mp4 | awk '
{
    total += $1
}
END {
    seconds = total / 1000
    hours = int(seconds / 3600)
    minutes = int((seconds % 3600) / 60)
    secs = int(seconds % 60)

    printf "%02d:%02d:%02d\n", hours, minutes, secs
}'Code language: PHP (php)

Cette commande reprend l’idée de l’ancienne méthode, mais elle additionne les durées numériques plutôt que des chaînes lisibles. C’est plus propre, et surtout moins cassant.

Version Windows avec PowerShell

Sous Windows, vous pouvez aussi utiliser ffprobe.exe depuis PowerShell. Une fois FFmpeg installé et disponible dans le PATH, placez-vous dans le dossier de vos vidéos :

cd "C:\chemin\vers\mes-videos"Code language: JavaScript (javascript)

Puis lancez :

$total = 0

Get-ChildItem -Recurse -File -Include *.mp4, *.mkv, *.mov, *.webm, *.avi | ForEach-Object {
    $duration = & ffprobe.exe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $_.FullName

    if ($duration) {
        $total += [double]$duration
    }
}

[TimeSpan]::FromSeconds($total).ToString()Code language: PHP (php)

PowerShell retourne alors une durée totale lisible, par exemple :

21:03:48Code language: CSS (css)

ffprobe ou MediaInfo : lequel choisir ?

Utilisez ffprobe si vous voulez une commande facile à automatiser, compatible avec beaucoup de formats, et directement exploitable dans des scripts.

Utilisez mediainfo si vous souhaitez surtout inspecter les détails techniques des fichiers, ou si vous avez déjà MediaInfo installé sur votre poste.

Dans les deux cas, évitez de parser la sortie texte complète de ffmpeg -i. Cela fonctionne parfois, mais c’est fragile. Mieux vaut demander directement le champ de durée dont vous avez besoin.

Cas d’usage : durée totale d’une formation en ligne

Ce calcul est très pratique pour préparer une page de vente ou une fiche de formation. Au lieu d’annoncer vaguement “plusieurs heures de vidéo”, vous pouvez indiquer une durée précise :

  • durée totale du cours ;
  • durée par module ;
  • durée moyenne des leçons ;
  • nombre de vidéos ;
  • volume total de contenu disponible.

Pour un cours en ligne, cette information rassure l’utilisateur. Elle permet aussi de mieux structurer votre offre, surtout si vous comparez plusieurs niveaux, packs ou modules.

Erreurs fréquentes

  • Oublier les sous-dossiers : utilisez find avec -type f pour analyser toute l’arborescence.
  • Ne traiter que les MP4 : ajoutez les extensions réellement présentes dans votre dossier.
  • Utiliser date -d pour formater le total : cela peut casser au-delà de 24 heures ou selon le système.
  • Ne pas gérer les espaces dans les noms de fichiers : préférez -print0 et read -d ''.
  • Parser la sortie complète de FFmpeg : utilisez plutôt ffprobe avec format=duration.

Articles connexes

Si vous travaillez souvent avec des fichiers vidéo, ces articles peuvent aussi vous servir :

FAQ

Comment calculer la durée totale des vidéos d’un dossier ?

Utilisez ffprobe pour extraire la durée de chaque fichier en secondes, puis additionnez les valeurs avec awk. Pour inclure les sous-dossiers, combinez find et ffprobe.

Est-ce que cette méthode fonctionne avec les fichiers MKV ou MOV ?

Oui. ffprobe fonctionne avec de nombreux conteneurs vidéo, dont MP4, MKV, MOV, WebM et AVI. Il suffit d’ajouter les extensions souhaitées dans la commande find.

Pourquoi utiliser ffprobe plutôt que ffmpeg ?

ffmpeg sert surtout à convertir, encoder ou manipuler des médias. ffprobe sert à lire leurs métadonnées. Pour récupérer une durée dans un script, ffprobe est donc plus propre.

La durée affichée est-elle toujours parfaitement exacte ?

Elle dépend des métadonnées du conteneur. Pour des fichiers correctement encodés, elle est généralement fiable. Si un fichier est corrompu ou mal finalisé, sa durée peut être absente ou incorrecte.

Peut-on calculer une durée totale supérieure à 24 heures ?

Oui. Les commandes proposées utilisent un calcul manuel avec awk, ce qui permet d’afficher des totaux supérieurs à 24 heures sans repasser à zéro.

Sources

Demandez à l'IA son opinion
Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

Opinions