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.
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 :
Marre des agences qui sous-traitent ?
Avec moi, vous parlez directement au développeur qui fait le travail. Pas d'intermédiaire, pas de promesses creuses. Juste du code propre et un interlocuteur joignable.
Travaillons directement ensemble →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.
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
findavec-type fpour analyser toute l’arborescence. - Ne traiter que les MP4 : ajoutez les extensions réellement présentes dans votre dossier.
- Utiliser
date -dpour 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
-print0etread -d ''. - Parser la sortie complète de FFmpeg : utilisez plutôt
ffprobeavecformat=duration.
Articles connexes
Si vous travaillez souvent avec des fichiers vidéo, ces articles peuvent aussi vous servir :
- Caster des contenus vidéos sur une télévision
- NAS Synology : regarder les vidéos du NAS directement sur la Freebox en DLNA
- Linux : récupérer des vidéos depuis votre terminal avec MovGrab
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
- FFmpeg — Documentation officielle de ffprobe
- FFmpeg — Options avancées de ffprobe
- MediaInfo — liste officielle des champs
- MediaArea — dépôt officiel MediaInfo
Besoin d'un coup de main ?
Ce bug qui traîne depuis des semaines, ce plugin qui casse votre mise en page, cette fonctionnalité que personne n'arrive à implémenter proprement — c'est exactement ce que je règle au quotidien depuis 20 ans.
Parlons de votre problème →
