YouTubeDrive: хранение файлов на YouTube


YouTubeDrive: хранение файлов на YouTube

Хостинг неограниченного размера? Звучит как нечто фантастическое и невозможное по законам природы. Примерно как вечный двигатель. Но что, если такое возможно? (не вечный двигатель, конечно, а неограниченный хостинг).

Если подумать, ведь бесплатное хранилище неограниченного размера предоставляют десятки интернет-сервисов, от соцсетей до фотохостингов. Например, ограничение YouTube на размер одного видеоролика — 12 часов или 256 ГБ, но на количество видеороликов ограничений нет.

Теоретически нескольких видеороликов по 256 ГБ достаточно, чтобы спрятать в них зашифрованную копию своего SSD.

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

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

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

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

YouTubeDrive

YouTubeDrive — это пакет для Mathematica, который перекодирует любые файлы в пиксели RGB. То есть любой поток данных просто транскодируется в видеопоток — а потом обратно. Программа написана пять лет назад чисто для проверки концепции, что такое возможно (PoC).

Промежуточный видеоформат создаётся с единственной целью — для видеохостинга.

То есть схема такая:

YouTubeDrive написан на Wolfram Language (язык Mathematica). Он кодирует/декодирует произвольные данные, а видео автоматически загружаются и выгружаются с YouTube.

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

Вот код пакета. Разумеется, для его работы должна быть установлена сама программа Mathematica.

YouTubeDrive использует стандартные утилиты FFmpeg, youtube-upload и youtube-dl. Эти программы необходимо загрузить и установить отдельно, а перед первым использованием в пакете YouTubeDrive.wl (строчки 75–77) нужно указать места их установки:

Например, таким образом:

После установки этих программ и изменения конфигурационных файлов можно открыть сам пакет YouTubeDrive.wl в программе Mathematica (через File ⇨ Install. ⇨ Package ⇨ From File ⇨ YouTubeDrive.wl ).

Перед использованием с помощью youtube-upload загружаем тестовое видео в свой аккаунт, логинимся в YouTube — и получаем токен OAuth . Этот токен аутентификации понадобится для загрузки видеороликов через YouTubeDrive.

Алгоритм работы YouTubeDrive довольно понятен. В пакете две основные функции:

    Функция YouTubeUpload[bytearr] кодирует массив данных bytearr как простое видео RGB, загружает на YouTube и возвращает ID видео.

По умолчанию кодируется 64×36 пикселя RGB, которые масштабируются в 2304 квадратика 20×20 пикселей кадра 1280×720. Значения RGB только 0 или 255, то есть получается три бита на квадратик. Значения RGB записываются в файлы .PNG, которые с помощью кодека FFmpeg склеиваются в валидный видеоролик MP4, способный пережить дальнейшее транскодирование на сервере YouTube.

В реальности транскодер YouTube может случайно поменять местами значения отдельных пикселей 0 и 255, поэтому большие квадраты 20×20 выполняют роль механизма коррекции ошибок.

Пример использования

Насколько мы поняли, для примера автор программы взял из функции Бесселя простенький ByteArray и запустил YouTubeUpload из нашего пакета. В программе Mathematica это делается примерно так:

Результат кодирования массива данных объёмом чуть больше 18 КБ в видеоформат выглядит следующим образом:

Если интересно, можно скачать видеоролик и посмотреть на него, можно даже расшифровать вручную. Вместо youtube-dl для скачивания видео с YouTube сейчас обычно используют более продвинутый форк yt-dlp.

Список доступных форматов:

Скачиваем формат 22:

На этом файле в Mathematica можно запустить функцию YouTubeRetrieve из пакета YouTubeDrive , которая выполнит обратное преобразование.

Конечно, такая схема кодирования не очень эффективна — примерно 1 минута видео на 1 МБ информации. Этот параметр можно легко увеличить на порядок (до 10 МБ на минуту видео), если вместо квадратов 20×20 внедрить какой-нибудь нормальный алгоритм коррекции ошибок.

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

YouBit

Идея хранилища файлов на YouTube выглядит весьма привлекательно. Два года назад появилась программка fvid, которая кодирует файлы без необходимости устанавливать Mathematica. Из зависимостей ей нужен только FFmpeg и libmagic.

Она работает проще. Кодирование произвольного файла в видеоформат:

В продолжение этой темы недавно вышла утилита YouBit. Так сказать, последнее достижение прогресса в данной области.

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

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

В канале яркости пиксели принимают значение от 0 до 255. Соответственно, если мы кодируем в пикселе один бит (параметр bpp: 1 , то все значения от 128 до 255 воспринимаются как единица, а меньшие значения — как 0. Для примера, если кодировать в одном пикселе два бита (00, 01, 10 или 11), то весь диапазон яркости разбивается на четыре области (0–63, 64–127, 128–191, 192–255) и так далее. Чем больше бит на пиксель, тем меньше размер файла и выше вероятность некорректной расшифровки конкретного бита после транскодирования видео на серверах YouTube.

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

В-третьих, YouBit работает с видео любого разрешения. Оптимально 1920×1080.

Наконец (в-четвёртых), автор реализовал функцию «нулевых фреймов» — вставки чёрных кадров между кадрами с полезной нагрузкой, что позволяет снизить битрейт примерно на 40% (и размер файла) при кодировании видео на сервере YouTube.

Аргумент chrome указывает, из какого браузера YouBit должен извлечь куки для аутентификации на YouTube (соответственно, этот браузер должен авторизоваться на studio.youtube.com/, открыть сессию и получить куку).

Затем загрузка происходит непосредственно с помощью headless-браузера Selenium в фоновом режиме. Очень грамотный подход.

Скачивание и обратное декодирование видео:

Декодирование локального видео, скачанного с YouTube:

Все операции можно выполнять через Python API.

Как мы уже говорили, ограничения YouTube на размер видеоролика — 12 часов или 256 ГБ. Если аккаунт не верифицирован, ограничение 15 минут.

Настройка YouBit по умолчанию на размер одного файла — 9 ГБ, но её можно скорректировать при желании.

Неограниченный хостинг в других местах

Неограниченные хранилища файлов предоставляют и другие сервисы, например:

  • Telegram (ограничение по размеру файлов 2 ГБ, в платной версии 4 ГБ)
  • Соцсети (любые файлы можно хранить под видом видеозаписей и фотографий), обычно там хостинг неограниченного размера
  • Habrastorage

В идеале хотелось бы добавить туда следующие функции:

  • Поддержка разных хостингов (разные соцсети, фото- и видеохостинги), чтобы YouBit копировал видео с нашими файлами не только на YouTube, но и на другие хостинги, которые предоставляют неограниченное дисковое пространство бесплатно.
  • Резервное копирование. Поскольку каждая площадка рассматривается как временная, должно быть предусмотрено избыточное дублирование.
  • Грамотная синхронизация: обновление новых версий или новых файлов без переписывания всего архива.

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


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *