Rinominare con exiftool: come gestire i tag mancanti?


6

Ho a che fare con un grande gruppo di file multimediali non organizzato, catturato usando diverse videocamere e videocamere, e mi piacerebbe usare exiftool in uno script bash per rinominare ogni file con la sua data e ora di creazione, creatore e modello.

Con questo comando le immagini vengono rinominate come voglio:

exiftool -m -P '-filename<${DateTimeOriginal}_${Make}_${Model}.%e' myfile.jpg

So già che posso formattare data e ora usando l'opzione -d FMT, ma lo sto omettendo per chiarezza.

Ecco invece i problemi che sto affrontando con i video DSLR "* .mov":

  1. exiftool sta rilasciando l'estensione .mov, anche se usa ".mov" invece ".% e" nel modello di nome file
  2. quei file non hanno il tag DateTimeOriginal e devo usare il tag MediaCreateDate che altri file non hanno

Qualcuno sa come "forzare" exiftool a utilizzare l'estensione originale .mov?

C'è un modo per dire a exiftool di verificare se esiste o meno un tag exif? E utilizzare un altro tag se il primo non è presente?

Ho provato con qualcosa del genere

if [ -n `exiftool -m -p '$DateTime' filename]
then
...

Ma exiftool mi sta facendo cadere un errore, quindi il controllo della stringa vuota fallisce sempre. Qualche consiglio?


1
In realtà, Phil Harvey, sviluppatore di exiftool, afferma che la caduta dell'estensione ".mov" si verifica a causa dei null finali nel nome del modello: u88.n24.queensu.ca/exiftool/forum/index.php/… Dice che risolverà questo problema .
gerlos,

Risposte:


6

Grazie al feedback di Phil Harvey, lo sviluppatore di exiftool, ha trovato una soluzione davvero semplice al mio problema, che funziona con exiftool 9.30.

Phil dice qui ( http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,5079.msg24483.html#msg24483 ):

L'ultimo incarico valido sostituisce gli altri.

Quindi possiamo fare tutto con un solo comando. Ecco il codice finale:

#!/bin/bash
exiftool -P -d '%Y-%m-%d %H.%M.%S' \
    '-filename<${CreateDate}_${Model;}.%e' \
    '-filename<${DateTimeOriginal}_${Make;}.%e' \
    '-filename<${DateTimeOriginal}_${Make;}_${Model;}.%e' \
    $@

Il punto e virgola è un modo per ovviare al problema di estensione mancante indicato sopra (in realtà, è stato a causa del trascinamento di null nei miei tag Model).

Una cosa buona di questo approccio è che non stiamo usando l' -mopzione, quindi non incasineremo per esempio i file * .mov che non hanno tag exif, come la maggior parte dei video che è possibile scaricare dalla rete (vengono semplicemente ignorati).


1

Per quanto ne so, exiftool non supporta la scrittura del formato .mov, potrebbe spiegare perché non vuole creare file con tale estensione, anche se solo rinominare.

Dato che hai bisogno di un po 'di logica per sbirciare in tag alternativi se uno di essi è vuoto, ti suggerisco di usare exiftool solo per estrarre le informazioni che desideri; quindi rinominare i file da soli. Ecco uno script bash per iniziare con l'idea, non funzionerà immediatamente; è lì per vedere come si potrebbe fare :)

#!/bin/bash
# Scan the files you need
for i in *jpg *mov; do

    # Get the extension of the previous file
    extension=${i##*.}

    # Extract metadata from the file
    model=$( exiftool -f -s3 -"Model" "${i}" )
    make=$( exiftool -f -s3 -"Make" "${i}" )
    datetime=$( exiftool -f -s3 -"DateTimeOriginal" "${i}" )

    # If the datetime value is empty (returned '-' because of the '-f' option)
    # then read another tag
    if [ "${datetime}" = '-' ]; then
        datetime=$( exiftool -f -s3 -"MediaCreateDate" "${i}" )
    fi

    # Construct the new filename from the metadata gathered above
    newfilename="${datetime}-${make}-${model}.${extension}"

    # Check if the destination filename already exists, and if not,
    # create the file
    if [ ! -e "${newfilename}" ]; then
        echo mv "${i}" "${newfilename}"
    else
        echo "${i} would get renamed to ${newfilename} but that file already exists."
    fi
done

Grazie! Devo mancare l'opzione "-f", potrei usarla nel mio test ...
Gerlos,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.