← на главную

Лайвлупинг, медиапродакшн и все эти ваши компьютеры

Алексей Батищев. Заметки обо всём, что происходит со мной и окружающим миром

КЭНК: выгрузка фото из iCloud на Яндекс диск — 2

В прошлой серии велосипедостроения на тему переноса фоток в Яндекс.Диск была успешно решена проблема выгрузки и переименовывания файлов из iCloud в соответствии с датой. Однако, опыт эксплуатации процедуры показал её недостаток: перенесенные таким образом файлы *.heic Ядиском не располагались по альбомам в соответствии с датой, а сваливались в одну кучу дня импортирования.

Пара вечеров была потрачена на анализ и сравнение *.heic файлов, импортированных яндексом с телефона самостоятельно, и обработанных мной вручную. К сожалению, никакого способа поправить теги даты так, чтобы яндекс их воспринял, не нашлось: изменения внесенные exiftool или гуевыми программами типа XnView или FastStone результата не давали. Я заморочился, сравнил файлы преобразованные яндексом и свои, добился полного совпадения полей в выгрузке exiftool — и всё равно роботы яндекса делать красоту отказывались. Поэтому с *.heic файлами придуман обходной путь — конвертировать их в jpeg (те же теги, пробитые в jpeg, срабатывали отлично)

Заодно кстати выяснилось, что яндексу важны метаданные в поле DateTimeOriginal: файлы с корректно заполненными DateCreated но не заполненными DateTimeOriginal он также датировал неправильно.

Так вот, конвертация из heic в jpeg. Тут мне открылся неведомый мир цветовых профилей и прочих тонкостей. Оказалось что эппле пишет heic со своим чудо-профилем, который мало кто понимает и корректно показывает. Все распространённые свободные конверторы в джипег на выходе дают гораздо более бледные и светлые картинки, при этом встроенный просмотрщик macOS эти файлы показывает в исходном красивом цвете, а вот в других программах и на других платформах случается «ой». Перелопачена уйма форумов, нужное колдунство найдено — нужно не просто конвертировать heic в jpeg, но ещё и заменять цветовой профиль, а также корректировать гамму (значение корректировки я подобрал на глаз более-менее похожим, возможно тут будут нюансы на фотках разных насыщенностей)

Вот что выходит с разными конвертациями и (что важно) при разных программах просмотра:

оригинальный heic в Preview macOS, конверченный ImageMagick jpeg без коррекции цвета в Preview macOS, он же в XnView, jpeg с коррекцией цвета в Preview macOS и в XnView

Хорош рассусоливать, что вышло-то?

Итоговая на текущий момент процедура конвертации такова:

  • перегнать все heic в jpeg при помощи ImageMagick, заменяя цветовой профиль на sRGB.icc и цветовое пространство на sRGB и корректируя гамму, стереть оригиналы
  • пробить во все экспортированные файлы (и в том числе в джипеги, конвертированные из heic) метаданные из *.xmp
  • видосикам пробить FileModifyDate из TrackCreateDate и переименовать
  • там где у картинок DateTimeOriginal задан — переименовать файлы в соответствии с датой
  • там где у картинок DateTimeOriginal не задан — пробить его из DateCreated и переименовать файлы в соответствии с датой

Обработанные таким образом медиаматериалы корректно раскладываются яндекс диском в альбомы по времени и геолокации. Косяки и нюансы

  • не раскладываются по датам PNG (у меня это на 100% скриншоты) — ну да от них участия в генерации памятных сторис и прочей красоты не требуется.
  • heic с Live Photos внутри конвертируются в два файла: картинка с дефолтным кадром и микро-mp4 с полной анимацией. Не парит опять же.

В полном соответствии с методологией КЭНК и принципами Hobby-as-Code процедура собрана в shell скрипт, ознакомиться с которым можно на github (уберите от консоли беременных детей и женщин): https://github.com/alexbatishchev/kenk-yadisk-photomaster

КЭНК!
Слава роботам!

Новый комплюктер и домашние облака

