|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Привет всем. Шкурный вопрос. Имеется директория с фотками. Снятая разными моделями цифровых мыльниц. Fuji, Canon, Olimpus и д.т. И мобилами. Код: sql 1. 2.
И вобщем есть идея разложить их по каталогам по дате создания. Дату создания - брать из специальных EXIF-тегов. Они хранятся в шапке файла. См.фрагмент под катом. Код: plaintext 1. 2. 3. 4.
Хотелось-бы на выходе получить нечто вроде. Код: sql 1. 2.
В данной задаче я предполагаю что 99% всех фоток это именно jpg-формат. Другие как-то не представлены. Да и соотв проблем с другими не будет в силу их ограниченного количества. Как-то так. Подозреваю что кто-то уже находил готовый софт или что-то делал для себя. Но меня конечно будут интересовать не готовые продукты а некие скрипты или код. В основном чтобы "подпилить под себя". Сделать требуемый формат имени файла и разложить по годам или по месяцам. И добавить доп-инфо к имени. Каким снято фотиком. Вторичная задача - дедупликация. Хм... тоже немаловажно. Бывает - промахнешся и скопируешь тонну файлов. А потом еще раз. Реализация - на любом ЯП. С++/Python e.t.c. Конешно хотелось-бы чтоб на Windows и на Linux летало. Go-go кодить! У меня пока еще своего решения нет. Так что... gogo! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 00:29 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Лень... А задача вроде плёвая :) ставим какой-нить exiv2, например, и дальше дело техники: осталось распарсить строку и подставить полученные переменные по формату (то есть никакой фантазии, строго рутинная работа по парсингу строки и подгонке шаблонов). Да и у любого языка есть своя собственная либа для работы с exif тэгами :) Так что и тут всё просто. Насчёт вторичной задачи, при такой ошибке копирования у каждой системы есть свои правила изменения имени (у меня вот добавляется "(копия)" к названию)... по указанному шаблону очень легко отслеживаются и удаляются все дубли, если названия исходных файлов однотипны, как у камеры, которая их генерирует автоматически. так что rm с нужным шаблоном решит проблему в 2 секунды :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 04:12 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Посмотрел exiv2. Эта консольная тулза работает с 1 файлом. Маловато... Gogo кодить! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 09:29 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
maytonВторичная задача - дедупликация. Хм... тоже немаловажно. Бывает - промахнешся и скопируешь тонну файлов. А потом еще раз.Программ поиска (и удаления) дубликатов - аки грязи. maytonХотелось-бы на выходе получить нечто вроде. Поиск по словам "export exif data to text file". Потом сливаешь любой подходящей тулзой в текстовый файл полное имя файла, размер, дату-время, прочее что надо. Обрабатываешь полученный список и строишь батч-файл переименования (элементарно делается в Excel). Выполняешь. Профит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 09:35 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Если дата создания файла совпадает с датой съемки (обычно совпадает если позже фотка не корректировалась), то можно по дате создания распихать по подпапкам. Дату создания любым ЯП элементарно получить. ИМХО имя файла нет смысла менять, оставь как есть, думаю ты не часто снимал разными девайсами в один день. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 09:48 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
mayton, Exiftool адаптируй ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 09:53 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Насчёт дедупликации - каков критерий равенства каков? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 10:01 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Какой критерий? Поскипаем пока делупликацию. Залача-прим - разложить фотки по датам. При этом количество на входе и на выходе должно совпалать. Файлы без exif даты - сложить в отдельный folder (unsorted). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 10:48 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
В общем-то тут и программу писать не надо. Совсем. Поиск дубликатов - Auslogics Duplicate File Finder. Переименование файлов кучей, Excel + Total Commander. Для отображения EXIF-информации в Total Commander есть плагин, что ещё больше упрощает задачу. P.S. Конкретно EXIF-плагин сам не использовал, всё остальное работает - быстро и удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 11:47 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
maytonПосмотрел exiv2. Эта консольная тулза работает с 1 файлом. Маловато... Gogo кодить! ну это не мешает путем перенаправления ввода\вывода организовать конвеер в цикле ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 12:21 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
KpoxaPymКонкретно EXIF-плагин сам не использовал Отлично работает. Нужен только TC+плагин, ничего другого не требуется. Только нужно иметь ввиду ряд нюансов. Например в EXIF дата/время могут быть в разных полях и на разных фотоаппаратах эта логика отличается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 12:45 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
maytonВторичная задача - дедупликация. Хм... тоже немаловажно. Бывает - промахнешся и скопируешь тонну файлов. Если это бинарные копии файлов, то это легко решается тем же TC. Способов много. Например прямо в диалоге поиска файлов можно включить поиск дубликатов по полю плагина [=wdhash.CRC32], но это будет очень медленно. Намного быстрее будет переименовать файлы с помощью плагина (в CRC32, например) и делать поиск дубликатов по совпадению части имени файла и размера. Если же нужен поиск идентичного содержимого, то тут надежного решения нет. Из бесплатных лучшие результаты я получил в VisiPics, но все равно нужно просматривать найденные дубли самому, часто ошибается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 12:52 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Вообще я для сортировки фотографий использую следующий шаблон: /photos/{category}/{year} {album}/{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model}) Здесь: {category} - категория фотографий (личные, путешествия, технические), задается вручную {year} - год съемки {album} - в зависимости от категории место съемки или наименование события {ymd} - дата в формате ГГГГММДД {hm} - время в формате ЧЧММ (без секунд) {####} - порядковый номер фотографии в альбоме {crc32} - контрольная сумма в нижнем регистре {tag} - пометка для случаев специальной съемки (hdr, burst и т.п.) {device} - производитель фотоаппарата {model} - модель фотоаппарата Наличие CRC32 в имени файла позволяет находить оригиналы и дубли, даже если файл редактировался. Дата/время в начале файла позволяет сортировать в порядке съемки. Порядковый номер исключает появление разных файлов с одним именем. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 13:03 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
maytonПосмотрел exiv2. Эта консольная тулза работает с 1 файлом. Маловато... Gogo кодить! Не вижу проблемы :) Разумеется вместо того, чтобы показывать exif данные, их можно обработать и пересохранить файлик bashfor file in ./*.jpg; do exiv2 $file; done ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 13:18 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
KpoxaPym, нету у меня тотал коммандер. У меня - Linux. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 14:13 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Alibek B.Вообще я для сортировки фотографий использую следующий шаблон: /photos/{category}/{year} {album}/{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model}) Здесь: {category} - категория фотографий (личные, путешествия, технические), задается вручную {year} - год съемки {album} - в зависимости от категории место съемки или наименование события {ymd} - дата в формате ГГГГММДД {hm} - время в формате ЧЧММ (без секунд) {####} - порядковый номер фотографии в альбоме {crc32} - контрольная сумма в нижнем регистре {tag} - пометка для случаев специальной съемки (hdr, burst и т.п.) {device} - производитель фотоаппарата {model} - модель фотоаппарата Наличие CRC32 в имени файла позволяет находить оригиналы и дубли, даже если файл редактировался. Дата/время в начале файла позволяет сортировать в порядке съемки. Порядковый номер исключает появление разных файлов с одним именем. Спасибо. Хороший шаблон. Но у меня будет попроще. Например категория мне не нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 14:21 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Dima TЕсли дата создания файла совпадает с датой съемки (обычно совпадает если позже фотка не корректировалась), то можно по дате создания распихать по подпапкам. Дату создания любым ЯП элементарно получить. ИМХО имя файла нет смысла менять, оставь как есть, думаю ты не часто снимал разными девайсами в один день. Я-бы файл тоже сделал уникальным. Бывает тот-же регистратор фоткает файлы с ограниченным циклом. И в серии разных фоток будет две с одним номером например. И потом эти два одинаковые файла уже почтой не переслать. В один фолдер - не скопировать. Вобщем.. имя файла тоже должно быть уникальным. Вариант - сквозная нумерация для одной даты. Или контрольная сумма как товарищ фотограф делает там у себя. Но мне контрольная сумма кажется слишком уж большим балластом для глаз. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 14:29 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
maytonБывает тот-же регистратор фоткает файлы с ограниченным циклом. И в серии разных фоток будет две с одним номером например. И потом эти два одинаковые файла уже почтой не переслать.Вот как раз при отправке - никаких проблем с одноимёнными вложениями. При получении - да, возникают сложности. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 14:32 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Alibek B.Наличие CRC32 в имени файла позволяет находить оригиналы и дубли, даже если файл редактировался. По поводу уникальности. Есть персептивный хеш. Но это лучше отдельным топиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 14:34 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
crc32 вполне достаточен. У меня на 20 ГБ фотографий коллизий не было, при этом он быстро считается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 14:54 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Alibek B.crc32 вполне достаточен. У меня на 20 ГБ фотографий коллизий не было, при этом он быстро считается. У меня часто было такое. Хотел кода-то зааплодить фотку. Или приаттачить. Не влезла по размеру. Сделал scale. Сохранил. Лежат две фотки. Один контент. Разный размер и контрольная сумма. Но ладно... я это подниму отдельным топиком. Типа умная дедупликация. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 15:13 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
maytonРазный размер и контрольная сумма. Так в том и смысл сохранять crc32 в имени файла, чтобы при изменении файла он все равно сохранялся оригинальный. Иначе нужно использовать инструменты сравнения по содержимому, а они медленные и неточные. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 17:21 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Alibek B.maytonРазный размер и контрольная сумма. Так в том и смысл сохранять crc32 в имени файла, чтобы при изменении файла он все равно сохранялся оригинальный. Иначе нужно использовать инструменты сравнения по содержимому, а они медленные и неточные. Инструменты сравнения могут работать единоразово. После скидывания содержимого фотика. Или слияния архивов и прочее. Да мне вообще-то пофиг сколько они будут работать. Есть коробочная утилита fdupes для Linux. Она работает на уровне скорости дискового чтения файлов. Временная сложность - линейна от объема файлов. Но мой интерес даже не в том быстро она работает или медленно. А просто в том чтобы убедится что каталог фоток имеет относительный порядок. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 17:27 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Я не про fdupes и прочие бинарные утилиты. Если на картинке изменить exif, то такие утилиты посчитают этот файл уникальным. Для поиска дубликатов фотографий нужно использовать специальные утилиты, которые сравнивают содержимое (контент), например VisiPics. А они медленные и неточные, и как следствие интерактивные. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 17:35 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Alibek B.Я не про fdupes и прочие бинарные утилиты. Если на картинке изменить exif, то такие утилиты посчитают этот файл уникальным. Для поиска дубликатов фотографий нужно использовать специальные утилиты, которые сравнивают содержимое (контент), например VisiPics. А они медленные и неточные, и как следствие интерактивные. Давайте разделим 2 направления. 1) Дедупликация контрольной суммой (crc32/md5). Полностью автоматически позволяет убрать дубликаты. Здесь - вопросов вообще нет. Решенная уже задача. 2) Дедубликация на основе персептивного хеша - работает в режиме диалога. Или в режиме рекомендаций, всего-лишь предлагая пользователю ознакомится с кандидатами на удаление. Я так думаю. По поводу изменения 1 exif-тега. Такой кейс мне представляется сомнительным. Я никогда в жизни этого не делал и не понимаю ценности этого действия. Предполагаю что 99.9% мои файлы что я фоткал мыльницами никогда не меняли своих тегов кроме тех случаев когда я редактировал размер-яркость-контраснтность но это вообще выходит за рамки пункта (1) и соотв нет вопросов. С точки зрения контрольной суммы - это вообще другой файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 17:51 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Изменение тэга это например поворот на 90 градусов (смена ориентации). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 18:01 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Alibek B.Изменение тэга это например поворот на 90 градусов (смена ориентации). Интересный кейс. Давайте это я дам чуть позже отдельным топиком. А в этом я хотел-бы просто продолжить раскладывание фоток по датам? OK? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 18:18 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Вот любопытная библиотечка Metadata-extractor. Вроде в ней все есть. https://github.com/drewnoakes/metadata-extractor По поводу данного шаблона. Код: sql 1.
Я думал о реализации его так и эдак и у меня выходит какой-то скриптовый язык программирования внутри приложения. Вобщем цена вопроса. Что делать если нужного тега нет? А он входит в шаблон как элемент директории. Например: Код: sql 1.
В данном шаблоне некоторые алиасы такие как width, height являются mandatory для любого файла. Я 100% их найду значения. Но как быть если один из атрибутов (YYYYMMDD) будет незаполнен? Будет такой вот странный path, который скорее всего будет некорректен с точки зрения файловой системы. Код: sql 1.
Нужно какое-то генерализованное решение и красивое с точки зрения шаблона. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 02:28 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Дата и время у файла есть всегда. Не в EXIF, так в атрибутах. Правда может быть так, что они могут различаться, но тут общего решения не существует. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 06:54 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
maytonБудет такой вот странный path, который скорее всего будет некорректен с точки зрения файловой системы. Код: sql 1.
Для линукса не знаю, а в виндовсе корректен и равнозначен такому Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 07:11 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
mayton/photos/{YYYY}/{MM}/{DD}/{model}_{YYYY}{MM}{DD}_{width}x{height}.jpeg Сомнительный шаблон. Зачем в имени файла размерность изображения? Почему модель вынесена в начало (сортировка будет по модели)? Почему нет времени или счетчика? Или в течение дня будет только одна фотография? Я бы советовал использовать мой шаблон, в нем ничего лишнего и он выверен практикой. Единственное, что я не указал — если одно и то же событие снималось разными фотографами, то в каталоге альбома я создаю подкаталоги на каждого фотографа и уже внутри них идет "{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})". Для фотографий важно упорядочивание по хронологии, поэтому дата или счетчик должны быть в начале файла. Модель фотоаппарата является чисто информационным атрибутом, поэтому должна быть в конце или вообще не указываться. Я указываю, потому что по модели можно понять, что следует ожидать на фотографии (какое качество и особенности). ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 09:52 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Что касается даты/времени, то нужно учитывать следующее. Во-первых, в EXIF есть несколько тэгов для этого: Date/Time, DateOriginal/TimeOriginal, DateDigitized/TimeDigitized, DateTimeStr (это не считая проприетарных и нестандартных полей). И разные вендоры по разному понимают, что и в какие поля нужно записывать. Во-вторых, кто-то пишет в эти поля локальное время, а кто-то UTC. Кто-то учитывает сдвиг часового пояса, кто-то нет (в зависимости от свежести ПО). В-третьих, возможны ситуации, когда дата/время в EXIF не совпадает с датой/временем в атрибутах файла (например на устройстве часы выставлены неточно, но имеется GPS, а в EXIF записывается время со спутника). И для этих моментов нет общего решения. Нужно или принять для себя какой-то общий принцип (например определить приоритеты полей), или для каждой модели обрабатывать данные индивидуально. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 10:14 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
И еще, метаданные есть не только в EXIF. Есть IPTC, есть расширения JPEG, есть форматы tiff/tga. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 10:17 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Alibek B.Почему нет времени или счетчика? Или в течение дня будет только одна фотография? Я бы советовал использовать мой шаблон, в нем ничего лишнего и он выверен практикой. Единственное, что я не указал — если одно и то же событие снималось разными фотографами, то в каталоге альбома я создаю подкаталоги на каждого фотографа и уже внутри них идет "{ymd}{hm}_{####}_{crc32} [{tag}] ({device} {model})". Для фотографий важно упорядочивание по хронологии, поэтому дата или счетчик должны быть в начале файла. Модель фотоаппарата является чисто информационным атрибутом, поэтому должна быть в конце или вообще не указываться. Я указываю, потому что по модели можно понять, что следует ожидать на фотографии (какое качество и особенности). Согласен насчет счетчика. Добавлю. С моделью у меня будет попроще. У меня их просто меньше. И сам знаю чего ожидать. Ваш шаблон выверен вашей практикой. Я не фотограф. И нет у меня таких глобальных задач с тегами. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 11:23 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Alibek B.Во-первых, в EXIF есть несколько тэгов для этого: Date/Time, DateOriginal/TimeOriginal, DateDigitized/TimeDigitized, DateTimeStr (это не считая проприетарных и нестандартных полей). И разные вендоры по разному понимают, что и в какие поля нужно записывать. Во-вторых, кто-то пишет в эти поля локальное время, а кто-то UTC. Кто-то учитывает сдвиг часового пояса, кто-то нет (в зависимости от свежести ПО). Я соберу статистику. Скорее всего будет просто система приоритетов. Если есть какой-то тег - я его беру. Если нет - смотрю другой. Если вообще не найдены никакие атрибуты времени - возьму за основу дату создания файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 11:26 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Я по поводу дублирования. Более десятка лет назад был самодельный ехе для винды. Название imageduplex.exe (или dupless). Выполняет поиск в файловой системе рисунков, "похожих" на предложенный эскиз или файл. Автор объяснял работу. Не помню, шла ли речь об ... как это?.. когда сжимают до маленького квадратика. Основное помню в том, что сходство определялось не в геометрическом пространстве (по крайней мере нетолько в геометрическом), а в цветовом, путём разновидности кластеризации. Именно так я бы тоже тогда и делал бы. Я только несколько раз посмотрел работу проги, ну и показывал ещё. Мы соглашались, что "похожесть" была достаточно обоснованной. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 12:37 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Да. Персептивный хеш. Впервые я прочитал про это на хабре. Кажется этот линк https://habr.com/ru/post/120562/ ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 12:50 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Можно взять готовую программу ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2019, 02:06 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Ну.. не знаю. Неспортивное это. В топике разработки обсуждать готовые продукты. Кроме того я вот планировал делать безопасное переименование. Оставлять старый каталог. И создавать новый в hardlinks. Опасная эта операция я вам доложу. Ошибёшься - половину фоток потеряешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2019, 09:07 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
UP. Прошу прощения за безделие и праздность. От задачи я не отказываюсь. Буду делать. Фотки по прежнему лежат и ждут сортировки. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.02.2019, 00:05 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Up. Приложение готово. Всякая ботва с распознаванием образов, html и thumnails отвлекли меня от задачи-прим. И сегодня эта задача сделана. Фотки я уже успешно раскладываю по фолдерам. Детектирует exif-tag и верный формат даты. Утилита имеет внешний вид консоли. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В утилите много хардкода и недостаточно гибкости но главную задачу я уже решил. Дальше дорабатывать буду по мелочам. Вот как выглядел фолдер с фотками до. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
И вот как после. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Формат и глубину можно менять. Можно сцепить год+месяц или сделать квартальные группы фоток. В отличие от html-индексатора данная утилита работает аккуратно и не трогает оригинал. Он в принципе может лежать на DVD диске или в сетевом диске в readonly а каталог получатель - будет просто копировать в себя фотки с новыми названиями. Я решил что это более безопасно даже для моего дев-тестинга. Мало-ли какая ошибка может быть с фолдерами.... Можно вытащить из тегов название и модель цифровика. И тогда каталог может иметь структуру разного качества снимков. Что-то снято мыльницей. И что-то зеркалкой. Это еще не реализовано но реализация будет элементарной на базе того что уже есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 00:37 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
2) Unrecognized - или trash. Это отдельный опциональный фолдер куда будут падать фотки снятые без соотв. тега с датой. В настоящий момент у меня таких мало. Меньше процента. Но все таки терять их не будем и они будут к сведению лежать в отдельной структуре сохраняя имена и папки как было. 3) TimeFormat - это набор шаблонов которые мы будем пытаться применить к дате. Некоторые цифровики делают не совсем корректную дату типа 2012:10:18 1:54:45 где час стоит без ведущего нуля. Она не парсится единым паттерном (в инструментарии Java8/time). Нужно делать 2 чтобы последовательно применяя найти нужную рабочую подстановку. 4) Я попробую релизнуть это в 3х форматах бинарников. - java (jar) - Linux x64 (Graal compiler) - Win x64 (Graal compiler) Эксперименты с Graal я провел успешно. По крайней мере под Linux все работает. Думаю что Graal компиллятор под Windows не будет капризным и я тоже его релизну. Но чуть позже чем остальные. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 00:46 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
А нужен ли в линуксах скомпилированный файл? Там по-моему java-машина есть всегда. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:08 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
За все линуксы не скажу. Насчет всегда - не знаю. В моём варианте jdk доустанавливалась с помощью apt-get install ... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:12 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
И еще, в выходном имени файла я бы советовал не разделять дефисом часы-минуты-секунды. Лучше их писать подряд, а разделитель приберечь для чего-то более полезного, хоть для модели аппарата. И как я вижу, CRC в имени файла отсутствует. Я все же советую его добавить. Файлы в течение долгого времени могут незначительно модифицироваться, причем изменяться может даже не содержимое, а метаинформация (например тэг ориентации). CRC позволит искать оригиналы/дубликаты, не проводя анализ и распознавание образов, это будет просто на порядки быстрее и проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:14 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Насчет модели аппарата - я подумаю. Идея хорошая. Как вариант - добавить ее к формату Код: sql 1.
К сожалению exif-теги не гарантируют наличия модели аппарата. Или они могли быть обработаны какой-то утилитой-анонимайзером. Или будучи скачаны с соц-сетей аналогично. Тоесть если мы хотим добавить модель цифровика то нужна опция замены на тот случай когда тега нет. Например Код: sql 1.
Насчет CRC я не очень понял полезность этого атрибута. Если вы слегка потрогали размеры или покрутили тон-яркость-насыщенность то CRC меняется кардинально а фотка субъективно - одна и таже. Но в принципе сделать не сложно. Так на 1 story-point :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:22 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Например у меня на жестком диске есть куча фотографий. В этой куче множество дубликатов разного рода. Где-то я создавал подкаталог по дате и копировал в него каталоги со смартфона — соответственно в разных подкаталогах часть фотографий будет дублироваться. Впрочем это самый простой сценарий, потому что тут файлы-дубликаты одинаковые, они легко находятся по имени и размеру. Какие-то фотографии передавались другим пользователям (на другие телефоны) по Bluetooth, соц.сети или мессенджеры, и бэкапились уже другие телефоны. Тут будут дубли будут в бэкапах разных устройств. К тому же при передаче фотографий могли меняться размеры, изменяться или удаляться тэги (EXIF) и т.п., то есть по со содержимому файлы уже будут различаться. Еще фотографии могут редактироваться, например обрезаться или корректироваться по освещению/тону/кривым. Тут уже и само изображение будет изменено, и имя файла как правило изменяется. Но обычно оригинальное имя файла все же сохраняется, просто к нему дописывается суффикс. Фотографии могут масштабироваться под разные разрешения (подготавливаются заранее, чтобы на разных платформах они не масштабировались автоматически с потерей качества) — аналогично предыдущему, изменяется все, но оригинальное имя файла обычно сохраняется. Если имя файла будет состоять только из счетчика или таймштампа, то оригинал по имени файла не найти, поскольку такое имя будет неуникально. А вот если в имени файла будет присутствовать CRC, то он конечно не гарантирует отсутствие коллизий, но на практике коллизии крайне редки и он почти гарантировано будет уникальным. А с именами файлов работать намного проще, чем с парсерами изображений — хоть в Total Commander (Multi-Rename Tool, поддерживает регулярные выражения), хоть в множестве готовых утилит по массовому переименованию файлов, хоть сохранив имена файлов в текстовый файл. Например в Total Commander есть два таких крайне полезных инструмента, как мультипереименование и поиск дубликатов. И оба поддерживают файловые плагины, в том числе такие полезные, как exif (тэги EXIF) и wdhash (разные хеши, в том числе CRC32). При поиске дубликатов я просто сравниваю CRC в имени файла с рассчитанным CRC — и все изменения/дубли/оригиналы как на ладони. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:45 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Уговорил. Добавлю CRC как опцию. Могу и MD5 добавить. Для себя проблему дедубликации решил утилитой fdupes https://ru.wikipedia.org/wiki/Fdupes Она находила не то что файлы а целые каталоги фоток которые я по ошибке скопировал не туда (рука на мышке дрогнула). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:52 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
У меня сценарий бэкапов следующий. Время от времени я скидываю фотографии с источников (смартфон, фотоаппарат) на диск. Затем делаю массовое переименование по шаблону "{album, location, event}/{ymd}{hm}_{crc32} [{tag}] ({device} {model})". Затем ищу дубли между обработанным каталогом (с новыми фотографиями) и основным каталогом (с бэкапом). Дубли в новом каталоге убираю, а оставшиеся фотографии перемещаю в основной каталог с бэкапами. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:56 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Я выбрал CRC, а не MD5, потому что он слишком длинный и сложно считается. Если помещать его в начало имени файла, то остаток (с датой, временем и прочим) не будет виден, да и сортировка слетит. Если помещать его в конец имени файла, то остаток не будет виден и визуально его будет не сравнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 11:58 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
А что такое tag? Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:01 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
mayton Если бы все было так просто, то и CRC бы не потребовался. В том же Total Commander тоже есть побайтовое сравнение. Проблема в том, что изменения могут быть внесены в метаинформацию — собственно изображение будет тем же, но fdupes будет считать файлы разными. И изменения иногда могут быть внесены вообще незаметно для пользователя. Например при просмотре фотографий на ПК если фотографию повернуть на 90 градусов, некоторые просмотрщики изменяют тэг ориентации в EXIF. Или иногда я копирую часть фотографий для публикации, убираю в них EXIF, иногда еще и уменьшаю размеры — фактически это дубли, а при бинарном сравнении они найдены не будут. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:02 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
tag это какие-то специальные режимы фотографирования. Например при серийной съемке добавляется тэг burst, при склейке панорам добавляется тэг pano и т.п. В обычных фотографиях этого тэга нет (вместе с обрамляющими квадратными скобками). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:03 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
mayton, привет, разбираете exif-теги полностью своим кодом, или пользуетесь какой-то готовой библиотекой? Если своим, то нет ли ссылки на понятное описание формата? Я, после того, как вы задачу озвучили (в теме про страницу с фотками), почитал, но так толком и не разобрался, как найти начало тега. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 12:49 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
s62 mayton, привет, разбираете exif-теги полностью своим кодом, или пользуетесь какой-то готовой библиотекой? Если своим, то нет ли ссылки на понятное описание формата? Я, после того, как вы задачу озвучили (в теме про страницу с фотками), почитал, но так толком и не разобрался, как найти начало тега. Использую готовую библиотеку Apache Commons Imaging https://commons.apache.org/proper/commons-imaging/ Собственно всё мясо реализовано здесь. Остальное - это обертки. Консольное приложение и FileVizitor который обходит файловую систему в сборе картинок. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72.
Все это в статусе опенсорца и я выложу когда доведу до ума. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:00 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Alibek B. mayton Если бы все было так просто, то и CRC бы не потребовался. В том же Total Commander тоже есть побайтовое сравнение. Проблема в том, что изменения могут быть внесены в метаинформацию — собственно изображение будет тем же, но fdupes будет считать файлы разными. И изменения иногда могут быть внесены вообще незаметно для пользователя. Например при просмотре фотографий на ПК если фотографию повернуть на 90 градусов, некоторые просмотрщики изменяют тэг ориентации в EXIF. Или иногда я копирую часть фотографий для публикации, убираю в них EXIF, иногда еще и уменьшаю размеры — фактически это дубли, а при бинарном сравнении они найдены не будут. Дедубликация - это все таки отдельная задача. И она - более сложная и интересная. Я-бы хотел ее реализовать не через контрольные суммы а через персептивный хеш. Все как выше по топику. Только к этому хешу я добавлю еще 4 проверки на поворот фотографии. И это будет отдельная утилита. Я хочу следовать принципам unix. Каждая тулза - простая и решает узкую задачу. Если надо будет их соединить в цепочку или конвейер - то такая возможность думаю будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 13:05 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Да, отдельная утилита будет логичным решением. Но лично для меня наличие CRC в имени файла оказалось удобным. Он решает две задачи. Во-первых, помогает для поиска дублей/оригиналов (как я описал выше). Во-вторых, обеспечивает уникальность имен файлов в альбоме, (почти) не нарушая очередности и не слишком загромождая имя файла. Если называть файлы по маске hhmmss (до секунды), то это все равно не гарантирует уникальности имени, потому что даже обычные фотографии иногда могут быть сняты в пределах одной секунды (не говоря уж о серийных фото). То есть в имя файла все равно нужно будет добавлять счетчик для уникальности: hhmmss_nnnn. А еще этот счетчик сильно мозолит глаза, если в нем есть пропуски, возникает желание его перенумеровать (что впоследствии чревато коллизиями). Я же именую файлы по маске hhmm_crc (где crc это 8 шестнадцатиричных символов). Всего на два символа длиннее, чем hhmmss_nnnn, однако позволяет забыть про неуникальность или коллизии имен файлов (у меня более 60 ТБ фото и ни разу не было коллизий). Есть некоторый минус в том, что в пределах одной минуты возможно нарушение очередности фотографий, но на практике это неудобство незначительное, обычно в подряд снимаемых фотографиях по сюжету легко восстановить хронологию (ну и в EXIF и атрибутах в любом случае сохраняется полная дата и время). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 14:23 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
А, еще. Если смартфон или фотоаппарат подключаются к ПК как MTP-устройство, а не как USB Mass Storage, то при копировании файлов возникает крайне неприятный баг, дата и время файлов не сохраняются (заменяются на текущие). Это нарушает порядок отображения галереи, да и вообще несет много неудобств. Поэтому я и пришел к тому, что дата и время должны присутствовать в имени файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 14:28 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Да. Согласен. Любое перекидывание фоток через соцсети или портативные диски может как-то повлиять на дату создания обновления. Для меня - это уже технически решенная задача. Можно просто год и месяц добавить в файл. Код: sql 1.
Кстати. Я вот думаю что из коробки уже готов и другой механизм. Читабельные названия месяцев. Код: sql 1.
Удобно ли это для человека? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:22 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
И август будет перед мартом? В имени файла должны быть только цифры. И лишние разделители не нужны, я бы 'yyyy/MM/dd/yyyy-MM-dd-HHmmss' заменил на 'yyyy/yyyy-MM-dd/yyyyMMddHHmmss'. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:29 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Кому-то удобно. В реферальных топиках (выше) я делал индексирование фоток в статичный HTML. И для публикации людям иногда удобнее кликать не на 09 и 10 месяцы (ссылки) а именно на символические названия AUG, SEP. Просто мы люди так устроены. Ассоциацию вспоминаем. Например были крестины или свадьба в августе. Сразу ясно куда кликать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:33 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Так в HTML-файле список можно вывести в любом удобном порядке. А список файлов (в файл-менеджере или диалоговом окне) обычно упорядочивается по названию файла. И там буквенные наименования месяцев будут неудобны. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:46 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Мда... это мысль. Разделить контент и отображение. Месяцы - можно символами но при сохранении стабильного неубывающего порядка. JAN,FEB,MAR.....e.t.c. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2021, 15:55 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Альфа версия https://github.com/mayton-nosql/photo-time-sort/releases/tag/1.0-alpha Бинари под Windows/Linux еще не собрал. Поэтому для исполнения нужен Java11. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 21:43 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
mayton Просто мы люди так устроены. Ассоциацию вспоминаем. Например были крестины или свадьба в августе. Сразу ясно куда кликать. Хотелось бы ассоциирующихся подсказок, какой текуший месяц. Например в виде 08 или 03 и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 22:40 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
Я-бы не хотел здесь обсуждать вопросы дизайна и публикации. Это пожалуй лучше здесь спрашивать в старом топике который я спецом создавал по дизайну https://www.sql.ru/forum/1337955-6/kartinki-lentoy-tablicy-ili-divs ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2021, 22:44 |
|
Вторничный фотографЪ
|
|||
---|---|---|---|
#18+
mayton Читабельные названия месяцев. Код: sql 1.
А вы что, не знаете что, по-крайней мере в Windows, вышеуказанное имя создаст три вложенные папки 2021 AUG 8 и в последней из них файл 2021-AUG-8-16-35-00.jpg. Символ "/" в имени файла трактуется как папка. Попробуйте, сами увидите... Или так и задумано? Тогда 2021-AUG-8 в имени файла совсем излишне... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.08.2021, 00:34 |
|
|
start [/forum/topic.php?all=1&fid=16&tid=1339639]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
186ms |
get topic data: |
39ms |
get forum data: |
2ms |
get page messages: |
97ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 369ms |
0 / 0 |