it-swarm-es.tech

¿Cómo cambiar el nombre de los archivos JPEG por lotes a la fecha de la imagen, agregando un recuento que se restablezca para cada día?

Estoy usando pyrenamer con mi colección de fotos y funciona muy bien, excepto por un problema. Quiero que cambie el nombre de las fotos por los metadatos de la fecha de toma, con un número de tres dígitos al final. Cada carpeta en mi biblioteca representa un día, y quiero que las fotos terminen en números del 001-999, comenzando con 001 para cada carpeta. Un nombre de archivo de ejemplo sería 2016-01-31-001.jpg.

Shotwell maneja la creación de la estructura de directorios en la importación con una estructura %Y/%m/%d en las opciones, pero cuando uso pyrenamer recursivamente en el directorio ~/Pictures, no veo el resultado esperado. Cambia el nombre por fecha, pero continúa incrementándose en las carpetas, en lugar de comenzar en 001 para cada carpeta nueva. ¿Hay una manera más fácil de hacerlo?

Sé que podría agregar más variables de metadatos y cambiar el nombre de acuerdo con las horas, minutos y segundos, pero esto da nombres de archivo más largos de lo que quiero. Mi cámara también puede tomar varias tomas por segundo, por lo que esto es problemático para cambiar el nombre.

¿Cuál es la forma más fácil de hacer esto, por favor? Me gusta usar pyrenamer pero un script bash también está bien.

Salida de corriente:

Pictures/
├── Folder 1/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
├── Folder 2/
│   ├── YY-MM-DD-003.jpg
│   └── YY-MM-DD-004.jpg
...

Salida deseada:

Pictures/
├── Folder 1/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
├── Folder 2/
│   ├── YY-MM-DD-001.jpg
│   └── YY-MM-DD-002.jpg
...
2
Tom Brossman

Para cambiar el nombre de toda su biblioteca de imágenes de fotos JPEG al formato AAAA-MM-DD-XXX.jpg , contando y comenzando desde -001 cada nuevo día , use este comando con exiftool:

exiftool -fileOrder DateTimeOriginal -recurse -extension jpg -extension jpeg -ignoreMinorErrors '-FileName<CreateDate' -d %Y-%m-%d%%-.3nc.%%e ~/Pictures/

Para explicar completamente el comando, así es como funciona.

  1. exiftool inicia el script.
  2. -fileOrder DateTimeOriginal obliga a exiftool a procesar las imágenes en el mismo orden en que fueron tomadas . Esto es crítico para preservar la numeración de la imagen dentro de un día en el orden cronológico original.
  3. -recurse procesa recursivamente subdirectorios, lo cual es útil si usa Shotwell para importar porque las fotos se colocan en directorios organizados por fecha.
  4. -extension jpg -extension jpeg se asegurará de que solo se procesen los archivos JPEG. (Tenga en cuenta que estos no son específicos de caso y jpg = JPG, por lo que atrapamos todo)
  5. -ignoreMinorErrors Ignora cualquier error que no afecte nuestro resultado deseado (generalmente problemas para leer etiquetas no relacionadas que no son necesarias para esta operación).
  6. '-FileName<CreateDate' Pone la fecha de creación de la foto en el nombre del archivo.
  7. -d %Y-%m-%d%%-.3nc.%%e Aquí -d establece el formato de fecha de salida deseado. Usaremos un año con guiones de cuatro dígitos, luego mes y día de dos dígitos (%Y-%m-%d) seguido de un número de tres dígitos que comienza con 001 (%%-.3nc), conservando la extensión del archivo original (.%%e).
  8. ~/Pictures/ es el último elemento, es solo el directorio que exiftool debe procesar con el comando.

Una nota sobre errores, el -ignoreMinorErrors ayuda pero aún puede ver el mensaje "Advertencia: directorio PreviewIFD incorrecto" que es seguro ignorar o "Advertencia: no hay etiquetas que se puedan escribir desde /path/to/problem/image.jpg". El segundo no lo pude resolver, pero solo lo vi para algunas imágenes, así que los cambié de nombre manualmente en Nautilus como solución alternativa.

Este comando aún podría mejorarse, pero se prueba y funciona en una gran biblioteca de fotos (40 GB, 13000 imágenes) y es rápido y no produce errores, solo no cambia el nombre de la imagen ocasional que le falta una etiqueta que la mayoría de las cámaras modernas creará .

3
Tom Brossman