300k видеозаписей, наводим порядок
После того как мне удалось успешно разобраться с аудиозаписями и научиться легко клеить видео для домашнего видеоархива, мне пришла мысль:, а почему бы все это не совместить? Можно ведь таким же образом распознать голоса на видео, сделать поиск, выложить куда‑нибудь для удобства доступа и резервирования. Сказано — сделано (ага, сейчас: «вошли и вышли, приключение на 20 минут»).
Первая проблема: видеофайлы они большие, местами очень большие. Явно больше 5 МБ, которые позволяет загружать Notion в бесплатной версии, иногда даже больше 5 ГБ, разрешённых в платной версии. Плюс к этому, видео, загруженное на Notion, можно проиграть только в Notion, что совсем неудобно, если хочется смотреть видео на телевизоре. Ну и в завершение вспоминаем, что API у Notion не позволяет загружать что‑либо, а сторонние библиотеки малость «глюковатые», и с большими файлами тоже могут быть проблемы.
Итак, дано около 300 000 исходных файлов. После склейки по дням получилось около 6000, да, меньше, но всё ещё внушительное количество.
А какой есть сервис, на который можно загрузить бесплатно 6000 видео файлов? Который можно (было бы) проигрывать на любых устройствах? Да ещё и с хорошим стабильным API? На «you» начинается, на «tube» заканчивается. (Нет, это не VK Video.) В общем, решил грузить на YouTube с доступом по ссылке и начал писать соответствующий скрипт. Что может пойти не так?
«Не так» началось с ограничений. Как пользователь я могу загрузить хоть 100 видео в день, но вот от лица проекта в API всё немного сложнее. По умолчанию в день лимит 10 000 поинтов, но при этом загрузка одного видео стоит 1600 поинтов. Получается, что в день можно загрузить только 6 (шесть!!!) видео. Вспоминаем, что у нас около 6000 видеофайлов, и получаем немногим меньше 3-х лет. Мда, я, конечно, терпеливый, и скрипт может работать без моего участия, но ждать столько времени не хотелось.
Но игра начата, скрипт готов, начал искать варианты. Нашёл, что можно заполнить специальную форму, пройти аудит, и тогда YouTube может значительно расширить количество поинтов на день. Форма казалась несложной, заполнил данные, описал проект, запросил увеличение до 1 000 000.
Ответили на удивление быстро — примерно за день. Сказали, что краткое описание проекта их не устраивает, и попросили прислать всю проектную документацию (ага, на скрипт для загрузки домашних видео). Написал более развернутое описание на «систему интеграции домашнего видео дневника». Ещё через день приходит запрос: «А пришлите‑ка flow chart, как это будет работать». Делаю и это. И так далее — в итоге было около 8 дополнительных запросов. Я уже почувствовал себя в роли менеджера проектов и реально подготовил проектную документацию на свой виртуальный проект. Надо сказать, что я уже не особо верил в успех, но нет, спустя полторы недели мне одобрили запрашиваемое повышение квоты. И я, воспрянув духом, запустил скрипт на полную мощность.
Но «полная мощь» длилась недолго. После первых пары сотен видео мне начали прилетать предупреждения о «нарушении правил в отношении детей». Начал смотреть, что же не так в этих видео. А не так оказалось, что дети, особенно совсем маленькие, не всегда ходят одетыми, а еще сидят на горшке, купаются в ванной и все это голышом! Чуть на видео детский зад — всё: видео блокируется. Ладно, так уж и быть, добавил в скрипт определение, какие видео заблокированы, добавил инструменты для быстрого исключения спорных фрагментов и перезагрузки видео.
Казалось, процесс пошёл. Прилетает блок, я смотрю видео, убираю неприемлемые фрагменты, перезагружаю — все счастливы. Но нет, примерно на сотом заблокированном видео (при загруженной 1000) на канал прилетает страйк: мол, стоп, что‑то вы все непотребства грузите, отдохните‑ка недельку. Но если потом будут ещё нарушения, то будете отдыхать две недели, а если ещё — удалим канал. После недели отдыха второй страйк я получил за первое же заблокированное видео.
Сказать, что я расстроился, — ничего не сказать. 1000 видео уже загружено, процесс налажен. Ставки повышаются. Раз мне кинули страйк на 100-м заблокированном видео, а я уже загрузил 1000, значит, я могу завести ещё несколько каналов (мне ведь не сам канал важен, а список ссылок видео) и загрузить туда остальное, тем более что «голозадых» видео больше не должно быть — дети на видео подросли. Рождается такая схема: есть тестовый канал, на который скрипт загружает видео, ждет пару дней, проверяет, что видео не заблокировано, и после этого загружает его уже на основной канал.
Скрипты написаны, начинаю процесс и… получаю страйк после первого же заблокированного видео на тестовом канале. Видимо, алгоритмы YouTube взяли мой проект «на карандаш» и теперь будут выдавать страйки сразу. Завёл ещё один канал — история повторилась. Хотел завести ещё, но увы: для верификации канала, с возможностью загружать видео, нужно привязывать номер телефона. На один номер можно привязать не более двух аккаунтов, а номера телефонов закончились. Нет, можно было бы купить какие‑то виртуальные номера и попробовать на них, но, во‑первых, это не очень безопасно, во‑вторых, совсем не бесплатно, да и в‑третьих, стало ясно, что вариант тупиковый — уж слишком много аккаунтов может понадобиться.
Пришлось отложить скрипты для YouTube в стол и искать другие варианты.
После перебора различных сервисов мне попался Dailymotion (заблокирован в РФ, но кому это сейчас мешает? Тем более, что сейчас уже и YouTube без VPN не у всех работает). Самое главное, что на нём можно регистрировать аккаунты без номера телефона, паспорта, верификации и т. д. Достаточно только адреса почты (а их можно сделать в любых количествах!). Плюс к этому — удобный API, официально поддерживаемая библиотека на Python и возможность встраивать видео на другие сайты. Да, есть ограничение — 15 видео в день для не верифицированных аккаунтов. Но если я могу за полчаса зарегистрировать 10 аккаунтов, то 150 видео в день меня вполне устроит. Сказано — сделано. Скрипт написан, загрузка пошла… Что может пойти не так?
А оказалось, что там тоже не даром разработчики хлеб едят. 15 видео на первый аккаунт загрузил, скрипт переключается на второй, а там… «извините, лимит исчерпан». То есть, он ещё и по IP смотрит. Но тут уже дело техники: взял библиотеку, прикрутил прокси — и дело пошло. Но не долго.
Через неделю загрузки прилетает что? Правильно, «нарушение правил в отношении детей». Причём на другие видео! Не на те, что блокировал YouTube, да ещё и с опозданием — видать, там проверки идут в отложенном режиме. Просматриваю видео и не нахожу там ничего подозрительного. Подаю апелляцию, и она, внезапно, проходит (YouTube обычно игнорировал все апелляции, я и тут не надеялся, но прошло).
Проходит ещё несколько недель загрузок, часть видео постфактум блокируется, часть возвращается по апелляции, и в конце концов я всё‑таки нарываюсь на страйк: мол, у вас на канале есть нарушения, канал заблокирован и будет удалён. Но я‑то все видео с нарушениями удалял! Пишу апелляцию, и канал восстанавливают. (Впрочем, даже если бы не восстановили, перезагрузить видео с одного канала — дело нескольких дней).
И всё было хорошо: дети на видео выросли, голых поп больше нет, всё чинно, благородно, но… Появились большие видео, и оказалось, что Dailymotion не поддерживает видео больше 4 GB. Таких видео не много, но они есть, пережимать и терять в качестве не хотелось. Что же делать? Искать новый сервис? Но нет, тут почти всё загружено, так что большие видео просто пошли на YouTube, благо скрипты для него есть, система отлажена, а голые попы, даже если единичные попадутся, не так уж страшны — у меня же три тестовых канала.
После того как всё было загружено (ну, если честно, не после, а вовремя — все эти процессы шли параллельно: на видеокарте шло распознавание аудио, CPU занимался склейкой, а я борьбой с цензурой и прочими скриптами), встал вопрос загрузки на Notion. В целом, всё, как и с аудио, но в силу того, что файлы хранятся не в Notion, да ещё и в разных источниках, пришлось немного усложнить структуру.
Сейчас весь архив уже обработан и загружен, а новые видео добавляются автоматом так же как и для аудио.
mmdiary --video --dailymotion --notion
За исключением периодической проверки и полуавтоматической загрузки больших видео на YouTube, задача полностью автоматизирована. А с использованием Notion можно легко искать видео по словам или просто фильтровать их по дате. Это особенно удобно: можно, например, задать фильтр »-24–09» — 24 сентября за все годы — и увидеть, как мы провели этот день 3, 5, 10 лет назад буквально в два клика. Ну и просматривать видео там же, либо отправлять ссылку на нужное устройство для отображения.
Если кому будет интересно воспользоваться моей системой, милости просим, код и детальные инструкции по установке и настройке здесь