Впихивает любые данные в видео (или творчество программиста)
Художники создают картинки, музыканты - музыку, но и программистам не чужд зуд творчества.
Сразу скажу - я к программистам отношу себя в той же мере, как и "тихий" рыбак медитирующий на поплавок относится к рыболовецкому траулеру.
В один прекрасный день ко мне пришла мысль - а как бы так сделать чтобы хранить данные в видео файлах? И речь идет не о скрытом хранении (стеганографии) которое не позволит впихнуть большой объем информацию, а о вполне очевидном для постороннего глаза использовании кадров видео для этих целей.
Конечно, аналогичная мысль приходила не мне одному - в интернете нашлось несколько решений, но по тем или иным причинам мне они не понравились - не в последнюю очередь из-за появления ошибок в данных после того как такое видео было перекодировано, а ведь видео обязательно будет перекодироваться в сервисах подобных Youtube.
Поэтому я решил сделать сам.
Основная идея - нужно информацию из файла преобразовать в цветные точки на кадрах видео. Исходные файл скармливается некоторому "черному ящику", который выдает серию картинок, картинки с помощью видео-конвертера склеиваются в видео файл MP4 без звука, этот файл можно залить на Youtube, скачать, провести через озвученную цепочку действий в обратном направлении и получить файл идентичный исходному.
Множество таких квадратов и составляет кадры видео. В "цветном" режиме цветные квадраты соответственно являются суммой квадратов разных цветов с разной яркостью
Как результат, кадр видео выглядит примерно так
Есть подозрение, что пример такого видео может спровоцировать эпилептиков, надеюсь маленькая гифка не приведет к печальным последствиям и сможет немного утолить любопытство
А вот и видео, и я вас уже предупредил.
В данном видео сохранена следующая картинка
На предмет потыкать - качать здесь.
https://bitbucket.org/Filarius/videofy/downloads/Videofy%200...
Ужаснуться рукожопности автора читая исходники и для параноиков - идти сюда https://bitbucket.org/Filarius/videofy/src
Работает на OS Windows с установленным .Net Framework 4.6
Написано в качестве самообучения C# в VS 2015.
Задействовано:
- FFmpeg (кадры <---> видео)
- OpenCV (оптимизация некоторых действий)
- Livestreamer (скачивание видео с Youtube, другие сервисы поддерживаемые Livestreamer'ом не тестировались)
Плюсы:
- можно "сконвертировать" любой файл в видео и обратно (только для видео созданных данной программой)
- если полученный видео файл позже был повторно сконвертирован (youtube и т.д.), то исходный файл все еще можно извлечь без повреждений (если видео изначально создан с настройками рассчитанными на такое грубое обращение)
- если файл не требуется выкладывать на Youtube или перекодировать, то можно увеличить скорость обработки за счет настроек с большим количеством различных цветов (меньше цветов - лучше коррекция ошибок, но меньше скорость обработки).
Минусы:
- ОЧЕНЬ долго обрабатывает даже небольшие файлы (заметно уже на файлах больше 1 Мбайта)
- размер видео больше исходного файла в 3-8 раз (зависит от настроек)
- при значительном изменении видео файл может содержать отдельные ошибки в произвольных местах, может быть заполнен черти чем почти везде, или может вообще не извлечься.
- сомнительная полезность (да кому вообще это нужно?)
P.S.S. Я рассматривал и более сложные методы "конвертации" данных в видео, но с появлением работающего прототипа я исчерпал свой творческий зуд, да и "кому вообще это нужно?".
Осталось научиться записывать данные на VHS-кассету, а потом с умным видом носить ее вместо флэшки.