На новый год сделал себе подарок одновременно приятный и полезный — впервые за почти 10 лет обновил основной домашний компьютер. Много лет в корпусе Asus Ascot от собранного еще в середине 2000-x компа на базе Prescott трудился i5-2400. Сначала мне его хватало с лихвой, потом я стал упираться в троттлинг при сборке видео, купил башенный чудо-кулер, и при замене обнаружил что во время первой сборки забыл убрать защитную плёнку с оригинального кулера. Так, обретя полноценное охлаждение он и проработал до недавнего времени, закрывая большинство задач. Претензий было две — недостаточно быстрое кодирование видео в современные форматы, и откровенные тормоза при файловых операциях и включенном антивирусе, которые стали бесить.

Почитав эти ваши тридэньюсы, я открыл что за годы постепенного (и как я считал несущественного) прироста производительности, итоговая разница мощи актуальных камней и старичка — в разы, а значит обновиться действительно стоит.

Самое непривычное — я почитал обзоры, пособирал конструкторы, и впервые в жизни купил полностью готовый брендовый комп на i7-10700: оказалось что подходящая мне по параметрам и размерам модель ещё и стоит дешевле, чем собрать такой же конфиг самому.

Ощущения от скорости удивительные, а ещё удивительней полностью новая современная платформа, без механических дисков, тихая и производительная, размером с треть моего прошлого системника — ощущаю себя Робинзоном, вернувшимся в цивилизацию. Недостатки тоже есть — на материнке не распаян PCI слот, SATA не поддерживает эмуляцию eSATA, так что комп придётся дополнить новым кредлом для дисков и, может быть, контроллером IEEE1394.

Перенося софт и данные на новый комп, решил протестировать что там в домашних облаках в варианте Hyper-V (которого не касался почти 8 лет). Сверхъестественного ничего, всё работает, с конвертацией виртуалок между форматами успешно справляется StarWind V2V Converter — собственно, для фиксирования этой информации в первую очередь пишется пост. Кстати, для основных учебных проектов я наверное вернусь к Oracle VM VirtualBox, так как его образы могу крутить без преобразований и на Win10 и на macOS.

Забрать своё из облаков: жж и гуглоплюс

На каникулах перенёс в блог архив своего ЖЖ и гуглоплюса

ЖЖ

ЖЖ я завёл (судя по записи «хэхэ, жэжэ») в 2009 году, и активно писал в него несколько лет. Журнал сохранился в неизменном виде до декабря 2020, когда я провёл перенос его в этот блог. В журнале никогда не было особых обсуждений, да и сам я почти никогда ничего не комментировал в других журналах, так как чужие жж читал и читаю через RSS. Но как дневник, прото-инстаграмм и заметки использовал его плотно. К слову о комментариях — уже закончив перенос я вспомнил про те немногие комменты, что в моем жж были — и решил ими не заморачиваться. Такой вот чукча читатель и он же чукча-писатель без потребности в обратной связи.

Google+

Несколько лет в 2011-2014 я активно пользовался гуглоплюсом. Люблю тестить новые технологии, плюс идея с геолокацией оказать удивительно ёмкой на применение. Например, было интересно в новом месте посмотреть, кто постит что-то рядом (а вот на этом полустанке между Москвой и Киевом, есть пользователи гуглоплюса?). Ещё я нашел несколько интересных людей просто потому, что они постили из того же утреннего экспресса из Перди в Нерезиновую, что и я (и кстати, которых я благополучно потерял вместе с закрытием гуглоплюса). В московском метро на кольцевой клиент гуглоплюса меня постоянно определял как в Питере — это был забавный телепорт внутри сервиса.

Само закрытие гуглоплюса пару лет назад я как-то прощёлкал — знал о нём, но не придал значения. Когда мысль выдернуть оттуда посты меня всё же посетила — архивы сервиса уже были потёрты. Справедливости ради отмечу, что в процессе переноса (о котором ниже) я всё же столкнулся пару раз с тем что мои картинки по длинным урлам на серверах гугла ещё доступны, то есть удалили — но не всё.

В общем, в плане переноса мне повезло, что после перехода в гуглоплюс я настроил экспорт заметок из него в ЖЖ, поэтому тексты постов сохранились. А картинки, которые погибли вместе с G+, остались в бэкапах на домашнем хранилище (фотки со смартфонов я предусмотрительно синхронизировал на NAS уже в те года).

