Je crée une vidéo timelapse en divisant une vidéo en images individuelles, en utilisant G'MIC via la ligne de commande pour faire la moyenne toutes les 7 images, puis en sortant les résultats sur de nouvelles images qui se traduiront par les images pour le timelapse (de cette façon, j'obtiens vidéo sans bruit qui a fière allure). Comme vous pouvez l'imaginer, j'ai beaucoup de cadres - plusieurs milliers d'images individuelles dans un répertoire, nommées séquentiellement (image1.tiff, image2.tiff, etc. ). J'ai trouvé un script qui fonctionne parfaitement pour déplacer les fichiers - une fois…
k=1; find source/ -type f | while read file; do
[[ k++ -le 7 ]] && mv "$file" target/
done
Ce dont j'ai besoin maintenant, c'est de faire ce script
- se répéter jusqu'à ce que tous les fichiers soient déplacés et
- créer des répertoires cibles numérotés séquentiellement (1, 2, 3, etc.) au fur et à mesure, donc je me retrouve avec plusieurs centaines de répertoires contenant chacun 7 images.
Juste pour clarifier, le répertoire 1 devrait contenir les images 1-7, le répertoire 2 devrait contenir les images 8-14, etc.
Toute aide est grandement appréciée, je suis à peu près coincé avec celui-ci.
Réponse acceptée :
Le script (python) ci-dessous crée des sous-dossiers et organise vos fichiers dans les dossiers :
De plus :
- Le script calcule le nombre de dossiers et ajoute des zéros non significatifs aux noms de dossier pour un tri correct (puisque vous avez mentionné des milliers de fichiers, ce qui signifie des centaines de dossiers)
- Le nombre de fichiers par dossier peut varier en fonction de votre configuration dans l'en-tête du script
Le script suppose :
- Tous les fichiers ont une extension, tous les fichiers ont la même extension
- Vos fichiers sont nommés
image1.tiff
,image2.tiff
etc (pas de zéros non significatifs).
Le scénario
#!/usr/bin/env python3
import os
import math
import shutil
#---
directory = "/path/to/files" # path to your files
n_perfolder = 7 # number of files per sub folder
#--
# creating file list, extension
f_list = os.listdir(directory); ext = f_list[0].split(".")[-1]
# calculate number of folders
n_folders = math.ceil(len(f_list)/n_perfolder)
# creating folder names, including leading zeros
folders = [str(fn+1) for fn in range(n_folders)]
fl_names = [(len(max(folders, key=len))-len(fl))*"0"+fl for fl in folders]
# creating folders and allocate files
for i in range(len(fl_names)):
mkfolder = directory+"/"+fl_names[i]
if not os.path.exists(mkfolder):
os.makedirs(mkfolder)
r = range(i*n_perfolder+1, i*n_perfolder+n_perfolder+1)
for n in r:
try:
file = directory+"/"+"image"+str(n)+"."+ext
target = mkfolder+"/"+"image"+str(n)+"."+ext
shutil.copyfile(file, target)
except FileNotFoundError:
pass
Comment utiliser
Copiez le script dans un fichier vide, dans la section head, définissez le répertoire sur vos fichiers et le nombre de fichiers par sous-répertoire, enregistrez-le sous organize.py
.
Exécutez-le par la commande :
python3 /path/to/organize.py
Remarque
Si vous souhaitez déménager les fichiers au lieu de les copier, remplacez la ligne :
shutil.copyfile(file, target)
par :
shutil.move(file, target)
(attention au retrait !)
Connexe :Comment définir la couleur/le motif d'arrière-plan dans une fenêtre Nautilus ?