Стример из MiniDV-видеокамеры

    Иногда может захотеться странного. Вот вроде бы лежит себе видеокамера стандарта MiniDV и лежит. Есть не просит. А что если взять и записать на её кассеты вовсе даже не видео, а, скажем, файлы. Запись-то всё равно цифровая. Пусть объём кассеты всего лишь около 13 ГБ (под данные получилось занять около 9.5 ГБ), пусть скорость чтения 3.5 МБ в секунду, но ведь получится простой домашний стример. Так сказать, “стример для бедных”. Почему бы не отправить на несколько кассет, скажем, какие-либо важные файлы. Просто так, на всякий случай. Попробуем!

    На чём основана запись данных на MiniDV видеокамеру? Да просто можно вместо аудиоданных и части видеоданных подсунуть данные файлов — формат-то цифровой с отдельным сжатием каждого кадра по одинаковому алгоритму. Осталось дело за программой, которая это сможет сделать.

    Поискав по интернету, как использовать бытовую видеокамеру как стример, я нашёл на форумах и в статьях десятилетней давности упоминания нескольких программ. Для Windows, например, это были DVStreamer Pro и DVStreamer Lite. За первую лет десять назад авторы просили примерно 60$. Вторая бесплатная, но с массой ограничений (256 файлов не более 8 Мб каждый или один файл не более гигабайта). Плюс многочисленные жалобы на нестабильную работу обеих версий. Скачав со странички производителя данное ПО (версии Lite там почему-то больше нет – похоже, программа теперь одна), обнаружился ещё 30-дневный срок на, так сказать, пробу. И да, эта программа так же, как и десятилетие назад, нестабильно работает и запросто вылетает от перемены погоды на Марсе. Зато она умеет непосредственно управлять камерой и автоматически выполнять перемотку к требуемому файлу.

    Ну что ж, а что же у нас доступно для Linux? Оказывается, кое-что доступно, а именно dvbackup-0.0.4. Эта программа способна переданный ей поток данных упаковать в RAW DV формат и передать для записи другой программе dvcontrol, входящей в комплект. Ну и в обратном порядке, он может так же извлечь файлы из RAW DV.

    К сожалению, завести dvcontrol мне не удалось – она стабильно не видела данных по ieee1394 от видеокамеры. А что если разобраться с dvbackup и самому сформировать RAW DV файл со своими собственными прибамбасами? Например, вместо статичного логотипа, показываемого видеокамерой во время воспроизведения видео от dvbackup, сделать свой логотип, добавив полоску прогресса и имя записываемого файла, а также добавить поддержку папок.
    Осталось решить, чем бы такой RAW файл считать и записать на камеру. А впрочем, всё это давно умеет видеоредактор Kino. Вот его-то мы и будем использовать для работы с видеокамерой. Сказано – сделано. Разобрав dvbackup на части, и довольно быстро сформировав файл данных, я убедился, что Kino может записать этот файл на камеру (при этом ругаясь на невозможную частоту). А вот считать не может. Нет, говорит, видеопотока. Камера меж тем этот самый видеопоток на экранчике прекрасно отображает.

    Вот тут-то и пришлось очень внимательно пройтись по формату DV, постепенно заменяя части из dvbackup (часто, с комментариями автора про “магические числа” и неизвестные назначения) на корректные и соответствующие описанию DV-формата. Ряд данных пришлось расшифровывать прямо с реального потока от видеокамеры, так как в моём описании DV-формата такие идентификаторы блоков не описаны. В результате, после очередной доработки напильником, выяснилось, что Kino полученный видеофайл вполне удовлетворяет и он способен производить и запись и чтение данного файла без проблем. Правда, судя по всему, причина изначального неприятия была в том, что я отключил аудио, когда создавал RAW DV файл первый раз. Только ли в этом было дело, я сейчас даже проверять не стал

    Итак, в результате экспериментов получилась вот такая вот программа для Windows:



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

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

    Запись данных на видеокамеру в Kino выглядит вот так:



    А так выглядит процесс записи на видеокамере:



    Насколько надёжен такой стример? Я записал на кассету часть фотоальбома 9.5 ГБ как набор файлов фотографий в формате jpg примерно по 1-3 МБ. При считывании сбой был зафиксирован у трёх файлов.

    Конечно, хотелось бы управлять камерой напрямую, но я пока ещё не нашёл внятного описания работы с камерой по ieee1394. Единственная книжка, где хоть что-то было написано – это “Программирование аппаратных средств Windows”, но указанный там пример, во-первых, содержит ошибки, а во-вторых, просто отыскал мне устройство платы ieee1394, установленную в компьютере, а вовсе не видеокамеру. Попытка отправить и принять данные с платы не увенчалась успехом. Поэтому, если кто-нибудь может рассказать о работе с камерой по ieee1394 с использованием WinAPI и на Си/Си++, то буду очень ему благодарен.

    Найденное мной описание формата DV.

    Репозиторий программы на GitHub

    Исходник и исполняемый файл программы
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 22

      +1
      Читал про этот проект начале 2000-х. Тему про него на форуме pctuner.ru видел. Там же упоминали, что до этого в 1990х для данных был вариант использования VHS кассет. С неплохими характеристиками для того времени.

      Есть только один нюанc — камеры с DV-In на европейский рынок почти не поступали. В ЕС на них был налог по типу «болванок Михалкова». Они относились к классу видеомагнитофонов.
      По этому большинство камер без возможности записать что-то на ленту.
        +4
          0
          Тоже сразу про него вспомнил.
            +1
            и не Вы один :-) У меня до сих пор арвид в гараже лежит — просто так, на память.
              +3
              Да-да, классная была штука в те времена. Где-то до сих пор лежит…

              зы:
              — А я написал утилиту для проигрывания avi-шников с арвида!
              — Ура! Программистам наконец удалось приспособить видеомагнитофон для просмотра видео! (с) тех времен, вроде бы шутка.
                0
                Интересно, качество таким образом можно было получить лучше, чем нативное аналоговое видео?
                  0
                  Ну, там было две скорости 300 Кб/с и 200 Кб/с в совсем старых платах, вот и прикиньте…
                  … ЕМНИП принцип там был как у спектрума и прочих компов использующих магнитофон, только скорость по шибче ибо полоса частот у видео сигнала шире, но плотность записи на аналоговый носитель можно в разы повысить за раз записывая несколько бит…
              +1
              Да, для VHS был арвид.


              АРВИД был на прядок надежнее:

              Я записал на кассету часть фотоальбома 9.5 ГБ как набор файлов фотографий в формате jpg примерно по 1-3 МБ. При считывании сбой был зафиксирован у трёх файлов.


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

                +1
                У АРВИДа была хорошая систем коррекции ошибок.


                Ничто не мешает закодировать файл, как захочется. Но совместимости с dvbackup не будет. А это может быть важно лет через *дцать.
              0
              По этому большинство камер без возможности записать что-то на ленту.


              Это странно. Все четыре моих MiniDV камеры (от Canon, Panasonic, Samsung и JVC) умеют писать поток по ieee1394. Не встречал камер, не умеющих выполнять запись DV-потока (запись производится в режиме play, а не съёмки).
                +1
                В начале 2000-х на европейском рынке продавались камеры, заблокированные на запись именно по DV IN. Были модели с возможностью записи, но ценник был больше.
                С «тюльпан»-входов они так и так писали.
                Свою Sony я покупал в Берлине. Потом «руками» менял в прошивке несколько байт.
                  0
                  С «тюльпан»-входов они так и так писали.


                  С RCA у меня только Canon умеет делать захват с перекодированием в DV.
                +4
                И правда, производитель блокировал возможность записи потока — DV IN. Причем блокировка была на уровне прошивки, были энтузиасты, кто разблокировал данную возможность.

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

                HDVSplit прекрасно управляет камерой, но я не уверен что исходники можно найти. Если только попробовать связаться с автором.
                  0
                  Подключалась камера через переходник к COM порту, а дальше был вопрос в наличии программы. В свое время я находил только для пары моделей инструкцию о редактированию регистров и ПО.
                +1
                В упомянутым выше Арвиде данные защищались с помошью помехоустойчивого кода Рида-Соломона. Это давало возможность исправления большого количества одиночных ошибок в отдельных блоках, некоего количества двойных и небольшого количаества тройных ошибок.
                Что это означало на практике. Данные, записанные на одном видеомагнитофоне без проблем считывались на другом таком (той же марки и модели) же и с некой достаточно высокой вероятностью на совсем другом видеомагнитофоне (лишь бы он не был сильно заезженым). У меня была модель 1020.
                  +2
                  Я вот тоже не так давно «захотел странного».
                  Захотел изучить основы C#, но скольку просто учиться по урокам не так интересно, а в моем случае когда изучаешь скорее из любопытства — даже вредно, то решил реализовать старую идею возможности хранения данных в видео файлах с возможностью заливать их на видеохостинги типа Youtube.
                  Начал с черно-белых квадратов и в итоге дошел до использования DCT с возможностью уместить до 7 бит на 8х8 пикселей для случая работы с Youtube, без ошибок при распаковке. Впрочем, без опыта в подобной области многое писал чисто интуитивно.
                  Писал я скорее ориентируясь на увеличение количества данных на пиксель, но есть предположение что простое использование черно-белых квадратов будет практичнее из-за меньшего веса видео (до 3-х раз больше от размера исходных данных против до 10 для случая с DCT), да и сам алгоритм работает значительно быстрее, хоть видео и будет более длительным.
                    0
                    И какой объём получается упаковать в минутный видеоролик?
                    Кстати, по какой книжке вы С# изучаете?
                    +2
                    Для мака есть DV Backup, насчёт совместимости вопрос, но она также пишет в картинку и звук, и ошибок почти нет, правда и лезет на кассету всего лишь 4,7 гига.
                      0
                      Очень круто!)) А можно то же самое для аудиокассеты? Так сказать, вдохновляясь Kansas City Standart'ом, сделать на современных алгоритмах круче, быстрее, надёжнее?
                        0
                        Вряд ли. Там частоты низкие. Фактически, спектрум и подобные получится с его загрузкой/сохранением. :)
                        Тут дело вовсе не в современных алгоритмах — формат DV цифровой. Кадр имеет всегда одинаковый размер и одинаковое количество коэффициентов ДКП. Вот в них-то и спрятаны данные файлов.
                        0
                        Отличная статья! Спасибо автору за проделанную работу. Если в мои руки попадет аналогичная камера обязательно попробую такой способ сохранения данных. Just for fun!
                          +1
                          Прошу прощения, когда вчера занимался «украшательством» написал в одном месте по инерции неверно (вместо указателя src вписал target в функции распаковки). Программа обновлена.

                          Only users with full accounts can post comments. Log in, please.