Таким образом, перед началом переноса у меня был выгруженный из жж архив, заполненный оригинальными записями вперемешку с полуистлевшими репостами из G+, а также архив оригинальных фотографий, павершелл и стойкое нежелание делать много ручной работы — в реальности, совсем без неё не обошлось, и в итоге я фактически открыл и в той или иной мере отредактировал каждый из постов, но основной объем работы по переносу, включая создание записей, правку форматирования, генерацию заголовков постов, выдерг тегов и местоположений, создание URL постов для эгеи, и кучу ещё всего сделали за меня роботы.

Процедура переноса.

Сначала я взял выгрузку актуальной базы из Эгеи и разобрался в её устройстве. Посмотрел как работает с базой Евгений Степанищев. В несколько итераций написал на павершелле парсер, который выдёргивает из поста жж данные — заголовок, тело, дату и теги (настроениями я не пользовался обычно), складывает и переименовывает картинки. Для импортированных из G+ постов сделал парсер отметок геолокации из тела поста. Ну и по мелочи множество всяких замен ссылок на формат эгеи, убирания форматирования и тому подобное. На выходе парсера были команды SQL, которые я копипастил большими кусками (набором постов за месяц сразу) в phpMyAdmin прямо на хостинге, и файлы картинок, которые я вгрузил пачкой по ftp.

В целом работа заняла почти все праздники. Я правил скрипт под менявшиеся несколько раз форматы постов, вгонял их в блог, открывал и редактировал где это было необходимо. Заодно я местами добавил фоток к постам или заменил фотки из жж на оригиналы из архива в бОльших разрешениях, местами добавил комментарии «из 2020», или поменял ссылки наружу на работающие. В целом данные переехали как есть примерно на 70-80%

Изменения в технологиях и головах

По ходу работы подметил много интересного:

  • с одной стороны правильно говорят, что информацию из интернета удалить невозможно — разыскивая хоть какие-то дополнительные следы своей страницы в гуглоплюсе я находил репосты, сайты-индексаторы и каталоги, хоть и не нашел в итоге ничего удобоваримого (а в archive.org гуглоплюс не сохранился). С другой стороны, примерно половина ссылок из постов жж на внешние ресурсы, ролики с ютуба и тому подобное не открылись. Какие-то сайты и СМИ просто перестали существовать, какие-то поменяли структуру ресурса (например, мне удалось по не изменившемуся тексту найти новость на сайте мчс от 2012 года, на которую ссылался мой пост). В целом, здесь делаю вывод, что действительно важные вещи стоит либо цитировать в тексте поста полностью, либо выгружать и прикладывать к постам например в pdf (как я и сделал несколько раз в итоге). Что делать с ютубом и прочими большими медиа-штуками пока непонятно.
  • технологии развиваются стремительно. В жж в начале 2010-х я часто встраивал в заметки плееры музыки и видео со сторонних сайтов — все эти фреймы и жабаскрипты уже не работают вообще, сервисы переделаны или уничтожены. Собственно, встройку ютуба удалось победить только выпарсив из кода начала десятилетия id роликов и сформировав актуальный линк вручную.
  • при этом какие-то вещи остаются на удивление незыблемыми. Живы сайты, куда я 10 лет назад выгружал треки покатушек, живы вручную забитые маршруты на Яндекс картах и на гугле, живы картинки на хостингах, куда не заглядывал 7-8 лет, живы примерно половина роликов ютуба (и некоторые набрали за это время миллионы просмотров)
  • я 10 лет назад был значительно резче, злей, радикальней, нетерпимей в мыслях и высказываниях. Удивительно насколько было мне тогда важно, что «в интернете кто-то неправ», или что какая-то технология крива или не работает. Мудрость это или равнодушие сейчас — не знаю. Какие-то тогдашние свои позиции я больше не разделяю, за какие-то высказывания сейчас стыдно, но я решил перенести все посты как есть.
  • интересна повторяемость сюжетов и каких-то идей в мыслях, которые забывались и изобретались заново — встретил несколько таких, уже не помня эти их первые (?) инкарнации

Эта работа — часть большого проекта по забираче всего своего у корпораций и сбору персонального цифрового архива. Надеюсь, хватит сил продолжить её дальше, в планах ещё много всего, не переключайтесь!

Теги для импортированных постов:
посты из гуглоплюса
посты из жж

Забрать своё из облаков: начало

Давным-давно, на заре интернета (модемы, первые порталы, фтп с музыкой и скоростью в 10 мегабайт в час), мы ржали над шуткой

Вопрос в службу техподдержки.: «Я скачал файл из интернета, теперь он мне больше не нужен. Как его закачать обратно?»
Ответ: «Вот из-за таких уродов, как ты, в Интернете скоро совсем файлов не останется.»

Реальность как всегда превзошла все фантазии — прекрасные умные компьютерщики напридумывали сервисов и наделали смартфонов, и все от мала до велика стали жить, общаться и хранить данные в этих ваших интернетах. Теперь никто ничего не скачивает — все генерят контент, шерят, публикуют, лайкают и репостят, смотрят и слушают онлайн, и всё своё существо держат там. Мы резвимся как пятилетки на этой цифровой детской площадке, и не задумываемся, где лежит наше электронное настоящее и прошлое, и какую реальную власть над ним мы имеем. История эта удобная и вполне себе безоблачная — до тех пор пока у тебя не уведут аккаунт от соцсети, или пока, например, администрация ресурса не удалит твою страницу, потому что ты дрянной (по их мнению) президент и позволяешь себе лишнего.

Я какое-то время работаю над идеей забрать свои данные из соцсетей-облаков, чтобы хранить у себя (ну ок, не забрать — но хотя бы получить копию). Оказывается, сделать это непросто, и помогать юзерам никто не горит. Одно время у Яндекс Диска в интерфейсе была кнопка, выгружающая на него фото из других соцсетей, но её давно выпилили. В 2016-17 годах Касперский анонсировали похожий сервис ffforget.me, но так его и не выкатили. А значит, придётся делать всё вручную (максимально автоматизируя, как я это люблю)

Пока результаты исследований о возможности экспорта данных такие:

  • вконтакте. Позволяет запросить выгрузку всех данных. Выгрузка представляет собой небольшой архив, внутри набор html страниц со ссылками на оригинальные медиафайлы — то есть все альбомы, вставленные в переписку фото-видео и тому подобное открываются из интернета, полноценной локальной копией это не является. Чтобы перенести инфу в полный оффлайн или на свой ресурс, придётся писать парсеры и выкачивать картинки и видео, от музыки думаю максимум что выйдет — утащить названия треков.
  • инстаграм. Позволяет запросить выгрузку всех данных. На выходе страница со ссылками на архивы по 2 ГБ, которые по одному нужно прокликать и скачать за ограниченные несколько дней. Внутри каждого архива — индивидуальный набор данных за определенное время: медиаматериалы, разложенные в папки по месяцам (фото и видео с очищенными метаданными и служебными именами файлов) и отдельные json с текстами постов, временем публикации, локацией в виде текста (без координат). Файлы с метаданными лежат в корне каждого архива и поэтому все архивы в одну папку развернуть нельзя — метаданные затрутся.
  • гуглефото. Позволяет запросить выгрузку всех фоток и видео. На выходе страница со ссылками на архивы по 2 ГБ, которые по одному нужно прокликать и скачать за ограниченные несколько дней. Внутри архивов материалы разложены по альбомам как в сервисе (те что вне альбомов — разложены по годам). В файлах сохранены метаданные, плюс к каждому выгружается json. Имена файлов оригинальные как были в устройстве. Можно всё развернуть в одну папку.
  • жж. Сервис полумёртвый, все программы-выгружальщики данных устарели и работают через пень колоду. Лучший результат по моему опыту — у https://github.com/ati/ljsm. На выходе набор связанных html страниц с картинками которые можно смотреть оффлайн
  • яндекс диск — данные доступны для скачивания через родное приложение, метаданные на месте, имена файлов поменяны на сгенеренные приложением (в формате даты) при начальной загрузке с телефона, например.
  • одноклассники, фейсбук — мне неактуально, не изучал

В целом, утащить себе в нору и разглядывать архивы холодными ночами ядерной зимы, без доступа к глобальной сети и сервисам — перспектива малоуспешная. Тем не менее, я планирую по максимуму перенести архивы на свою площадку, а там уже и бэкап сделать можно, и виртуальный веб-сервер на домашнем компьютере поднять, если вдруг импичмент случится

Такие дела

старые карты на retromap.ru

Не устаю уже 10 лет как радоваться крутейшему проекту, позволяющему смотреть в привязке параллельно актуальные и старинные карты местности — retromap.ru

Один из любимейших объектов — родная Пердь. Вот например Троицкое-Кайнарджи на карте 150-летней давности

Радует что с годами проект только хорошеет, вебдванольнеет и пополняется картами. Очень люблю его изучать.

Из недавних открытий по району, который теперь интересует меня больше -вот этот кусок

Сейчас это неприметная аллея в парке, асфальтированная но пешеходная, перекрытая столбиками от машин. Но исторически — это отрезок Носовихинского шоссе (тракта), который, как и остальные радиальные дороги столицы, вел из центра Москвы в область. Носовиха отвечала за путь на Павловский Посад. В 1864—66 годах началось строительство Московско-Курской железной дороги, которая перерезала Носовиху в нескольких местах, и с тех пор дорога перестала идти непрерывно от центра в область, в современном виде стартуя вообще от МКАД (да и шоссе, на фоне соседок, назвать его сложно).

И вот представляете, можно гулять по парку, по такой себе вполне широкой асфальтовой дорожке, которая начинается нигде и исчезает, упираясь в жилой комплекс — а это на самом деле точно географически место, по которому столетиями люди ездили между крупными городами страны. Меня невероятно впечатляет этот факт

Опыт в айти — секретное оружие или якорь

Изучая рынок труда в айти обнаружил, что позиции специалистов (даже очень глубоких по требованиям) в основном рассчитаны на молодёжь. Возникает сразу несколько вопросов.

Куда деваются старые программисты (не всем же уходить в менеджмент)?

Бывают ли пожилые и продуктивные программисты и прочие технари? Мне вот по жизни если и попадались взрослые айтишники, то это как правило были люди с точки зрения квалификации довольно устаревшие и ненавороченные, но может выборка фиговая?

Существует ли, объективно, айтишная чуйка? Я вот во многих случаях, даже не будучи тонким знатоком конкретной технологии, пятой точкой чую кривость, ненадёжность, рискованность, непроработанность куска системы или проекта. Но может это самовнушение?

Как отвечать на эти вопросы непонятно, как оптимально действовать в условиях стремительно пролетающих на календаре лет — тоже. Буду размышлять дальше.

Кстати, на эти размышления меня навёл произошедший только что чуднОй случай: отлаживая скрипт в окне павершелла я нечаянно крутанул скроллик мыши с зажатым ctrl — и о чудо, шрифт увеличился и окно терминала отмасштабировалось!!! Во-первых, я не знал что так можно. Во-вторых, со своим ультрамега опытом начиная от всех этих ваших дос 622, я прекрасно представлял как настраивается через параметры шрифт и размер окна терминала в винде, и никогда бы даже не попробовал менять его таким вебдванольным способом — хотя молодой спец бы так сделал инстинктивно в первую очередь. Получается, опыт тут сыграл как якорь? Но, с другой стороны, я хак вроде запомнил, не брюзжу «вот до чего билгейтсы страну довели», и если что помню, в отличие от всяких сопляков, и дедовский способ. Наверное, всё же интегрально я тут в плюсе. По крайней мере, хочется надеяться.

КЭНК: выгрузка фото из iCloud на Яндекс диск

Технологии предоставляют людям всё больше готовых результатов, скрывая под капотом внутреннюю сложность и логику. Это здорово, потому что мы получаем кучу услуг и сервисов, не прилагая к этому усилий. Это плохо, потому что мы не управляем этими услугами, можем лишиться их в любой момент и, если не предпринимать дополнительных мер, не сможем ничего тут исправить.

Например, Инстаграм — попробуйте штатными средствами, положенными по закону, выгрузить свои данные — и через боль и неудобства вы сможете сохранить жалкое подобие архива, а как красиво всё смотрится пока работает. Увели у вас аккаунт, заблокировали по какой-то уважительной для роботов причине — вы абсолютно беззащитны перед произволом обстоятельств и желаниями компании.

Сегодняшний рассказ — о сервисе, который достался «забесплатно», но потом перестал работать, и о том как я добился получения привычного результата уже своими силами.

Что случилось и кто виноват

В мире победившей вычислительной фотографии я уже много лет снимаю на телефон и веду архив фото на телефоне. Это удобно, и всё связанное с повседневным фото завязано у меня на экосистему Apple. Однако, было бы глупо полагаться только на одного вендора, да и вручную выдёргивать фото из Apple для резервной копии не самый удобный вариант, поэтому как только Яндекс запустил фичу автоматической синхронизации фотографий на Яндекс.Диск, я сразу же начал ей пользоваться.

Вышло удобно:

  • фотографирую на телефон или планшет, имею синхронизированные фотки на всех личных устройствах и ноуте (на разных платформах приложение называется по разному, буду дальше использовать термин Айклауд как синоним определения «ну где там у эпплов всё лежит и красиво синхронизируется и показывается на всех девайсах»).
  • Сразу после съемки или по напоминанию отмечаю в Айклауде сердечком лучшие фото и удаляю откровенный брак и шлак, на телефоне остаются материалы лучшие и «пусть просто для архива»
  • Всё это время полное зеркало всех фото и видео с телефона автоматически синхронизируется с папкой Фотокамера в Яндекс диске (а она уже в свою очередь бэкапится как надо на NAS)
  • раз в 2-3 месяца провожу чистку:
  1. захожу в айклауд через приложение на ноуте или телефоне,

2. скрываю все избранные (Library — альбом Favourites — ⌘A — hide items),

  1. стираю все оставшиеся нескрытые (и не лайканые) фотки (Library — альбом photos — ⌘A — delete items),
  2. возвращаю все скрытые обратно (Library — альбом Hidden — ⌘A — unhide items)
  • переношу все фотки из папки Фотокамера Яндекс диска в долговременный архив, Яндекс на телефоне сам синхронизируется и обратно заливает в фотокамеру только избранные фотографии

Таким образом я всегда имею две копии актуальных фоток (избранные + недавно сделанные) на яндексе и в айклауде, а также легко регулярно очищаю хранилище на устройствах от ненужных данных, оставляя только лучшие. Также благодаря этому умные алгоритмы Apple и Яндекса генерят мне истории и ролики-воспоминания на основе лучших фото и видео из поездок, с важных событий и тому подобное.

Красиво переименованные и уложенные яндексдиском файлы

Схема удобная, и работала она несколько лет, пока не случилась та самая упомянутая ранее потеря сервиса. В какой-то момент Яндекс поменял логику работы мобильного приложения — весной при очередной чистке я обнаружил, что он больше не перезакачивает в папку Фотокамера файлы, которые ранее в ней были, и после были мной удалены. Похоже что у себя они хранят хэши всех файлов, так как отредактированные после фотки в диск при такой схеме перезаливаются. Но неизменные — нет, а значит я больше не мог проводить синхронизацию лучших фото при регулярной чистке.

В принципе, потеря небольшая, просто весь 2020-й Яндекс диск скидывал мне напоминания о событиях 19-го. Тем не менее, это натолкнуло меня на мысль о том, что случись что — у меня есть полный архив всех фото включая самые свежие, но архива лучших нет! На отбор их потрачено время, и теперь сведения этого отбора не защищены от потери.

Казалось бы, чего тут сложного? Берём штатный способ выгрузки из Айклауда, сохраняем в папку избранные данные за нужный период — вуаля. Но тут вскрывается второй упомянутый ранее аспект — скрытая под капотом сложность.

Айклауд (как и Яндекс) красиво показывает в ленте фото по датам и местам, умеет на основе этой метаинформации собирать истории и альбомы. При этом на уровне файлов творится дикая дичь — в зависимости от источника (фото сделано на телефон, сохранено из мессенджера, проявлено в Лайтруме на компе и прислано по почте, это скриншот экрана или сохранёнка с веб страницы), а также от типа файла (разные форматы видео и графики), метаданные о времени съемки, локации и другом хранятся в разных полях по разной логике. И вот выгруженные штатными средствами файлы именуются непонятно как, имеют странные даты съемки (ещё и отображаемые по-разному в зависимости от программы просмотра) — в общем никакой красоты, удобства и единообразия тут нет.

Выгрузка из Айклауда. Ад и мешанина в именах, атрибутах и метаданных файлов. Дата съемки видео якобы неизвестна (но она есть, просто зашита глубоко)

В логику работы Айклауда все эти тонкости зашиты. В логику работы яндекса тоже — мобильное приложение при синхронизации переименовывает файлы по дате правильно, сохраняет геолокацию и всё прочее. Но теперь-то воспользоваться этой логикой яндекса мы не можем.

Что делать

Проводим НИР, применяем для решения задачи великий и могучий ExifTool. Общая схема такая:

  • экспортируем данные из macOS Photo в оригинальном качестве и с записью дополнительных файлов xmp
  • пробиваем с помощью ExifTool метаданные из xmp в медиафайлы
  • проходимся по файлам набором команд ExifTool с разными параметрами в зависимости от типа файла и сохранённых в нём данных, чтобы переименовать их по дате
  • раскладываем полученные файлы по каталогам дат (для удобства)

Собственно, на понимание того, в каких случаях как может храниться дата съемки, и экспериментальный подбор команд для третьего пункта, и ушло несколько часов этой субботы

Зато теперь есть способ выгрузить лучшие материалы из Айклауда и разложить их красиво с сохранением метаданных, в том числе и положить в Яндекс диск для бэкапа и красивостей. Вторичная выгода — прокачка скилла и овладение инструментом ExifTool и скриптования на bash под macOS, теперь эти ваши экзифы и переименования файлов можем делать с закрытыми глазами и одной левой

Итог

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

# экспортируем фотки из macOS Photo в оригинальном качестве и с записью xmp, открываем терминал в этот каталог

# далее пробиваем параметры из xmp в графические файлы
find . -maxdepth 1  -not -iname "*.xmp" -exec bash -c 'file="{}"; xmpname=${file%.*}.xmp; echo "$xmpname"; echo "$file"; exiftool -tagsfromfile "$xmpname" -xmp "$file" -overwrite_original' \;

# пробиваем атрибуты и переименовываем файлы по дате в зависимости от типа и содержимого

exiftool '-FileModifyDate<TrackCreateDate' '-FileName<TrackCreateDate' -d "%Y-%m-%d %H-%M-%S.%%f.%%e" *.mov -directory=out
exiftool '-FileModifyDate<TrackCreateDate' '-FileName<TrackCreateDate' -d "%Y-%m-%d %H-%M-%S.%%f.%%e" *.mp4 -directory=out

exiftool -v '-Filename<${datetimeoriginal}.%f.%e' -d "%Y-%m-%d %H-%M-%S" *.jpg -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq "0000:00:00 00:00:00"))) and ($filetype eq "JPEG")' 
exiftool -v '-Filename<${datetimeoriginal}.%f.%e' -d "%Y-%m-%d %H-%M-%S" *.jpeg -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq "0000:00:00 00:00:00"))) and ($filetype eq "JPEG")' 
exiftool -v '-Filename<${DateCreated}.%f.%e' -d "%Y-%m-%d %H-%M-%S" *.jpeg -directory=out -if '($DateCreated and (not ($DateCreated eq "0000:00:00 00:00:00"))) and ($filetype eq "JPEG")'
exiftool -v '-Filename<${DateCreated}.%f.%e' -d "%Y-%m-%d %H-%M-%S" *.jpg -directory=out -if '($DateCreated and (not ($DateCreated eq "0000:00:00 00:00:00"))) and ($filetype eq "JPEG")'


exiftool -v '-Filename<${datetimeoriginal}.%f.%e' -d "%Y-%m-%d %H-%M-%S" *.heic -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq "0000:00:00 00:00:00")))'

exiftool -v '-Filename<${datetimeoriginal}.%f.%e' -d "%Y-%m-%d %H-%M-%S" *.png -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq "0000:00:00 00:00:00")))'
exiftool -v '-Filename<${DateCreated}.%f.%e' -d "%Y-%m-%d %H-%M-%S" *.png -directory=out -if '($DateCreated and (not ($DateCreated eq "0000:00:00 00:00:00")))'

exiftool -v '-Filename<${datetimeoriginal}.%f.%e' -d "%Y-%m-%d %H-%M-%S" *.gif -directory=out -if '($datetimeoriginal and (not ($datetimeoriginal eq "0000:00:00 00:00:00"))) and ($filetype eq "GIF")' 
exiftool -v '-Filename<${DateCreated}.%f.%e' -d "%Y-%m-%d %H-%M-%S" *.gif -directory=out -if '($DateCreated and (not ($DateCreated eq "0000:00:00 00:00:00"))) and ($filetype eq "GIF")'

