Впихивает любые данные в видео (или творчество программиста)

Впихивает любые данные в видео (или творчество программиста) Программирование, Csharp, Хобби, Файл, YouTube, Кодирование, Я сделяль, Гифка, Видео, Длиннопост

Художники создают картинки, музыканты - музыку, но и программистам не чужд зуд творчества.

Сразу скажу - я к программистам отношу себя в той же мере, как и "тихий" рыбак медитирующий на поплавок относится к рыболовецкому траулеру.


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

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

Поэтому я решил сделать сам.

Впихивает любые данные в видео (или творчество программиста) Программирование, Csharp, Хобби, Файл, YouTube, Кодирование, Я сделяль, Гифка, Видео, Длиннопост

Основная идея - нужно информацию из файла преобразовать в цветные точки на кадрах видео. Исходные файл скармливается некоторому "черному ящику", который выдает серию картинок, картинки с помощью видео-конвертера склеиваются в видео файл MP4 без звука, этот файл можно залить на Youtube, скачать, провести через озвученную цепочку действий в обратном направлении и получить файл идентичный исходному.

Впихивает любые данные в видео (или творчество программиста) Программирование, Csharp, Хобби, Файл, YouTube, Кодирование, Я сделяль, Гифка, Видео, Длиннопост
Существует не так уж мало способов хранить произвольную информацию в картинках и видео, но поскольку я хотел сделать не "на отлично", а "ну хоть бы вообще работало и желательно уже вчера", то выбрал наиболее простой в реализации - некоторый кусочек данных превращается в квадрат заполненный одним определенным цветом. Из-за особенностей сжатия видео наиболее оптимально подходит квадрат размером 8х8 пикселей.
Впихивает любые данные в видео (или творчество программиста) Программирование, Csharp, Хобби, Файл, YouTube, Кодирование, Я сделяль, Гифка, Видео, Длиннопост

Множество таких квадратов и составляет кадры видео. В "цветном" режиме цветные квадраты соответственно являются суммой квадратов разных цветов с разной яркостью

Впихивает любые данные в видео (или творчество программиста) Программирование, Csharp, Хобби, Файл, YouTube, Кодирование, Я сделяль, Гифка, Видео, Длиннопост

Как результат, кадр видео выглядит примерно так

Впихивает любые данные в видео (или творчество программиста) Программирование, Csharp, Хобби, Файл, YouTube, Кодирование, Я сделяль, Гифка, Видео, Длиннопост

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

Впихивает любые данные в видео (или творчество программиста) Программирование, Csharp, Хобби, Файл, YouTube, Кодирование, Я сделяль, Гифка, Видео, Длиннопост

А вот и видео, и я вас уже предупредил.

В данном видео сохранена следующая картинка

Впихивает любые данные в видео (или творчество программиста) Программирование, Csharp, Хобби, Файл, 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. Я думал, что данную идею можно развить добавив режим прямой трансляции или возможность задействовать лишь отдельный участок видео для внедрения данных, но пока что я не вижу чтобы данная тема была кому-либо интересна.

P.S.S. Я рассматривал и более сложные методы "конвертации" данных в видео, но с появлением работающего прототипа я исчерпал свой творческий зуд, да и "кому вообще это нужно?".

18
Автор поста оценил этот комментарий
Вам это не напоминает принцип модулятор-демодулято? Поздравляю вы изобрели модем.
раскрыть ветку
7
Автор поста оценил этот комментарий

Осталось научиться записывать данные на VHS-кассету, а потом с умным видом носить ее вместо флэшки.

раскрыть ветку
5
Автор поста оценил этот комментарий
Интеллектуальная мастурбация. Обожаю это занятие :)