Skip to content

vovanmozg/media-library-tools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание

Инструкция

Указать актуальные пути в docker-compose.yml

/vt/media

Это каталог, в котором находится медиа-библиотека. Например, ваши фото и видео расположены в папках

  • /home/user/Documents/video
  • /home/user/Documents/images-new
  • /home/user/Documents/foto2023 Тогда в docker-compose.yml нужно указать путь /home/user/Documents

/vt/data

Это каталог для служебных файлов:

  • метаинформация о всех медиа-файлах
  • кэш Можно его не указывать, тогда все эти файлы будут внутри докер-контейнера. При перезапуске контейнера они будут удалены. Это никак не затрагивает ваши фото и видео. Однако при следующем запуске сканирование медиа-библиотеки может занять много времени, так как программа анализирует все файлы.

/vt/dups

Каталог для сохранения файлов, которые будут удалены. Аналог корзины. Обязательный параметр. Рекомендуется некоторое время хранить эти файлы, чтобы в случае ошибки можно было восстановить удаленные файлы.

Deprecated (нужно актуализировать)

TODO: нужно актуализировать весь контент ниже. Он был актуален, когда нужно было запускать скрипты вручную. Сейчас реализуется подход управления галереей через веб-интерфейс.

Набор скриптов для обработки большого количества медиафайлов.

Фичи

  • возможность избавиться от дубликатов и похожих файлов,
  • низкие риски удаления важных файлов (возможность работать с диском для чтения, проверки потенциально опасных операций)
  • возможность автоматически скорректировать метки времени для файлов (mtime, время модификации)
  • индексация для ускорения повторной обработки

Инструкция

  1. Подготовка файлов (необязательно)
  2. Индексация (необязательно)
  3. Реорганизация (формирование команд переноса файлов)
  4. Проверка (необязательно)
  5. Перенос файлов

Подготовка файлов

Даты файлов

Сначала желательно убедиться, что у файлов стоят корректные метки времени. Это важно, потому что приложения просмотра фото, типа облака mail файлы в ленте упорядочены по дате. Метки времени могут быть некорректными, если файлы были отредактированы или были скачаны из google takeout.

Индексация

docker run --rm -it --name media_tools \
  -v /home/user/media/files:/vt/media \
  -v /home/user/media/cache:/vt/cache \
  -e LOG_LEVEL=Logger::DEBUG \
  -u=$UID:$UID \
  vovan/media_tools ./cache_meta.sh
  • /home/user/media/files содержит видео и изображения.
  • /home/user/media/cache - в этой папке будут созданы файлы с метаданными для каждого файла.

Реорганизация

docker run --rm -it --name media_tools \ 
  -v /home/user/media/existing:/vt/existing \
  -v /home/user/media/new:/vt/new \
  -v /home/user/media/dups:/vt/dups \
  -v /home/user/media/new_broken:/vt/new_broken \  
  -u=$UID:$UID \
  vovan/media_tools ./reorganize.sh
  • /home/user/media/existing - папка с файлами, которые уже есть в коллекции.
  • /home/user/media/new - папка с новыми файлами.
  • /home/user/media/dups - папка, куда будут перемещены дубликаты.
  • /home/user/media/new_broken - папка, куда планируется перемещать файлы, которые не удалось обработать.
  • /home/user/media/cache - в этой папке будут созданы файлы с метаданными для каждого файла, либо будут использованы существующие файлы.

Проверка

Нужно просмотреть сгенерированный командный файл и убедиться, что он корректный.

Перенос файлов

Программа не удаляет дубликаты, а только подготавливает командный файл, в котором записаны команды перемещения дубликатов в отдельную папку папку. Это сделано для того, чтобы при наличии сомнений можно было вручную проверить, что файлы действительно дубликаты.

Примечания

perceptual hash

Для сравнения файлов используется perceptual hash. Это позволяет находить дубликаты, даже если у медиа-файлов отличаются разрешения (ширина и высота), форматы (jpg, png, mp4, mov, avi, mkv, ...), битрейт, кодеки, и т.д.

ложноположительные срабатывания

В некоторых редких случаях программа может ошибаться и считать разные файлы одинаковыми. Например, оригинальное видео и сделанный из него таймлэпс программа может посчитать одинаковыми. Это связано с особенностью алгоритма сравнения видео. Или если видео-файлы имеют одинаковый размер и одинаковые первые 16 КБ данных, то программа может посчитать их одинаковыми.

Examples of video for testing

http://samples.mplayerhq.hu/

TODO

Вместо генерации командного файла будет достаточно генерировать файл actions.json, и на последующих шагах читать его и выполнять действия. Можно предусмотреть ручной и автоматический перенос.

Структурирование файлов

  • foto - основные фото
  • fotoother - малоценные фото, например фото, уже похожие на те, что лежат в foto
  • nofoto
    • здоровье
    • документы
    • screenshots
  • alien - другие люди
  • deleted - удаленные файлы. При следующей синхронизации снова могут появиться файлы, которые уже были обработаны и удалены.

Идеи для развития

Возможность быстрого удаления полных дубликатов

docker run --rm -it --name media_tools \ 
  -v /home/user/media/existing:/vt/existing \
  -v /home/user/media/new:/vt/new \
  -v /home/user/media/dups:/vt/dups \ 
  -u=$UID:$UID \
  vovan/media_tools ./removedups.sh

Команда removedups.sh будет сравнивать файлы в папке existing с файлами в папке new. Если файлы совпадают по размеру и CRC, то файл из папки new будет отмечен для перемещения в папку dups (будет создан bash-файл с командами переноса, что позволяет перед переносом проинспектировать).

Ключи removedups.sh --force - сразу переносить файлы, а не создавать bash-файл.

Декомпозиция

Кажется, что нужно разделить программу на части:

  1. Сканирование каталогов и извлечение метаданных из файлов. Результат будет записан в файлы data/phash/...
    docker run --rm -it --name media_tools \
    -v /home/user/media/existing:/vt/existing \
    -v /home/user/media/new:/vt/new \
    -v /home/user/media/dups:/vt/dups \
    -u=$UID:$UID \
    vovan/media_tools ruby ./read_meta.rb
    
    Если будет включен режим кеша, то также будут созданы new_files.json и existing_files.json
  2. Сравнение файлов и формирование файла actions.json.
  3. Формирование командного файла для переноса файлов
  4. или сразу перенос файлов

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages