Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Exportation des mots-clés par image
#5
J'ai, entre-temps ,terminé mon script, mais je serais curieux de jeter un coup d'oeil sur le tien, surtout la partie extraction des tags des XMP. J'avoue que je suis à la peine dans le traitement de structures XML et JSON.

Voici le mien à adapter selon vos arborescences. Exiftool n'est pas très véloce en exécution  depuis awk, mais soit, il fait ce qu'on lui demande.

Code :
#!/bin/dash

DATA_DB="/home/jeanluc/scripts/darktable/data/data.db"
LIBRARY_DB="/home/jeanluc/scripts/darktable/data/library.db"
JPEG_DIR="/data/photos_jpg/"

# Extraction des tags
sqlite3 -separator ";" $LIBRARY_DB \
"ATTACH '$DATA_DB' as data;
SELECT i.filename, ti.tagid, t.name
    FROM tagged_images ti
    JOIN images i ON ti.imgid=i.id
    JOIN data.tags t ON ti.tagid=t.id
    WHERE t.name NOT LIKE 'darktable%'
    ORDER BY i.filename DESC;
" > /tmp/tags

# Liste des JPG à tagger
ls $JPEG_DIR > /tmp/jpegs

awk -F";" -v jpeg_dir=$JPEG_DIR '

# Concaténation des tags pour un RAW donné séparés par une virgule (premier fichier en entrée)
FNR == NR {    delimiter = ""
    if (filenames[$1]) {
        delimiter = ","
    }
    filenames[$1] = filenames[$1] delimiter $3
}

# Liste des jpeg du boîtier (deuxième fichier en entrée)
FNR != NR {
    jpegs[$0] = 1
}

END {

    # Boucle sur les RAW avec tags
    for ( filename in filenames ) {
        # nom sans extension (remplace ORF par JPG)
        jpeg_name = gensub(/\..+/, ".JPG", "g", filename)

        # Si le JPG existe, injection des tags
        if (jpegs[jpeg_name]) {
            counter+=1
            printf("\n%s\n", counter)
            cmd = sprintf("exiftool -preserve -overwrite_original -subject=\047%s\047 %s%s", filenames[filename], jpeg_dir, jpeg_name)
            print cmd
            system(cmd)
        }
    }
}
' /tmp/tags /tmp/jpegs
Répondre


Messages dans ce sujet
RE: Exportation des mots-clés par image - par JeanLucLacroix - 14-01-23, 19:01

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)