- PVSM.RU - https://www.pvsm.ru -

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

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

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

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

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

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

image

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

Был составлен список необходимого оборудования (указаны приблизительные цены в России):

  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

В нашей студии (как и в студии швейцарцев) мы используем аналоговые провода SDI, которые выходят из камеры и 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 [7]).

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

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

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

Студия

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

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

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

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

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

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

ATEM Television Studio

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

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

set name=D:VIDEOCPP_CourseWeek3ProfessorStep4
set TIMESTAMP=%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
if exist %name%.TS ( START D:VIDEOMXLightMXLight.exe record-to-file=%name%_%TIMESTAMP%.TS record=on )
else ( START D:VIDEOMXLightMXLight.exe record-to-file=%name%.TS record=on )

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

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

set name=D:VIDEOCPP_CourseWeek3ScreenCastFinal_ScreenCast_LAST
set EXT=mp4
set TIMESTAMP=%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
if exist %name%.%EXT% ( START D:VIDEOffmpegbinffmpeg.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:VIDEOffmpegbinffmpeg.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 [10].

epicStudio

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

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

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

Автор: mehanig

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/video/69402

Ссылки в тексте:

[1] Bioinformatics Algorithms: http://habrahabr.ru/company/stepic/blog/196870/

[2] алгоритмы и структуры данных: https://stepic.org/course/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B-%D0%B8-%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B-%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85-63

[3] операционные системы: https://stepic.org/course/%D0%92%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B2-%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D1%83-%D0%AD%D0%92%D0%9C-%D0%AD%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D1%85-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC-65

[4] язык С++: https://stepic.org/course/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0-%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5-%D0%A1++-7

[5] студия в швейцарском EPFL: http://moocs.epfl.ch/production

[6] можно посмотреть тут: http://www.youtube.com/watch?v=nmLcxftaU5Q

[7] тут можно почитать про различия 1080i и 1080p: https://tech.ebu.ch/docs/techreports/tr005.pdf

[8] Movie Recorder: http://www.softronmedia.com/products/movierecorder.html

[9] MXLight: http://mxlight.co.uk/

[10] epicStudio: https://github.com/StepicOrg/epicStudio

[11] этот репозиторий: https://github.com/StepicOrg/epicTools

[12] Источник: http://habrahabr.ru/post/235867/