Как мы делали студию для записи онлайн-курсов

  • Tutorial
Если вкратце, то Stepic – это платформа, где каждый пользователь может создать и разместить свой собственный онлайн-курс. В прошлом году Стэпик использовался в курсе Bioinformatics Algorithms на Coursera как движок для проверки задач на программирование и анализ данных.

Через какое-то время мы поняли, что стоит посодействовать развитию онлайн-образования и в России. Что для этого надо? Хорошие преподаватели и хорошая студия, где можно записывать видео. Поскольку мы любим программировать, то и начать решили с курсов, так или иначе связанных с программированием, это алгоритмы и структуры данных, операционные системы и язык С++ от преподавателей Computer Science Center.

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

Студия и оборудование


На этой схеме изображен автоматизированный процесс записи видео-лекций, к которому мы пришли:

image

Мы решили не изобретать велосипед, а посмотреть, как оборудованы подобные проекты за границей. Отправной точкой послужила студия в швейцарском EPFL, где зимой проходила конференция EMOOCs 2014. Видео про студию в EPFL можно посмотреть тут.

Был составлен список необходимого оборудования (указаны приблизительные цены в России):
  1. 2 стойки под фон (3'000 руб. за штуку)
  2. 4 стойки под 4 источника света (1'500 руб. за штуку)
  3. 2 источника FalconEyes с 5 энергосберегающими лампами холодного света на засвет фона (5'500 руб. за штуку)
  4. 2 источника с лампами холодного света для освещения лектора (DFL-С556) (11'000 руб. за штуку)
  5. Белый и зелёный фон (1'500 руб. за штуку)
  6. Видеокамера Canon XA25 (90'000 руб.)
  7. Штатив под камеру Libec TH-950DV (10'000 руб.)
  8. Микрофон Audio-Technica AT2031 (8'000 руб.), втыкается в камеру
  9. Стойка под микрофон Samson MB1 Mini Boom Stand (2'500 руб.)
  10. Крепление под микрофон AT8410a Microphone Shock Mount (3'500 руб.)
  11. Wacom Cintiq 24HD Interactive Pen Display DTK-2400 (120'000 руб.) – монитор, на котором можно рисовать от руки по слайдам
  12. Apple Mac mini: i5, 2.5HGz (Late 2012) (~25'000 руб.) – компьютер преподавателя, к которому подключён монитором Wacom
  13. PC (Server): i7, 3 TB HDD, 16 GB RAM, Win (~25'000 руб.) – компьютер, на котором запущен сервер и куда стекаются видеопотоки
  14. AJA ROI (35'000 руб.)
  15. BlackMagic DeckLink Duo (18'000 руб.)

Итого, приблизительно: 385 тысяч рублей.

Думаю, выбор всех пунктов, за исключением трёх, не вызывает вопросов. А вот про то, почему мы выбрали этот кэнон и зачем же нужны AJA ROI и DeckLink, я бы хотел рассказать ниже.

AJA ROI и DeckLink Duo


AJA ROIDeckLink Duo

В нашей студии (как и в студии швейцарцев) мы используем провода BNC, которые выходят из камеры и AJA ROI и приходят в DeckLink Duo на PC. Который, в определенный момент, по желанию преподавателя, начинает записывать два потока и аккуратно складывать их в папочку на сервере. AJA ROI выполняет роль cплиттера сигнала, устанавливается она между Mac mini и Wacom, дублирует канал который получает Mac mini и передает его на сервер.

Выше был представлен cхематический вид студии, чтобы можно было понять, как у нас расположены источники света и как проведены провода.

Камера


Камера Canon XA25 была выбрана не случайно. Дело в том, что данная модель является единственной на рынке в подобном ценовом сегменте, которая имеет SDI выход, и это очень важно.

Что же это за такой SDI канал и почему про него так редко слышно, если он такой хороший?

SDI это стандарт передачи изображения который до сих пор используется на телевидении и средством передачи этого канала служит обычный коаксиальный кабель 75 Ом, который есть в каждом радиомагазине. Вот и всё. Так зачем же использовать этот SDI? Очень просто, если у вас 2 SDI канала кодируются в реальном времени, у вас нет проблем, если же использовать вместо SDI, протокол HDMI, то тут уже вам возможно потребуется дополнительное оборудование, способное в реальном времени обрабатывать эти потоки.

Также плюсами SDI является относительное отсутствие ограничений накладываемых на длинну кабеля и его надежное крепление

Итак, всё приехало, всё собрано, давайте запустим и посмотрим с камими проблемами мы можем столкнуться.

Проблемы


Первый неприятный сюрприз, который поджидал нас, – это ограничение на формат изображения по SDI каналу от камеры. Как я уже упоминал, камера является единственной в данном ценовом сегменте, которая умеет выдавать HD видео через аналоговый интерфейс. Но ложка дегтя заключается в том, что по SDI транслируется изображение в формате 1080i (тут можно почитать про различия 1080i и 1080p).

Вторая проблема: сигнала нет! Дело в том, что интерфейс SDI очень чувствителен к частоте кадров и разрешению, поэтому если камера у вас выдает 1080i и 50 кадров в секунду (именно такой формат выдает камера кэнон), то и на сервере должно стоять ровно 1080i и 50, в противном случае вы увидите чёрный экран и будете думать, что проблема не в настройках.

Даже если настройки на камере и сервере совпадают, иногда может случиться так, что изображения нет, – дело может быть в самих проводах. В таком случае надо просто проверить все контакты и найти слабое звено. Хотя сами крепления SDI очень надёжны и никогда не выпадут, проблема может быть где-то посередине кабеля. Мы столкнулись с такой проблемой и методом проб и ошибок нашли и устранили слабое место.

Хорошо, если все работает, давайте двигаться дальше.


Студия

Как же теперь записывать лекции на сервер? Хочется какое-то простое решение. Однако самое очевидное решение (использовать софт, поставляющийся в комплекте с картой захвата BlackMagic DeckLink) оказывается далеко не самым удобным.

Во-первых, начинать запись сам лектор не может, а значит нужен человек который будет это делать.

Во-вторых, DeckLink Studio не позволяет кодировать в реальном времени, а значит мы будем получать некомпрессированное видео = 1 минута около 1 GB…

Ну и последнее неудобство заключается в том что необходимо открывать две копии приложения от разных пользователей. Это конечно решается написанием bat-скрипта (напоминаю: сервер виндовый), но нажимая запись в двух разных каналах вручную, мы получаем 2 несинхронизированных файла.

Синхронная запись двух видеопотоков


Очевидное решение – использовать Mac сервер и купить Movie Recorder по 1000$ на канал. Именно так сделано у наших коллег в Швейцарии. Но мы решили пойти по другому пути. Конечно, были идеи реализовать кастомный интерфейс с помощью DeckLink SDK, но потом у нас появился чудный девайс который очень помогает нам по сей день. Итак, встречайте:

ATEM Television Studio

ATEM Television Studio. Вообще, предназначение данной карточки: в реалтайме кодировать видео с разных камер и позволять оператору переключаться между ними. Как обычно, софт поставляющийся в комплекте не очень то удобен. Однако на просторах интернета была найдена уже готовая софтина (MXLight) которая обладает интерфейсом командной строки и позволяет записывать изображение с канала подключенного к данной карте.

Итак, у нас есть bat-файл, который умеет начинать запись с камеры, и другой bat-файл, который умеет останавливать этот процесс:

set name=D:\VIDEO\CPP_Course\Week3\Professor\Step4
set TIMESTAMP=%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
if exist %name%.TS ( START D:\VIDEO\MXLight\MXLight.exe record-to-file=%name%_%TIMESTAMP%.TS record=on )
else ( START D:\VIDEO\MXLight\MXLight.exe record-to-file=%name%.TS record=on )

Осталось разобраться с интерфейсом карточки DeckLink. Решение нашлось очень быстро – ffmpeg для Windows поддерживает DirectShow, а карта DeckLink является ничем иным как DirectShow устройством.

И вуаля – вот он bat-файл который запускает запись экрана:

set name=D:\VIDEO\CPP_Course\Week3\ScreenCast\Final_ScreenCast_LAST
set EXT=mp4
set TIMESTAMP=%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
if exist %name%.%EXT% ( START D:\VIDEO\ffmpeg\bin\ffmpeg.exe -y -video_size 1920x1080 -pixel_format uyvy422 -rtbufsize 702000k -framerate 24 -f dshow -i video="Decklink Video Capture" %name%_%TIMESTAMP%.%EXT% )
else ( START D:\VIDEO\ffmpeg\bin\ffmpeg.exe -y -video_size 1920x1080 -pixel_format uyvy422 -rtbufsize 702000k -framerate 24 -f dshow -i video="Decklink Video Capture" %name%.%EXT% )

А вот с остановкой записи экрана пришлось немного повозиться, дело в том, что нельзя просто взять и закрыть ffmpeg. В этом случае файл захвата будет поврежден, и может воспроизводится с помехами. Для корректного завершения режима видеозахвата нам необходимо послать с клавиатуры keypressed event «q».

Таким образом, всё равно нужен человек, который запускает запись и корректно ее останавливает.
Мне это очень не нравилось, и я решил в качестве эксперимента поднять простенький Node.js сервер, а поскольку на JS я никогда не писал, то и убить двух зайцев.

Так родилось приложение epicStudio, запуск которого осуществляет сам лектор из браузера, открытого на Wacom (Mac mini). Ссылка на гихтаб – epicStudio.

epicStudio

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

Этот процесс мы тоже постарались оптимизировать. Так, мной написаны различные инструменты для автоматического вырезания ненужных кусков, наложения ватермарков и приведения всех видеороликов к одинаковой громкости. Думаю, о них будет вкратце рассказано в следующий раз, в любом случае мои инструменты я выкладываю в этот репозиторий и там можно их посмотреть.

Напоследок, примеры получающихся видео:





UPD: В январе 2015 мы обновили конфигурацию нашей студии – стало удобнее, лучше и… дешевле. Подробнее ещё напишем пост, но если вы срочно заинтересованы в конфигурации и списке оборудования, спрашивайте по team@stepic.org. Ещё мы собираем аналогичную студию в Москве, которая будет открыта для преподавателей, размещающих MOOC-и на Stepic. Так что если вы хотели бы записать с нами курс, обращайтесь.

UPD2: Продолжение (апрель 2015): habrahabr.ru/company/stepic/blog/255053
Stepik.org
109,00
Открытые бесплатные курсы на технические темы
Поделиться публикацией

Комментарии 33

    +2
    Круто конечно, но я бы подумал над форматом видео которые получаются. Очень уж адовый хромокей который рябит и мешает сосредоточиться. Плюс постоянное переключение с человека на слайды.
      +1
      Спасибо, мы стараемся искать наиболее приятный глазу формат. Сейчас пришли к структуре, когда лектор показан только в начале, и кратко обозначает тему урока. Таким образом происходит только одно переключение.
        0
        Очень нравится, как сделаны видео к курсу по алгоритмам на Coursera от Princeton University:
        www.youtube.com/watch?v=TRHlWZeBAxw
        Очень удачная комбинация лектора и слайдов, на мой взгляд.
          0
          Да, очень хороший курс.
            0
            Пробовал делать подобное — лектор сбоку, за границей слайда. Это гораздо проще в реализации и, на первый взгляд, кажется удобнее, так как лектор не заслоняет слайд. Так же пробовал ставить лектора на фоне слайдов (все тот же простейший хромакей). По опросам первый вариант не нашел ни одного сторонника. Объясняют тем, что лектора на фоне слайда можно воспринимать одновременно со слайдом. Когда же лектор за слайдом, внимание постоянно переключается с одного на другое. Пришлось прочно подсесть на хромакей.
          +1
          Хромакей как раз очень даже ничего. Проблема с «дрожанием» горизонтальных линий является следствием интерлейса, с прогрессивным форматом такого не было бы. Рябь на пиджаке — из-за отсутствия антиалиасинга в камере, скорее всего. Всего этого можно избежать правильной программной постобработкой.

          Совсем другое дело — ужасные цвета. Это легко исправить на любом этапе (баланс белого есть почти в любой камере). Контрастность тоже отвратительная, черного цвета нет вообще.

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

          Вообще, почти отлично.
          +2
          Попробуйте на камеру поляризационный фильтр установить и покрутить, а то у дикторов блики на лице.

            +1
            Да, есть такая проблема, спасибо. Завтра проведем тест.
            +2
            Зачем для видеокурсов качество 1080p? Зачем два видеопотока?

            Я совсем не специалист в видео, но прочитав статью (и пройдя несколько курсов на Coursera), мне показалось, что как-то слишком уж навороченно у вас все (что совсем не обязательно для такого контента).
              0
              Отвечу сначала про два видеопотока. Идея заключалась в том что можно удобно переключаться при постпродакшне между лектором и его материалом. Всетаки, иногда очень хочется увидеть того, кто рассказывает материал. Нам кажется это помогает.

              А 1080p, хочется стремиться к хорошей картинке, не в ущерб удобству записи и предоставляемому контенту.
                0
                И все-таки не понимаю, что мешает писать видео с экрана отдельно, а видео с камеры отдельно? Синхронизация при постобработке — дело нескольких секунд.
                  0
                  Мешает то, что это неудобно. Сейчас каждый преподаватель пишет в свою собственную папочку на сервере. И все файлы складываются по порядку, с нужными названиями.
                  В вашем же варианте у меня будет: MVI_0001, MVI_0002, MVI_0003, MVI_0004, MVI_0005… MVI_9999. Из которых примерно 70% будут браком. Оставшиеся 30 будут принадлежать к разным темам от разных преподавателей. Думаю вы поняли проблему.
                +1
                1) Бывает что на слайдах код или изображение с мелкими деталями
                2) Пользователь привык получать видео в 1080 (ютуб, вимео приучили)
                +1
                А Вы не думали про расположение картинки с лектором в каком-либо из углов? Единственное, конечно, необходимо будет рассмотреть вариант, когда лектор написал/напечатал что-либо и картинка с его изображением перекрыла написанное/напечатанное.
                  0
                  Думали, и это немного проще осуществить, например не надо кеить и меньше требований к картинке. Однако, кажется что лектор, непрерывно висящий в одном углу, немного отвлекает от слайда. В целом, мы пробуем различные варианты, и возможно один из следующих курсов мы будем выпускать именно с таким классическим монтажем.
                    +1
                    мне вот очень понравилось, как на codeschool видео сделано, например, в rails for zombies
                      0
                      О, спасибо, не видел такого. Прекрасно сделаны и слайды и структура курса.
                  +1
                  По-хорошему вам завидую, когда-то были мысли сорганизовать подобие студии на дому (насколько это вообще возможно), записывать обучающие видео. Есть интересная идея использовать для съёмки сразу две камеры, чтобы можно было при монтаже переключать разные виды на лектора, это сделает ролики живее. И ещё — напишите, пожалуйста, в чём вы монтируете видео?
                    0
                    Спасибо, у нас есть идея использовать две камеры, еще не успели все это прикрутить и настроить. Но это кажется неплохая идея, да.
                    Конечно, это сильно усложняет задачу преподавателя. Многие и одной то камеры немного стесняются по началу.

                    Я монтирую в Adobe Premiere + Adobe AfterEffects, у них есть несколько неудобных моментов, которые сильно тормозят процесс, особенно, когда большой объем работы. Поэтому, иногда еще использую ffmpeg + sox из командной строки, очень экономит время когда надо обработать звук в 100 файлах или применить ватермарк.
                    +1
                    Почему отказались от внешнего генератора тайм кода, дабы не устраивать такое шаманство над потоками?
                      0
                      Если честно, никогда не работал с генераторами таймкода, буду рад, если укажете как правильно с ними начать работать.
                        +1
                        Сама теория проста как чайник — ставится генератор и к нему подключается вся видеозапись. В итоге имеем сколько угодно много синхронизированных потоков, которые сами сводятся в монтажной программе.

                        У многих камер есть вывод внутреннего генератора т.е. можно использовать его. Но насколько я вижу, ваша камер умеет только выдавать референсный сигнал без вывода синхросигнала от внутреннего генератора.
                      0
                      Как-то все сложно и дорого. На всякий случай оставлю ссылку на свой подход (запись нескольких тысяч семинаров, лекций и конференций).

                      В студийном варианте можно обойтись программой OpenBroadCaster c копеечной DV-камерой, простым конденсерным Samson или Zoom H1, тачмониторы стоят копейки (можно использовать моноблоки тачсмарт). Level Up — HDV камера (копейки) + Epiphan фреймграббер.
                        0
                        Я понял ваш подход. Нам кажется, что при большом потоке лекций, лишние несколько тысяч не будут играть большой роли, а работать на хорошем профессиональном оборудовании всетаки приятней и мне и преподавателю.
                        На счет сложно, не могу согласиться. Преподаватель может прийти сам, запустить сервер и записать хорошого качества лекцию без моего участия. На выходе получается 2 файла которые надо склеить. Сложности были только в начале. Сейчас все удобно и просто.
                          0
                          Ключевой момент — «Преподаватель может придти…». 99.99% никуда не пойдут, и нужно организовывать легкий и дешевый процесс по месту проведения лекций, с его обычно живой аудиторией (очень многие просто неспособны что-то читать без аудитории), с теми артефактами, которые ему привычны — я дико много времени тратил, пытаясь научить преподавателей пользоваться не досками, а рисованием по TouchSmart 630 и отдельным тачскрин-мониторам, и вообще, пользоваться для указания компьютером (тачскрином-трекболом-мышью-…) не указками и рукой по экрану проектора, развернувшись задом к камерам.

                          Но в любом случае, успехов вам, конечно.
                        0
                        А будет навигация по видео?

                        Чтобы можно было прыгать по видео и смотреть только те части, которые интересны.
                          0
                          Теоретически такое возможно реализовать в нашем плеере на степике, но мы еще не делали.В наших курсах весь материал разбивается на небольшие кусочки (стэпы) по 3-8 минут + есть возможность ускоренного просмотра х2.
                          +1
                          Спасибо за статью — очень интересно.
                          От себя для записи порекомендую такие устройства: www.blackmagicdesign.com/products/hyperdeckshuttle. Они и hdmi и sdi умеют.
                          Если у вас есть уже железка ATEP, то почему бы к ней не подключать HDMI и уже дальше рулить? Тогда и камеры смогли бы попроще использовать. При выборе камер попроще нужно только искать, чтобы они видео через HDMI умели выдавать, а не только меню настроек.
                          Так же через HDMI удобнее подключить вывод с компьютера, и туда, например, — можно вывести skype.

                          Для онлайн-трансляций у BM так же есть энкодер на лету: www.blackmagicdesign.com/products/h264prorecorder.
                            0
                            Спасибо. Мы на той неделе подключили другую камеру по HDMI какраз. Столкнулись с проблемой что по 5 метровому кабелю теряется сигнал, хотя возможно это проблема конкретного кабеля. Пришлось перенести все это дело поближе.
                            На счет хайпердеск шатла, это, как я понимаю нечто наподобие внешнего рекордера, придется потом скачивать файлы и тд. Мне нравится вот этот девайс, https://www.blackmagicdesign.com/products/intensity, если будет возможность работать с ним из командной строки, то это нужная вещь.
                              +1
                              Посмотрите на такую штуку www.bhphotovideo.com/c/product/963885-REG/Teradek_VIDIU_Consumer_Camera_Top_HDMI_H_264.html — вообще не нужен компьютер, чтобы сразу в онлайн транслировать. Подключил к ethernet и полетел.

                              Расскажите обязательно, в чем там проблема окажется с HDMI. Дома от макбука до philipsа смарта обычный китайский HDMI кабель 10 метров и работает как часы. Посмотрел в hotline и увидел кабель HDMI-HDMI 50 метров :).
                              Интересно, в чем проблема у вас.

                              Я вообще сторонник того, чтобы минимальное количество софта использовалось в работе. Конечно, если это оффлайн студия, — то позволительно. Но в онлайне будет легко попасть впросак и это я даже не говорю о том, что интернет в любой момент может пропасть и тут тоже нужно запастись резервными вариантами.
                              Хайпердеск шаттл добавит избыточность и в случае каких-то проблем с конечной записью материал можно будет восстановить благодаря им.
                              Так же в вашей студии я прямо «вижу» ТВ-панель в поле зрения лектора, где он краем глаза может наблюдать то, что видит зритель после всех процессов декодирования видео: — ffmpeg декодирует, складывает в файл и заодно воспроизводит это на панель. В случае каких-то непредвиденных процессов (а с ffmpeg это бывает случается) остановившаяся картинка обратит на себя внимание лектора.

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

                                По поводу пропажи интернета, всегда есть возможность запускать запись видео напрямую с сервера ( там обычная вин8 с NodeJs крутящимся), благо сервер находится в 3 метрах от преподавателя. просто адрес странички будет 0.0.0.0:12345. Хотя да, 1 раз была проблема, когда пропал интернет на несколько минут и кнопка остановки записи не отработала. Но этот процесс отслеживается, остановили вручную и удалили концовку.
                                ТВ-панели есть (две), одна работает в режиме клонирования десктопа от МакМини, вторая подключена к Atem Studio и дублирует записываемое изображение.
                                И нам кажется, что они мешают. Преподаватель всегда туда смотрит, а не в камеру. Надо собрать Телепромптер.

                                С хромакеем мы все варианты обсуждаем с преподавателями, стараемся удовлетворить их пожелания.

                                БлэкмэджикШатл мне кажется полезная штука для записи вне студии и я уже хочу ее купить.
                            +1
                            Как вы дальше планируете развиваться?
                            У вас появится какой-то онлайн-ресурс? Как приглашать преподавателей будете? Это будет платная платформа для желающих записать курс?
                            Сколько все это стоить примерно будет?
                            Интересны любые мысли на этот счет.
                              0
                              Дальше планируем увеличивать число записываемых и размещаемых курсов, нам наиболее интересны открытые бесплатные образовательные материалы и курсы. Онлайн-ресурс уже есть – stepic.org. Преподавателей приглашаем участвовать в конкурсе проектов онлайн-курсов (http://challenge.stepic.org), десять победителей которого получат финансовую и экспертную поддержку для создания курса, включая возможность использовать видеостудию.

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

                            Самое читаемое