Сортировка и переименование изображений по дате в EXIF info

У меня беспорядок в папке фотографий; я хочу отсортировать их по дате в информации EXIF и переименовать в соответствии с датой (например, 001.jpg, 002.JPG и так далее).

Как это сделать в Linux? Раньше я использовал ImageMagick для некоторых основных задач массовой обработки (преобразование и изменение размера и т. д.), Можно ли использовать его для этой задачи?

14
задан 3498DB
09.02.2023 23:19 Количество просмотров материала 3185
Распечатать страницу

7 ответов

в Linux вы можете использовать команду exiftool. По какой-то причине онлайн-руководство не содержит раздела "переименование примеров", который дал мне существенную подсказку.

для JPG файлов только следующий вызов команды должен сделать работу:

exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>

объяснение:

  • -r для рекурсии
  • '-FileName<CreateDate' указывает exiftool переименовать файл в соответствии с тегом EXIF CreateDate (вы можете попробовать другие подобные ModifyDate хотя)
  • -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' рассказывает, как построить строку имени файла из источника даты"CreateDate" (далее -"%-c" добавит счетчик в случае столкновений файл "%le" означает "нижней обсаженных расширение ")
    • Примечание: я использовал "-FileName<..." здесь для переименования файлов и перемещения их в другую папку в течение одного шага. В руководстве указано, что вы должны использовать"-Directory<..." синтаксис для операций с папками. Это сработало для меня таким образом хотя.

вы должны потратить некоторое время на чтение руководства этого мощного инструмента. Может быть, есть еще более короткий путь: D

19
отвечен user285690 2023-02-11 07:07

попробуйте этот бесплатный продукт: Амок EXIF Сортировщик.

5
отвечен harrymc 2023-02-11 09:24

самый простой способ-просто импортировать файлы в jbrout ... затем (необязательно) все файлы могут иметь имена, измененные на что-то ориентированное по времени. Или вы можете обнаружить, что вам не нужно менять имена вообще (и jbrout достаточно).

2
отвечен mcepl 2023-02-11 11:41

Я сделал небольшой и не очень оптимизирован скрипт на Python, который я думаю, делает то, что вы хотите:

1 import pyexiv2, sys, os, time, datetime, random
2 dirname = sys.argv[1]
3 flist=os.listdir(dirname)
4 dic = dict()
5 for fname in flist:
6     metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
7     metadata.read()
8     tag = metadata['Exif.Image.DateTime']
9     timestamp = int(time.mktime(tag.value.timetuple()))
10     #print fname, ' ', tag.value, ' ', timestamp
11     try:
12         dic[timestamp] = fname
13     except:
14         print fname, ' not processed.'
15 
16 keys = dic.keys()
17 keys.sort()
18 i = 0 
19 for k in keys:
20     os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
21     i+=1
1
отвечен celebdor 2023-02-11 13:58

чтобы заставить его работать в Debian Lenny, попробуйте следующее:

import pyexiv2, sys, os, time, datetime, random
dirname = sys.argv[1]
flist=os.listdir(dirname)
dic = dict()
for fname in flist:
    image = pyexiv2.Image(sys.argv[1]+'/'+fname) 
    #metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
    #metadata.read()
    image.readMetadata() 
    tag = image['Exif.Image.DateTime']
    timestamp = int(time.mktime(tag.timetuple()))
    #print fname, ' ', tag.value, ' ', timestamp
    try:
    dic[timestamp] = fname
    except:
    print fname, ' not processed.'

keys = dic.keys()
keys.sort()
i = 0 
for k in keys:
    os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
    i+=1
1
отвечен Patrik Wallander 2023-02-11 16:15

в php я делал примерно так:

<?php

$path = "./path/to/images";
$files = scandir($path);

foreach ( $files as $file )
{
    if ( $file[0] === "." )
    {
        continue;
    }
    $ext = end(explode(".", $file));

    $suffix = "image";

    $exif = exif_read_data($path."/".$file, 'EXIF');
    $datetime = str_replace("/","-", $exif['DateTimeDigitized']);

    rename($path."/".$file, $path."/".$datetime.$suffix.".".$ext);
}
1
отвечен frankmannen 2023-02-11 18:32

в то время как мы на него, вот один, который больше "гонзо Программирование" стиль, в bash, используя exiftool, его можно выпустить на несколько каталогов и/или отдельных файлов за один раз. Он пропускает файлы с нераспознанными типами mime.

он переименовывает фотографии с помощью DateTimeOriginal EXIF тег (так что результат не 001.jpg но 2015-12-22_14:43:15.jpg.

если есть конфликт имен, индексы применяются: 2015-12-22_14:50:57.1.jpg.

может быть полезно: relabel_photo_with_datetimeoriginal.sh

0
отвечен David Tonhofer 2023-02-11 20:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх