SeminarAssembler — добавим слайды к youtube

From Wiki4Intranet
Jump to: navigation, search

Если вы хотите записать персональную видеолекцию, или снимаете в одиночку семинар в небольшом помещении, где все камеры-фреймграбберы-… можно вполне подключить к одному компьютеру — нет ничего лучше Open Broadcaster Software. Не важно, OBS Classic или OBS Studio, обязательно освойте этот инструмент — там есть некие сложности-хитрости, проблемы, вопиющие об улучшениях… но ничего близкого по удобству нет.

SeminarAssembler - штука непростая, полезная для массовой обработки кучи источников видео-аудио, разбросанных по в далеке друг от друга в больших залах…, редко это кому нужно, кроме фанатов записей конференций, типа http://0x1.tv.

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

Рассмотрим реальный сценарий — вы выступили где-то со слайдами, вас записали и выложили на youtube («видео есть, чек — что еще надо?»), вы смотрите, и горестно офигеваете — слайдов нет, только одна ваша говорящая голова. Или слайды есть, но хрен прочтешь — мелко, засвеченно, не видно. Или, до кучи, видео вообще отзеркалено (сам видел недавно такую трансляцию).

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

Попробуем набросать простой тьюториал, не вдаваясь в глубины, зато на реальном примере.

  • Поставьте последний 32-битный AVISynth
  • Возьмите свежий sa.exe и бросьте куда-нибудь в пути.
  • Заведите любую папку для проекта. Например, для определенности
mkdir d:\my-video
  • Заходим в этот каталог и инициализируем шаблон проекта
cd d:\my-video
sa i
  • Чтобы выкачать видео с Youtube, нужна youtube-dl. Всем Windows-пользователям рекомендую поставить chocolatey, после чего это займет одну команду
choco install -y youtube-dl
  • Нам пригодится также еще PDF-вьевер, который умеет быстро перегонять PDF в картинки:
choco install -y PDFXChangeViewer
  • Inkscape для редактирования планов:
choco install -y inkscape
  • Потом зайдем в каталог "cam6"[1] и выкачаем
cd d:\my-video\sources\cam6
youtube-dl https://www.youtube.com/watch?v=OwGdz7FcoKQ
  • Импортируем скачанное хрензнает что (MKV/MP4/FLV) в AVI-файл
 cd D:\my-video\sources\cam1
 sa p D:\my-video\sources\cam6
  • Проверяем:
 sa v D:\my-video\sources\cam1\source.py

— должны увидеть превью этого файла. Файл покажется в разрешении 100% и если экран маленький, вы увидите правый верхний угол, надо с помощью rclick поменять zoom.

  • Создадим каталог для картинок по слайдам
 mkdir d:\my-video\sources\screen1\s
  • Сохраняем слайды.
    • Если у вас слайды в PPT - презентацию надо сохранить как png, а затем выбрать "все слайды". Он положит все слайды в отдельную директорию с именем презентации, далее их надо скопировать в созданную директорию.
    • PDF презентации для видео, которое вы скачали выше лежит здесь - скачайте его
    • Если у Вас pdf - откройте его в PDFXChangeViewer.
    • Если ODP - также сведите задачу к предыдущей через LibreOffice.
    • В PDFXChangeViewer делаете "Export to image". Самое важное — правильно указать каталог и схему именования файлов.
Pdfexchange-export-image.png
Pdfexchange-export-image-2.png

Итак, слайды лежат готовыми картинками, самое время быстро описать, где и по какому времени они находятся. Сгенерим заготовку описания[2]:

cd D:\my-video\sources\screen1\
sa b slides.py.scenario

Наша цель — составить файл D:\my-video\sources\screen1\slides.py.scenario следующего содержания.

HEIGHT	1080
WIDTH	1920
00:00:00 s/s-01.png
00:01:47 s/s-02.png
00:02:45 s/s-03.png
00:02:52 s/s-04.png
00:03:36 s/s-05.png
00:04:31 s/s-06.png
00:05:55 s/s-07.png
00:06:49 s/s-08.png
00:07:32 s/s-09.png
00:08:38 s/s-10.png
00:09:25 s/s-11.png
00:09:32 s/s-12.png
00:10:45 s/s-13.png
00:12:36 s/s-14.png
00:13:25 s/s-15.png
00:15:09 s/s-16.png
00:15:18 s/s-17.png
00:15:22 s/s-20.png
00:15:35 s/s-19.png
00:15:57 s/s-18.png
00:16:54 s/s-21.png
00:17:24 s/s-22.png
00:19:10 s/s-23.png
00:20:20 s/s-24.png
00:22:49 s/s-25.png
00:23:25 s/s-26.png
00:23:33 s/s-27.png
00:25:53 s/s-28.png
00:27:21 s/s-29.png
00:28:25 s/s-30.png
00:30:25 s/s-31.png
00:30:40 s/s-32.png
00:31:35 s/s-33.png
00:33:01 s/s-34.png
00:33:08 s/s-35.png
00:33:32 s/s-36.png
00:34:47 s/s-37.png
00:35:56 s/s-38.png
00:37:55 s/s-39.png
00:38:07 s/s-40.png
00:38:12 s/s-41.png
00:39:50 s/s-42.png
00:42:45 s/s-43.png
00:43:01 s/s-44.png
00:46:40 s/s-45.png
00:47:32 s/s-46.png
00:50:38 s/s-47.png
00:51:00 s/s-48.png
00:51:38 s/s-49.png
00:52:55 s/s-50.png
01:20:00

Т.е. нужно прописать время в начало каждой строки, когда появляется соответствующий слайд.

Обычно, я это делаю так:

  • Папку с слайдами, с режимом «extralarge icons» я размещаю отдельно...
  • Пробегаемся или прослушиваем видео, вспоминая, какой слайд должен быть где.
  • Записываем время соответствующего слайда — секундной точности более чем достаточно.
    • Чтобы не сэкономить силы, можно поставить версию VLC 2.0.8, для которой работает мой старый плагин Time2Clipboard, который по нажатию на «CTRL-?» кладет в clipboard текущее время[3].
    • Если слайды частично на видео видны, тем более, не надо прослушивать видео и надо использовать VLС, бегая по файлу с помощью прыжков трех типов (±мин, ±10сек, ±1[4] сек), и копируя время в clipboard.

Первый слайд обязательно должен идти с нулевого времени. Даже если начало видео Вы планируете показать только видео - это надо будет сделать с помощью следующего пункта.

Итак, файл D:\my-video\sources\screen1\slides.py.scenario вышеуказанного содержания — готов.

  • Скачайте SVG-файл File:MAX.svg, в D:\my-video\views\MAX.svg
  • Можно поработать над дизайном. Откройте предпросмотр:
sa v D:\my-video\views\MAX.svg

Вы должны увидеть два окна:

Inkscape
Где редактируюется собственно «видеоплан»
VirtualDub
Где в режиме WYSIWYM, дается превью результата.
Sa-preview.png

В Inkscape откройте «CTRL-SHIFT-O», чтобы видеть свойства объектов. Попробуйте редактирование — перемещение зеленого и синего прямоугольника[5] — переместит слайды и видео с камеры. Кроппинг прописан непостредственно в свойствах объекта:

.Crop(120,0,-120,0)

- означает срезать по 120 пикселей справа и слева

.CropLeftRight("30")

— срезать по 30% c лева и справа одновременно.

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

Остался последний шаг. У нас уже есть набросок сценария:

D:\my-video\scenes\default.scenario

Там специально заполнены все возможные атрибуты... но это несколько смущает. Давайте тупо впишем туда (или даже в отдельный scenario-файл)

HEIGHT	1080
WIDTH	1920
AUDIO	cam1
GLOBAL_SPEED	1.2
00:01:26 MAX
00:53:50 CAM1
00:55:10

Т.е. тупо — размер 1920x1080, звук взять из CAM1, ускорить с тонокомпенсацией на 20%, начать с 01:26, показав наш план с «голова-с-слайдами», в конце, в 53:50, слайдов нет, просто покажем видео CAM1.

Осталось все это собрать.

cd D:\my-video\scenes
sa b default.scenario.avs.avi

Все!

Можно собрать и

 sa b "default.scenario.avs$vquality=500,size=2G.avi"

(собрать с качеством 500% от некой нормы, но чтобы не больше 2GB размером).

Если во время выступления человек активно двигался, или сначала его представляли, а потом он остался на сцене один, и нужна различная обрезка видео, то надо сделать несколько svg-файлов, и указать их в файле сценария.
  1. можно в любой другой, в этом нет смысла, просто он точно есть и нам не пригодится для чего либо еще
  2. Если у вас больше 50 слайдов, поправьте slides.py очевидным образом
  3. Если кто знает, как это сделать для свежих версий VLC — свяжитесь со мной
  4. Для этого в настройках VLC надо сменить время короткого прыжка с 3 до 1 секунды
  5. Цвета не имеют никакого значения