Exiftool est un outil pour lire, écrire et éditer les métadonnées des fichiers multimédias, y compris les fichiers vidéo. Il faut donc commencer par l’installer si ce n’est pas déjà fait :

sudo apt install exiftool

En fonction de votre distribution vous adapterez.

AVERTISSEMENT !

  • Toujours avoir une sauvegarde des fichiers à modifier.
  • Comme nous allons utiliser également la commande "find", qui est récursive, mettre vos fichiers à modifier dans un répertoire sans sous-répertoire.

Voici la commande :

find . -iname "*.mp4" -exec exiftool '-filename<CreateDate' -d "%Y-%m%d-%Hh%Mm%Ss-Nom_de_votre_choix.mp4" {} +

Explication de la commande

find . -iname "*.mp4" : Trouve tous les fichiers avec l'extension .mp4 (avec -iname, peu importe la casse de mp4) soit dans le répertoire courant et ses sous-répertoires (d’où l’avertissement plus haut).
-exec exiftool '-filename<CreateDate' : Utilise exiftool pour renommer chaque fichier en utilisant la valeur de CreateDate.
-d "%Y-%m%d-%Hh%Mm%Ss-Nom_de_votre_choix.mp4" : Spécifie le format du nom de fichier de sortie. Ici, %Y, %m, %d, %Hh, %Mm, %Ss sont des formatages pour l'année, le mois, le jour, l’heure, la minute et la seconde de création, et Nom_de_votre_choix" est une chaîne fixe que vous pouvez modifier, bref, le nom que vous souhaitez donner
{} : Représente chaque fichier trouvé par find.
+ : Permet d'exécuter une seule commande exiftool pour tous les fichiers trouvés

Exemple concret

J’ai un répertoire "Work" dans lequel se trouve plusieurs sous-répertoires dont un qui s’appelle "vid"
J’ai mis une copie de mes vidéos à renommer dans le répertoire "vid"

Je me positionne sur le répertoire en question

cd Work/vid

Je vérifie :

ls
20240611_100113.mp4  20240611_104333.mp4  20240612_120842.mp4  20240612_154830.mp4
20240611_104308.mp4  20240611_144029.mp4  20240612_154728.mp4  20240612_204306.mp4
20240611_104323.mp4  20240612_120121.mp4  20240612_154803.mp4

Mes vidéos sont bien là et il n’y a pas de sous-répertoire.

On lance la commande :

find . -iname "*.mp4" -exec exiftool '-filename<CreateDate' -d "%Y-%m%d-%Hh%Mm%Ss-Nom_de_votre_choix.mp4" {} +
   11 image files updated

Vérification :

ls
2024-0611-08h01m52s-Nom_de_votre_choix.mp4  2024-0611-12h40m44s-Nom_de_votre_choix.mp4  2024-0612-13h48m16s-Nom_de_votre_choix.mp4
2024-0611-08h43m19s-Nom_de_votre_choix.mp4  2024-0612-10h01m35s-Nom_de_votre_choix.mp4  2024-0612-13h48m49s-Nom_de_votre_choix.mp4
2024-0611-08h43m28s-Nom_de_votre_choix.mp4  2024-0612-10h09m01s-Nom_de_votre_choix.mp4  2024-0612-18h43m10s-Nom_de_votre_choix.mp4
2024-0611-08h43m38s-Nom_de_votre_choix.mp4  2024-0612-13h47m42s-Nom_de_votre_choix.mp4

Pour que ce soit plus parlant on remplace Nom_de_votre_choix par Vacances

find . -iname "*.mp4" -exec exiftool '-filename<CreateDate' -d "%Y-%m%d-%Hh%Mm%Ss-Vacances.mp4" {} +
   11 image files updated
ls
2024-0611-08h01m52s-Vacances.mp4  2024-0611-08h43m38s-Vacances.mp4  2024-0612-10h09m01s-Vacances.mp4  2024-0612-13h48m49s-Vacances.mp4
2024-0611-08h43m19s-Vacances.mp4  2024-0611-12h40m44s-Vacances.mp4  2024-0612-13h47m42s-Vacances.mp4  2024-0612-18h43m10s-Vacances.mp4
2024-0611-08h43m28s-Vacances.mp4  2024-0612-10h01m35s-Vacances.mp4  2024-0612-13h48m16s-Vacances.mp4

C’est terminé !

Hé Sima, et la deuxième possibilité.
Ha oui, j’allais oublier.

J’avais pensé à utiliser ffmpeg ou plus précisément  ffprobe qui est inclus dans ffmpeg et permet d’extraire les métadonnées.

Mais j’avoue ne pas avoir trouvé comment le faire en une ligne.

Soit, dans un script c’est possible.

On extrait les métadonnées avec ffprobe, puis utiliser structure conditionnelle if else fi pour traiter/formater les données et renvoyer vers un find incluant  bash -c 'rename_file "$0"'

Bref, l’idée est là, un truc de ce genre, mais comme j’ai une ligne qui fait le job, je ne me suis pas creusé la tête pour créer un script.

Vous avez une d'autres idées en ligne de commande? des questions? n'hésitez pas à utiliser les commentaires.

Le bille "Renommer vos videos par lot en utilisant les metadonnees" est apparu en premier sur le blog de Sima78.