1 votos

AppleScript actualizando las fechas de las fotos, con un error de una hora

Estoy haciendo un script para que Photos actualice las fechas de las fotos en un álbum, para que coincidan con el orden de las fotos en el álbum. Se trata de escaneos de fotos antiguas, por lo que las fechas de modificación no coinciden con la fecha en que se tomaron las fotos.

Casi funciona, pero algunas fotos tienen una fecha una hora antes. Eso parece un problema de zona horaria, excepto que las fotos no tienen información de ubicación, así que no puedo saber de dónde vendría.

tell application "Photos"
    set currentAlbum to album named "Album name"
    -- Start with a date slightly in the past, based on the album size.
    set currentAlbumCount to (count of media items in currentAlbum)
    set photoDate to (current date) - currentAlbumCount
    repeat with currentItem in media items in currentAlbum
        set photoDate to photoDate + 1
        set date of currentItem to photoDate
    end repeat
end tell

Después de ejecutar esto, el EXIF de las fotos tiene la hora/fecha de algunas una hora antes que otras - por ejemplo, una a las 4:16:13 pm, la siguiente a las 3:16:14, y luego a las 4:16:15, sin razón aparente de por qué algunas están fuera de una hora.

Lo intento porque cuando exporto y uso las fotos en otros sitios (como Google Fotos) se ordenan por fecha, y quiero conservar el orden de clasificación.

0 votos

Intente registrar el valor de photoDate en cada iteración.

0 votos

Si añado log photoDate los valores son exactamente lo que yo esperaría: se adelantan un segundo por cada nuevo valor de fecha, sin desplazamientos de una hora.

0 votos

Bien (más o menos). Sugiere que su script es bueno, y que EXIF es una especificación de mierda. Hice una búsqueda rápida en línea sobre esto (términos de búsqueda como "exif time zone" , "exif incorrect date time" , "exif local time utc" y hay un montón de informes sobre los casos en los que EXIF parece inconsistente en cuanto a la fuente de información de fecha/hora para varios campos. Parece especialmente relevante cuando las fotos han sido escaneadas, y por lo tanto no tienen una cámara de suministro de información de fecha / hora. Continúa...

1voto

Tom Harrington Puntos 187

Parece que el problema es que Fotos no edita todo Las etiquetas de fecha EXIF cuando se ejecuta el script anterior, y Google Photos mira las etiquetas que Photos no cambia. Fotos no parece tener ninguna otra opción para editar las fechas, así que tuve que indagar más. Como describió @CJK en los comentarios, las fechas EXIF son un poco liosas, por lo que es necesario editar las EXIF directamente.

Terminé exportando el álbum desde Fotos y escribiendo un shell personalizado script para cambiar las fechas. Usé la sugerencia de @CJK de exiftool . El script sigue. Si no lo entiendes, no lo uses, porque no tiene comprobación de errores.

#!/bin/bash

# First export photos from Photos.app to a directory.
# - Export as "sequential". Use a prefix with no spaces.
# - Filenames should look like "Photo - 13.jpg"

TARGET_DIR="Your directory here"
# Count files. The sed on the end is because wc has pesky whitespace that causes trouble setting TIMESTAMP.
PHOTO_COUNT=`ls "$TARGET_DIR" | wc -l | sed 's/ //g'`

# Starting timestamp is slightly in the past, based on the number of photos.
let TIMESTAMP=`date +"%s"`-$PHOTO_COUNT

# Set IFS so that the loop will work properly with filenames that contain spaces.
IFS=$(echo -en "\n\b")

# Sort files numerically by the number in the filename
for FILE in `ls "$TARGET_DIR" | sort -n -k 3`
do
    # Move the timestamp by one second for every photo
    let TIMESTAMP=$TIMESTAMP+1
    # Get various date and time strings for EXIF.
    DATE_TIME_STRING=`date -r $TIMESTAMP +"%Y-%m-%d %H:%M:%S"`
    DATE_STRING=`date -r $TIMESTAMP +"%Y-%m-%d"`
    TIME_STRING=`date -r $TIMESTAMP +"%H:%M:%S"`

    # Set a bunch of date and time values in the photo's EXIF. It might be necessary to add more depending on the photos but these do the job for now.
    EXIFTOOL_CMD="/usr/local/bin/exiftool -overwrite_original -DateCreated=\"$DATE_STRING\" -FileCreateDate=\"$DATE_TIME_STRING\" -TimeCreated=\"$TIME_STRING\" -DateTimeOriginal=\"$DATE_TIME_STRING\" -CreateDate=\"$DATE_TIME_STRING\" -ModifyDate=\"$DATE_TIME_STRING\" -DigitalCreationDate=\"$DATE_STRING\" -DigitalCreationTime=\"$TIME_STRING\" \"$TARGET_DIR/$FILE\""
    eval $EXIFTOOL_CMD
done

Algunas notas:

  • exiftool tiene un AllDates pero al cambiarla no se modifican todas las fechas.
  • Estoy configurando fechas y horas para numerosas etiquetas relacionadas con la fecha y la hora, pero las he encontrado por ensayo y error. Funcionan para las fotos con las que estoy trabajando pero pueden no ser completas.

Intenté usar Image Events con AppleScript pero sólo leía las fechas, no las cambiaba. Si alguien sabe algo diferente, me gustaría ver un script que funcione.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X