# Чистим xmp
rm -f ./*.xmp

# перекладываем файлы в папки YYYY/YYYY-MM/
cd out
find . -maxdepth 1  -type f -exec bash -c 'file=$(basename "{}"); yearname=${file:0:4}; monthname=${file:5:2}; pathname="$yearname/$yearname-$monthname"; mkdir -p "$pathname"; echo "$pathname"; mv "$file" "$pathname"/ ' \;

Полезные ссылки по теме

КЭНК!
Слава роботам!

Пионерлагерь Пыльная Радуга и Такой Макар в Арбат Холл

20 ноября пробрался с фотоаппаратом в зал (и немного в закулисье) шабаша группы Пионерлагерь Пыльная Радуга в Арбат Холле.

Пионерлагерь Пыльная Радуга в Арбат Холле

Дико соскучился по таким безумствам на сцене и в зале, ребята традиционно прошлись по всем граням ярости, тоски и пронзительного недоумения по поводу всего происходящего на этой странной планете. Дядя Лёша был вполне себе огурец после пневмонии, Мирза скакал и валялся по сцене в лучших традициях, Андрей рубил и оч круто давал второго голоса, Никита невозмутимо вколачивал бас бочкой толпу в танцпол. Было как всегда страшно, больно, грустно и очень-очень хорошо.

Пионерлагерь Пыльная Радуга в Арбат Холле

Шоу открывали большим сетом мои любимые интеллигентные гранж-хулиганы из Рыбинска Такой Макар — им за приглашение, возможность попасть к сцене и за кулисы, отдельное огромное спасибо. Ну и музыка их, честная и злая — это невероятное что-то.

Такой Макар в Арбат Холле

Сет Макара сняли на 5 камер, включая мои планы из под сцены и два плана с гопро. Надеюсь материал пригодится для той задумки, для которой его и попросили снять )))).

Сообщества групп в ВК:
Пионерлагерь Пыльная Радуга
Такой Макар

Такой Макар в Арбат Холле

Из-за ковидлы совместное шоу ребят в Ярославле перенеслось аж на май — ну, доживём и оторвёмся как следует.

КЭНК: сортируем и фильтруем каналы IPTV

Решил подарить маме на новый год IPTV от широко известного в узких кругах провайдера. Этот сервис за небольшую плату предоставляет плейлисты с каналами, и главная суть услуги — то что списки каналов обновляются, протухшие источники заменяются новыми, клиент не бегает по интернетам в поисках собранных энтузизястами плейлистов сомнительного качества, и не остаётся вдруг без любимого НТВ под ёлочкой.

Главный недостаток сервиса в том, что встроенная система управления каналами примитивна: можно только включать или исключать каналы целыми категорями, по тематикам или по странам. Нет возможности задания порядка каналов, нет возможности индивидуальной фильтрации. Но так как мама — человек старой закалки, ей во-первых нужно чтобы каналы были По Порядку, усвоенному со времен телевизора Темп, а во-вторых, этого вашего супер-изобилия ей не надо, а моя тайная мечта тут — пересадить её с ток-шоу на видео природы.

Телевизор Темп. Ровно такая же модель стала причиной больших перемен в семье моих родителей в начале 1980-х

При этом вручную колбасить плейлист от провайдера дело муторное, а с учётом протухания ссылок еще и потенциально часто повторяемое: сам провайдер предлагает в плеер забивать ссылку на динамически обновляемый плейлист, и тогда там всё свежо и отлично, а вот если плейлист забить просто в виде текста — тут уже никакой магии волшебства, и со временем окно в дивный мир превратится в тыкву.

По итогу размышлений принимаю решение реализовать компромиссный вариант. По мере протухания каналов и жалоб клиента, буду скачивать и обновлять плейлист, фильровать и обновлять в настройках плеера. Но максимально всё это автоматизирую. На выходе — плейлист с центральными каналами в HD качестве и правильном порядке (Первый, Россия и тому подобное), дополненный избранными каналами про природу, путешествия, и хорошее кино. Под рукой винда — значит фигачим на павершелле.

Первая итерация — скрипт, умеющий взять плейлист, и отфильтровать и отсортировать его по заданному правилу (простой json файл). В дальнейшем, если потребуется, можно прикрутить в него скачивание провайдерского плейлиста (тривиально) и закачивание в плеер (тут будет непросто разобраться в формате HTTP запроса). Но пока так. Быстро, зло, бесплатно, работает.

Страница на гитхабе https://github.com/alexbatishchev/kenk-iptv-playlister

КЭНК!
Слава роботам!

Ранее Ctrl + ↓