Difference between revisions of "SeminarAssembler"
(→Принципы .-.) |
m (VitaliyFilippov moved page Двери окна Майкоп купить to SeminarAssembler over a redirect without leaving a redirect) |
||
(85 intermediate revisions by 3 users not shown) | |||
Line 3: | Line 3: | ||
SeminarAssembler™ — это инструмент для эффективного монтажа семинаров, докладов и прочего образовательного видео, | SeminarAssembler™ — это инструмент для эффективного монтажа семинаров, докладов и прочего образовательного видео, | ||
когда важно сшивать несколько разных источников — несколько камер, скринкасты, слайды, и делать это очень быстро и много. | когда важно сшивать несколько разных источников — несколько камер, скринкасты, слайды, и делать это очень быстро и много. | ||
+ | (примеры видео см. в http://lib.custis.ru/it-talks). | ||
− | + | ;Введение: | |
− | + | {{vimeoembed|48092918|800|500}} | |
− | + | Далее см | |
+ | [[:Category:Курс «Видео на конвеере»]] | ||
+ | [[Category:Курс «Видео на конвеере»]] | ||
− | |||
− | |||
== SeminarAssembler: WTF? .-. == | == SeminarAssembler: WTF? .-. == | ||
− | [[File:SeminarAssembler — заставка.svg|right| | + | [[File:SeminarAssembler — заставка.svg|right|thumb|400px]] |
Фреймворк быстрого видеомонтажа | Фреймворк быстрого видеомонтажа | ||
Line 56: | Line 57: | ||
*** Слайдов | *** Слайдов | ||
*** Переговоров (скайп, IM…). | *** Переговоров (скайп, IM…). | ||
− | ** [[Screen2Log]]- | + | ** [[Screen2Log]]-cкринкастов из блоков |
;Ассемблер: | ;Ассемблер: | ||
* «Двухтермовый, строчный» DSL для программирования сцен: | * «Двухтермовый, строчный» DSL для программирования сцен: | ||
<pre> | <pre> | ||
+ | WIDTH 1280 | ||
+ | HEIGHT 720 | ||
TRANSITION RandomTrans | TRANSITION RandomTrans | ||
+ | TITLE «Введение в технологию Enterprise Forms» | ||
00:01:09 S | 00:01:09 S | ||
00:08:16 | 00:08:16 | ||
Line 68: | Line 72: | ||
</pre> | </pre> | ||
− | == Кому? .-. == | + | |
+ | === Оно надо? .-. === | ||
+ | |||
+ | {{SideBar40|{{@|Перегруженность}}, {{@|Мелкая мышиная моторика}}, {{@|Неавтоматизируемость}}, {{@|Ремесло}}, {{@|Немасштабируемость}}… }} | ||
+ | [[File:Пример видеоредактора 01.jpg|256px]] | ||
+ | [[File:Пример видеоредактора 02.jpg|256px]] | ||
+ | [[File:Пример видеоредактора 03.jpg|256px]] | ||
+ | [[File:Пример видеоредактора 04.jpg|256px]] | ||
+ | [[File:Пример видеоредактора 05.png|256px]] | ||
+ | [[File:Пример видеоредактора 06.jpg|256px]] | ||
+ | |||
+ | === Кому? .-. === | ||
+ | [[File:Статистика объема снятого и смонтированного видео в CUSTIS.svg|right|640px]] | ||
+ | |||
* Программистам | * Программистам | ||
* Тестировщикам | * Тестировщикам | ||
− | * | + | * {{!|Advanced Users}} |
+ | |||
+ | Требующим эффективность! | ||
Понимающим, что такое: | Понимающим, что такое: | ||
Line 78: | Line 97: | ||
* Проект | * Проект | ||
* Сборка | * Сборка | ||
+ | |||
+ | == Основная идея .-. == | ||
+ | [[File:Идея SeminarAssembler.svg|center|800px]] | ||
+ | |||
+ | === Матрешка .-. === | ||
+ | |||
+ | [[File:Matroska._Выбор_видеопотока.png|512px]] | ||
+ | [[File:Просмотр_Matroska_с_UTD._Пример_с_флипчартом.png|480px]] | ||
+ | [[File:Просмотр_Matroska_с_UTD._Пример_с_Баранцевым,_01.png|480px]] | ||
== Принципы .-. == | == Принципы .-. == | ||
− | * Agile-видеомонтаж | + | |
− | ** Быстрая draft-версия | + | [[File:wysiwym.svg|right|256px]] |
+ | |||
+ | * Agile-видеомонтаж | ||
+ | ** Быстрая draft-версия ({{!|матрешка}}!) | ||
** Инкрементальные улучшения | ** Инкрементальные улучшения | ||
Line 89: | Line 120: | ||
*** Целостность | *** Целостность | ||
*** Коллаборативный видеомонтаж | *** Коллаборативный видеомонтаж | ||
+ | |||
+ | {{SideBar40|If the product is used as a tool, its interface should be as unintelligent as possible. Stupid is predictable; predictable is learnable; learnable is usable. [http://unqualified-reservations.blogspot.ru/2009/07/wolfram-alpha-and-hubristic-user.html ©]}} | ||
+ | |||
* Сборка | * Сборка | ||
** Автоматизируемая | ** Автоматизируемая | ||
** Инкрементальное обновление | ** Инкрементальное обновление | ||
− | ** Переносимость проекта | + | ** Переносимость проекта ({{@|абсолютные пути в видеоредакторах}}) |
+ | ** Прозрачность | ||
** Масштабируемая | ** Масштабируемая | ||
*** Сборка/по сети | *** Сборка/по сети | ||
Line 113: | Line 148: | ||
* <tt>SOX</tt> | * <tt>SOX</tt> | ||
* <tt>Sonic Visualizer</tt> | * <tt>Sonic Visualizer</tt> | ||
+ | * <tt>mkvtools</tt> | ||
Опционально: | Опционально: | ||
Line 119: | Line 155: | ||
=== AVISynth .-. === | === AVISynth .-. === | ||
− | <pre> | + | <pre style="font-size:75%"> |
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
Language files blank comment code scale 3rd gen. equiv | Language files blank comment code scale 3rd gen. equiv | ||
Line 138: | Line 174: | ||
</pre> | </pre> | ||
+ | === FFMPEG .-. === | ||
− | + | {{SideBar|Фабрис Беллар!}} | |
− | <pre> | + | <pre style="font-size:75%"> |
-------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||
Language files blank comment code scale 3rd gen. equiv | Language files blank comment code scale 3rd gen. equiv | ||
Line 162: | Line 199: | ||
=== Inkscape .-. === | === Inkscape .-. === | ||
+ | [[File:Inkscape Logo.svg|right|256px]] | ||
<pre> | <pre> | ||
Line 226: | Line 264: | ||
=== SeminarAssembler .-. === | === SeminarAssembler .-. === | ||
− | <pre> | + | |
+ | <pre style="font-size:75%"> | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
Language files blank comment code scale 3rd gen. equiv | Language files blank comment code scale 3rd gen. equiv | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
− | Python 27 | + | Python 27 518 569 1882 x 4.20 = 7904.40 |
HTML 1 55 78 238 x 1.90 = 452.20 | HTML 1 55 78 238 x 1.90 = 452.20 | ||
Lua 1 6 5 33 x 4.00 = 132.00 | Lua 1 6 5 33 x 4.00 = 132.00 | ||
DOS Batch 1 0 0 1 x 0.63 = 0.63 | DOS Batch 1 0 0 1 x 0.63 = 0.63 | ||
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
− | SUM: 30 | + | SUM: 30 579 652 2154 x 3.94 = 8489.23 |
------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ||
</pre> | </pre> | ||
− | == | + | * Интеграция |
+ | ** Местами хаки | ||
+ | * Отлов багов (2 ffmpeg-а) | ||
+ | * Поиск надежного и безопасного пути | ||
+ | |||
+ | == Машина Сборки.-. == | ||
+ | |||
+ | === Алгебра операций .-. === | ||
+ | |||
+ | <graph> | ||
+ | digraph G{ | ||
+ | node[fontname="Consolas" fontsize=8 shape=note]; | ||
+ | edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back] | ||
+ | rankdir=LR; | ||
+ | |||
+ | "cam.avi.mp3" [style=filled fillcolor=lightgrey] | ||
+ | "cam.avi" [style=filled fillcolor=yellow] | ||
+ | "cam.avi.mp3" -> "cam.avi" [label="parent" style=solid color=darkblue ] | ||
+ | } | ||
+ | </graph> | ||
+ | |||
+ | === Параметры преобразования .-. === | ||
+ | |||
+ | <graph> | ||
+ | digraph G{ | ||
+ | node[fontname="Consolas" fontsize=8 shape=note]; | ||
+ | edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back] | ||
+ | rankdir=TB; | ||
+ | |||
+ | "1105-scaling-scrum-distributed-team-wolfson.avs.avi$speed=130,width=800,height=480,size=200m.avi" [style=filled fillcolor=lightgrey] | ||
+ | "1105-scaling-scrum-distributed-team-wolfson.avs.avi" [style=filled fillcolor=lightgrey] | ||
+ | "1105-scaling-scrum-distributed-team-wolfson.avs.avi$speed=130,width=800,height=480,size=200m.avi" -> "1105-scaling-scrum-distributed-team-wolfson.avs.avi" [label="parent" style=solid color=darkblue ] | ||
+ | "1105-scaling-scrum-distributed-team-wolfson.avs.avi" [style=filled fillcolor=lightgrey] | ||
+ | "1105-scaling-scrum-distributed-team-wolfson.avs.avi" -> "1105-scaling-scrum-distributed-team-wolfson.avs" [label="parent" style=solid color=darkblue ] | ||
+ | } | ||
+ | </graph> | ||
+ | |||
+ | |||
+ | === Типы файлов .-. === | ||
{{SideBar40| | {{SideBar40| | ||
− | + | ;Видео: AVI, MP4, … | |
− | + | ;Аудио: WAV, MP3, … | |
+ | |||
+ | ;AVIISYNTH-скрипты: AVS | ||
+ | ;Матрешки: MKV, … | ||
+ | ;Описание матрешки: UNCUT (YAML) | ||
+ | |||
+ | ;Python-скрипты: PY | ||
+ | ;Верстка:SVG | ||
+ | ;Сценарии: SCENARIO | ||
+ | |||
+ | ;Задания: .sajobs | ||
}} | }} | ||
− | |||
− | == | + | <graph> |
+ | digraph G{ | ||
+ | |||
+ | edge [color="blue" style=solid] | ||
+ | node [shape=box3d style=filled fillcolor=yellow fontname="Calibri"] | ||
+ | |||
+ | "Видео" -> "Аудио" | ||
+ | "AVS" [fontsize=32 fontcolor=blue] | ||
+ | "AVS" -> "Видео" | ||
+ | "AVS" -> "Аудио" | ||
+ | |||
+ | "PY" -> "AVS" | ||
+ | "SVG" -> "AVS" | ||
+ | |||
+ | "UNCUT" -> "MKV" | ||
+ | |||
+ | "SCENARIO" -> "AVS" | ||
+ | |||
+ | |||
+ | edge [color="green" style=dotted ] | ||
+ | |||
+ | "UNCUT" -> "Видео" | ||
+ | "UNCUT" -> "Аудио" | ||
+ | |||
+ | "AVS" -> "AVS" | ||
+ | "SVG" -> "AVS" | ||
+ | |||
+ | "SCENARIO" -> "AVS" | ||
+ | "SCENARIO" -> "SVG" | ||
+ | |||
+ | "AVS" -> "Видео" | ||
+ | "AVS" -> "Аудио" | ||
+ | |||
+ | "SAJOBS" -> "Видео" | ||
+ | "SAJOBS" -> "Аудио" | ||
+ | } | ||
+ | </graph> | ||
+ | |||
+ | === Зависимости .-. === | ||
<graph> | <graph> | ||
+ | digraph G{ | ||
+ | node[fontname="Consolas" fontsize=8 shape=note]; | ||
+ | edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back] | ||
+ | rankdir=TB; | ||
+ | |||
+ | "audio.avs" -> "audio.wav" [label="includes" style=dashed color=lightblue ] | ||
+ | "start_time.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "start_time.py.avs" -> "start_time.py" [label="parent" style=solid color=darkblue ] | ||
+ | "start_time.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "audio.avs" -> "start_time.py.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "../../lib/lib.avs" -> "../../lib/cachemode.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "common.avs" -> "../../lib/lib.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "audio.avs$ss=1200,len=300.wav" [style=filled fillcolor=lightgrey] | ||
+ | "audio.avs$ss=1200,len=300.wav" -> "audio.avs" [label="parent" style=solid color=darkblue ] | ||
+ | "audio.avs" -> "common.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "../../lib/lib.avs" -> "../../lib/debugmode.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | } | ||
+ | </graph> | ||
+ | === Сборка «Матрешки» .-. === | ||
+ | <graph> | ||
digraph G{ | digraph G{ | ||
node[fontname="Consolas" fontsize=8 shape=note]; | node[fontname="Consolas" fontsize=8 shape=note]; | ||
edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back] | edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back] | ||
− | rankdir= | + | rankdir=TB; |
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | "../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
Line 266: | Line 410: | ||
"../sources/cam1/video.avs" -> "../sources/cam1/videofilters.avs" [label="includes" style=dashed color=lightblue ] | "../sources/cam1/video.avs" -> "../sources/cam1/videofilters.avs" [label="includes" style=dashed color=lightblue ] | ||
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | "../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "../sources/cam1/sa-sample-camera.avi" [style=filled fillcolor=yellow] | ||
"../sources/cam1/source.py.avs" -> "../sources/cam1/sa-sample-camera.avi" [label="includes" style=dashed color=lightblue ] | "../sources/cam1/source.py.avs" -> "../sources/cam1/sa-sample-camera.avi" [label="includes" style=dashed color=lightblue ] | ||
"../sources/screen1/common.avs" -> "../lib/lib.avs" [label="includes" style=dashed color=lightblue ] | "../sources/screen1/common.avs" -> "../lib/lib.avs" [label="includes" style=dashed color=lightblue ] | ||
Line 283: | Line 428: | ||
"../sources/cam1/source.py.avs" -> "../sources/cam1/source.py" [label="parent" style=solid color=darkblue ] | "../sources/cam1/source.py.avs" -> "../sources/cam1/source.py" [label="parent" style=solid color=darkblue ] | ||
"../lib/lib.avs" -> "../lib/cachemode.avs" [label="includes" style=dashed color=lightblue ] | "../lib/lib.avs" -> "../lib/cachemode.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "../sources/cam1/sa-sample-camera.avi.meta" [style=filled fillcolor=lightgrey] | ||
+ | "../sources/cam1/sa-sample-camera.avi" [style=filled fillcolor=yellow] | ||
"../sources/cam1/sa-sample-camera.avi.meta" -> "../sources/cam1/sa-sample-camera.avi" [label="parent" style=solid color=darkblue ] | "../sources/cam1/sa-sample-camera.avi.meta" -> "../sources/cam1/sa-sample-camera.avi" [label="parent" style=solid color=darkblue ] | ||
"../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | "../sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
Line 290: | Line 437: | ||
"../sources/screen1/video.avs" -> "../sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ] | "../sources/screen1/video.avs" -> "../sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ] | ||
"../sources/cam1/common.avs" -> "../lib/lib.avs" [label="includes" style=dashed color=lightblue ] | "../sources/cam1/common.avs" -> "../lib/lib.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "../sources/cam1/sa-sample-camera.avi.meta" [style=filled fillcolor=lightgrey] | ||
"../sources/cam1/source.py" -> "../sources/cam1/sa-sample-camera.avi.meta" [label="includes" style=dashed color=lightblue ] | "../sources/cam1/source.py" -> "../sources/cam1/sa-sample-camera.avi.meta" [label="includes" style=dashed color=lightblue ] | ||
"../sources/screen1/video.avs$vbitrate=800.avi" [style=filled fillcolor=lightgrey] | "../sources/screen1/video.avs$vbitrate=800.avi" [style=filled fillcolor=lightgrey] | ||
"2012-08-08-test.uncut" -> "../sources/screen1/video.avs$vbitrate=800.avi" [label="includes" style=dashed color=lightblue ] | "2012-08-08-test.uncut" -> "../sources/screen1/video.avs$vbitrate=800.avi" [label="includes" style=dashed color=lightblue ] | ||
+ | "../sources/screen1/sa-sample-screencast.avi.meta" [style=filled fillcolor=lightgrey] | ||
+ | "../sources/screen1/sa-sample-screencast.avi" [style=filled fillcolor=yellow] | ||
"../sources/screen1/sa-sample-screencast.avi.meta" -> "../sources/screen1/sa-sample-screencast.avi" [label="parent" style=solid color=darkblue ] | "../sources/screen1/sa-sample-screencast.avi.meta" -> "../sources/screen1/sa-sample-screencast.avi" [label="parent" style=solid color=darkblue ] | ||
+ | "../sources/screen1/sa-sample-screencast.avi.meta" [style=filled fillcolor=lightgrey] | ||
"../sources/screen1/source.py" -> "../sources/screen1/sa-sample-screencast.avi.meta" [label="includes" style=dashed color=lightblue ] | "../sources/screen1/source.py" -> "../sources/screen1/sa-sample-screencast.avi.meta" [label="includes" style=dashed color=lightblue ] | ||
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey] | "../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
"../sources/screen1/source.py.avs" -> "../sources/screen1/source.py" [label="parent" style=solid color=darkblue ] | "../sources/screen1/source.py.avs" -> "../sources/screen1/source.py" [label="parent" style=solid color=darkblue ] | ||
"../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey] | "../sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "../sources/screen1/sa-sample-screencast.avi" [style=filled fillcolor=yellow] | ||
"../sources/screen1/source.py.avs" -> "../sources/screen1/sa-sample-screencast.avi" [label="includes" style=dashed color=lightblue ] | "../sources/screen1/source.py.avs" -> "../sources/screen1/sa-sample-screencast.avi" [label="includes" style=dashed color=lightblue ] | ||
"../sources/cam1/video.avs$vbitrate=700.avi" [style=filled fillcolor=lightgrey] | "../sources/cam1/video.avs$vbitrate=700.avi" [style=filled fillcolor=lightgrey] | ||
"2012-08-08-test.uncut" -> "../sources/cam1/video.avs$vbitrate=700.avi" [label="includes" style=dashed color=lightblue ] | "2012-08-08-test.uncut" -> "../sources/cam1/video.avs$vbitrate=700.avi" [label="includes" style=dashed color=lightblue ] | ||
} | } | ||
+ | </graph> | ||
+ | |||
+ | === Сборка видео с версткой .-. === | ||
+ | |||
+ | <graph> | ||
+ | |||
+ | digraph G{ | ||
+ | node[fontname="Consolas" fontsize=8 shape=note]; | ||
+ | edge[fontname="Calibry" fontsize=8 fontcolor=blue dir=back] | ||
+ | rankdir=TB; | ||
+ | |||
+ | "scenes/default.scenario.avs" [style=filled fillcolor=lightgrey] | ||
+ | "scenes/default.scenario.avs" -> "sources/cam1/video.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/source.py.avs" -> "sources/cam1/source.py" [label="parent" style=solid color=darkblue ] | ||
+ | "sources/cam1/video.avs" -> "sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/screen1/common.avs" -> "lib/lib.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/audio.avs" -> "sources/cam1/start_time.py.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "scenes/common.avs" -> "lib/lib.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/screen1/screen.x264.avi.meta" [style=filled fillcolor=lightgrey] | ||
+ | "sources/screen1/source.py" -> "sources/screen1/screen.x264.avi.meta" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/start_time.py.avs" -> "sources/cam1/start_time.py" [label="parent" style=solid color=darkblue ] | ||
+ | "2010-09-22-oss-golden-mean-fomin.avs.avi" [style=filled fillcolor=lightgrey] | ||
+ | "2010-09-22-oss-golden-mean-fomin.avs.avi" -> "2010-09-22-oss-golden-mean-fomin.avs" [label="parent" style=solid color=darkblue ] | ||
+ | "sources/cam1/video.avs" -> "sources/cam1/videofilters.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/cam.avi.meta" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/cam.avi" [style=filled fillcolor=yellow] | ||
+ | "sources/cam1/cam.avi.meta" -> "sources/cam1/cam.avi" [label="parent" style=solid color=darkblue ] | ||
+ | "sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/screen1/screen.x264.avi" [style=filled fillcolor=yellow] | ||
+ | "sources/screen1/source.py.avs" -> "sources/screen1/screen.x264.avi" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/video.avs" -> "sources/cam1/source.py.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/start_time.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/video.avs" -> "sources/cam1/start_time.py.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/screen1/video.avs" -> "sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/cam.avi" [style=filled fillcolor=yellow] | ||
+ | "sources/cam1/source.py.avs" -> "sources/cam1/cam.avi" [label="includes" style=dashed color=lightblue ] | ||
+ | "lib/lib.avs" -> "lib/debugmode.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/common.avs" -> "lib/lib.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/screen1/video.avs" -> "sources/screen1/start_time.py.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/screen1/start_time.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/screen1/start_time.py.avs" -> "sources/screen1/start_time.py" [label="parent" style=solid color=darkblue ] | ||
+ | "sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/screen1/video.avs" -> "sources/screen1/source.py.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "scenes/default.scenario.avs" [style=filled fillcolor=lightgrey] | ||
+ | "scenes/default.scenario.avs" -> "scenes/default.scenario" [label="parent" style=solid color=darkblue ] | ||
+ | "sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/screen1/source.py.avs" -> "sources/screen1/source.py" [label="parent" style=solid color=darkblue ] | ||
+ | "sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/audio.avs" -> "sources/cam1/source.py.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/audio.avs" -> "sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "scenes/default.scenario.avs" [style=filled fillcolor=lightgrey] | ||
+ | "2010-09-22-oss-golden-mean-fomin.avs" -> "scenes/default.scenario.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "scenes/default.scenario.avs" [style=filled fillcolor=lightgrey] | ||
+ | "scenes/default.scenario.avs" -> "scenes/common.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/cam.avi.meta" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/source.py" -> "sources/cam1/cam.avi.meta" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/screen1/screen.x264.avi.meta" [style=filled fillcolor=lightgrey] | ||
+ | "sources/screen1/screen.x264.avi" [style=filled fillcolor=yellow] | ||
+ | "sources/screen1/screen.x264.avi.meta" -> "sources/screen1/screen.x264.avi" [label="parent" style=solid color=darkblue ] | ||
+ | "lib/lib.avs" -> "lib/cachemode.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/screen1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/screen1/source.py.avs" -> "sources/screen1/common.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "scenes/default.scenario.avs" [style=filled fillcolor=lightgrey] | ||
+ | "scenes/default.scenario.avs" -> "sources/cam1/audio.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "sources/cam1/source.py.avs" [style=filled fillcolor=lightgrey] | ||
+ | "sources/cam1/source.py.avs" -> "sources/cam1/common.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | "scenes/default.scenario.avs" [style=filled fillcolor=lightgrey] | ||
+ | "scenes/default.scenario.avs" -> "sources/screen1/video.avs" [label="includes" style=dashed color=lightblue ] | ||
+ | } | ||
</graph> | </graph> | ||
+ | |||
+ | == Интерфейс .-. == | ||
+ | |||
+ | === Текстово-файловый .-. === | ||
+ | |||
+ | [[File:FAR 4 SA.png|center]] | ||
+ | |||
+ | |||
+ | === Command line .-. === | ||
+ | {{SideBar40|Like <tt>svn</tt>/<tt>hg</tt>/<tt>git</tt>…}} | ||
+ | |||
+ | {{:SeminarAssembler/Command-line/Схема}} | ||
+ | |||
+ | === WYSIWYM .-. === | ||
+ | |||
+ | [[File:wysiwym.svg]] | ||
+ | |||
+ | |||
+ | === Синхронизация .-. === | ||
+ | |||
+ | [[File:SA синхронизация по звуку.png|center]] | ||
== Инсталляция .-. == | == Инсталляция .-. == | ||
;Необходимо: | ;Необходимо: | ||
* [http://avisynth.org/ AVISynth, 32bit], >= 2.6.0 | * [http://avisynth.org/ AVISynth, 32bit], >= 2.6.0 | ||
− | * Скачать [ | + | * Скачать [[/Builds|SA.EXE]], положить в любой каталог, включенный в PATH. |
− | ;Очень желательно (для видеоверстки): | + | ;Очень желательно, практически обязательно, если не уверены в обратном (для видеоверстки): |
+ | * Кодек [http://sourceforge.net/projects/x264vfw/files/x264vfw/ x264vfw] 32-бит (даже, если Win764bit) | ||
+ | ** Другие кодеки по источникам ([[MiniDV2AVI|Cedocida]] для DV и т.п.). | ||
* [http://inkscape.org Inkscape] | * [http://inkscape.org Inkscape] | ||
+ | * [[VLC]] | ||
+ | |||
+ | |||
;Рекомендую: | ;Рекомендую: | ||
Line 317: | Line 570: | ||
== Исходники .-.== | == Исходники .-.== | ||
− | * http://launchpad.net/seminar-assembler | + | * http://abf.io/belonesox/seminar-assembler/ |
+ | |||
+ | == Обратная связь == | ||
+ | Багрепорты можно слать на [https://bugs.launchpad.net/seminar-assembler/+filebug ланчпад], или по [mailto:stas-fomin@yandex.ru email]. | ||
+ | Вопросы, замечания, предложения → туда же. |
Latest revision as of 10:50, 4 November 2023
- Title
- SeminarAssembler
- Author
- Stas Fomin
- Subfooter
- Stas Fomin, 10:50, 4 November 2023
SeminarAssembler™ — это инструмент для эффективного монтажа семинаров, докладов и прочего образовательного видео, когда важно сшивать несколько разных источников — несколько камер, скринкасты, слайды, и делать это очень быстро и много. (примеры видео см. в http://lib.custis.ru/it-talks).
- Введение
Далее см Category:Курс «Видео на конвеере»
Contents
SeminarAssembler: WTF? .-.
Фреймворк быстрого видеомонтажа
- семинаров.
- докладов
- лекций
- конференций
- вебинаров
Когда:
- несколько потоков:
- камеры
- скринкасты
- слайды
- надо много и быстро
+ Автоматическая конверсия медиаформатов, с правкой размеров/скорости.
Этимология: Seminar .-.
- Длинное
- Образовательное
- Информационно плотное
- Активный зритель
- не → Развлекалово, Свадьбы, …
Образовательное видео?
Что такое правильное обучающее IT-видео, как его смотреть, и немного — как готовить, см мой доклад на Software People-2012:
Этимология: Assembler .-.
- «Сборка»
- Множества гетерогенных медиапотоков:
- Камер
- Скринкастов
- Слайдов
- Переговоров (скайп, IM…).
- Screen2Log-cкринкастов из блоков
- Множества гетерогенных медиапотоков:
- Ассемблер
- «Двухтермовый, строчный» DSL для программирования сцен:
WIDTH 1280 HEIGHT 720 TRANSITION RandomTrans TITLE «Введение в технологию Enterprise Forms» 00:01:09 S 00:08:16 00:09:09 S 00:17:21
Оно надо? .-.
Перегруженность, Мелкая мышиная моторика, Неавтоматизируемость, Ремесло, Немасштабируемость…
Кому? .-.
- Программистам
- Тестировщикам
- Advanced Users
Требующим эффективность!
Понимающим, что такое:
- Файл
- Код
- Проект
- Сборка
Основная идея .-.
Матрешка .-.
Принципы .-.
- Agile-видеомонтаж
- Быстрая draft-версия (матрешка!)
- Инкрементальные улучшения
- WYSIWYM — What You See Is What You Mean
- Максимальная компактность и гибкость:
- Краткий код + дизайн-шаблоны
- Целостность
- Коллаборативный видеомонтаж
- Максимальная компактность и гибкость:
If the product is used as a tool, its interface should be as unintelligent as possible. Stupid is predictable; predictable is learnable; learnable is usable. ©
- Сборка
- Автоматизируемая
- Инкрементальное обновление
- Переносимость проекта (абсолютные пути в видеоредакторах)
- Прозрачность
- Масштабируемая
- Сборка/по сети
- вся [ночная]-мощь компьютеров компании.
- Сборка/по сети
- Free & open-source.
НеВелосипед .-.
User Experience:
- Reuse имеющийся
- Приобретается полезный
- свой UI минимален
Использует:
- ffmpeg
- Virtual Dub
- inkscape
- AVISynth
- SOX
- Sonic Visualizer
- mkvtools
Опционально:
- VLC
AVISynth .-.
------------------------------------------------------------------------------- Language files blank comment code scale 3rd gen. equiv ------------------------------------------------------------------------------- C++ 293 7375 8416 13858 x 1.51 = 20925.58 C/C++ Header 493 12178 14871 13358 x 1.00 = 13358.00 C 41 1650 2113 6955 x 0.77 = 5355.35 Bourne Shell 7 276 844 4350 x 3.81 = 16573.50 m4 14 95 52 1558 x 1.00 = 1558.00 make 5 250 506 1314 x 2.50 = 3285.00 Assembly 4 115 178 524 x 0.25 = 131.00 HTML 5 1 5 439 x 1.90 = 834.10 CSS 2 8 0 258 x 1.00 = 258.00 Teamcenter def 2 2 0 8 x 1.00 = 8.00 ------------------------------------------------------------------------------- SUM: 866 21950 26985 42622 x 1.46 = 62286.53 -------------------------------------------------------------------------------
FFMPEG .-.
Фабрис Беллар!
-------------------------------------------------------------------------------- Language files blank comment code scale 3rd gen. equiv -------------------------------------------------------------------------------- C 1302 66172 57266 427936 x 0.77 = 329510.72 C/C++ Header 534 9431 29244 98369 x 1.00 = 98369.00 Assembly 94 3830 4119 38673 x 0.25 = 9668.25 D 1002 0 0 13844 x 1.70 = 23534.80 Bourne Shell 30 692 375 4920 x 3.81 = 18745.20 make 31 233 27 2175 x 2.50 = 5437.50 CSS 1 201 57 839 x 1.00 = 839.00 C++ 3 132 122 782 x 1.51 = 1180.82 Perl 1 59 61 310 x 4.00 = 1240.00 XSD 1 21 4 147 x 1.90 = 279.30 Bourne Again Shell 1 11 3 44 x 3.81 = 167.64 HTML 2 5 0 19 x 1.90 = 36.10 -------------------------------------------------------------------------------- SUM: 3002 80787 91278 588058 x 0.83 = 489008.33 --------------------------------------------------------------------------------
Inkscape .-.
-------------------------------------------------------------------------------- Language files blank comment code scale 3rd gen. equiv -------------------------------------------------------------------------------- C++ 827 60449 61764 303558 x 1.51 = 458372.58 C/C++ Header 1097 32918 58698 87517 x 1.00 = 87517.00 HTML 9 7522 8 39778 x 1.90 = 75578.20 Python 225 5901 5593 29601 x 4.20 = 124324.20 C 45 5866 5935 26246 x 0.77 = 20209.42 Java 494 4040 12449 11088 x 1.36 = 15079.68 XML 24 1728 1252 6494 x 1.90 = 12338.60 XSLT 14 580 1096 6352 x 1.90 = 12068.80 Javascript 5 548 635 2598 x 1.48 = 3845.04 Perl 14 460 353 1889 x 4.00 = 7556.00 make 39 193 91 1586 x 2.50 = 3965.00 Bourne Shell 22 272 379 1439 x 3.81 = 5482.59 m4 6 152 117 1080 x 1.00 = 1080.00 CSS 2 32 32 216 x 1.00 = 216.00 DOS Batch 3 36 5 182 x 0.63 = 114.66 Ruby 1 26 32 149 x 4.20 = 625.80 Teamcenter def 3 1 0 91 x 1.00 = 91.00 Expect 1 18 0 56 x 2.00 = 112.00 Bourne Again Shell 1 12 3 48 x 3.81 = 182.88 DTD 1 5 1 27 x 1.90 = 51.30 -------------------------------------------------------------------------------- SUM: 2833 120759 148443 519995 x 1.59 = 828810.75 --------------------------------------------------------------------------------
VLC .-.
------------------------------------------------------------------------------- Language files blank comment code scale 3rd gen. equiv ------------------------------------------------------------------------------- C 763 58578 56901 302733 x 0.77 = 233104.41 C/C++ Header 662 14905 32261 66771 x 1.00 = 66771.00 C++ 254 12867 11783 64379 x 1.51 = 97212.29 Bourne Shell 35 12176 5895 49867 x 3.81 = 189993.27 Objective C 46 4575 2896 25531 x 2.96 = 75571.76 m4 40 1596 774 15645 x 1.00 = 15645.00 Javascript 8 310 777 9469 x 1.48 = 14014.12 make 153 917 1278 7653 x 2.50 = 19132.50 Lua 52 785 433 5160 x 4.00 = 20640.00 XML 12 67 148 1541 x 1.90 = 2927.90 HTML 17 31 154 1425 x 1.90 = 2707.50 CSS 4 87 181 994 x 1.00 = 994.00 Assembly 9 140 48 958 x 0.25 = 239.50 MUMPS 2 115 0 565 x 4.21 = 2378.65 DTD 1 5 6 327 x 1.90 = 621.30 Visual Basic 2 75 121 272 x 2.76 = 750.72 Python 1 55 66 213 x 4.20 = 894.60 MATLAB 1 29 0 124 x 4.00 = 496.00 Perl 2 16 26 112 x 4.00 = 448.00 vim script 1 4 33 83 x 3.00 = 249.00 sed 2 0 0 16 x 4.00 = 64.00 ------------------------------------------------------------------------------- SUM: 2067 107333 113781 553838 x 1.34 = 744855.52 -------------------------------------------------------------------------------
SeminarAssembler .-.
------------------------------------------------------------------------------- Language files blank comment code scale 3rd gen. equiv ------------------------------------------------------------------------------- Python 27 518 569 1882 x 4.20 = 7904.40 HTML 1 55 78 238 x 1.90 = 452.20 Lua 1 6 5 33 x 4.00 = 132.00 DOS Batch 1 0 0 1 x 0.63 = 0.63 ------------------------------------------------------------------------------- SUM: 30 579 652 2154 x 3.94 = 8489.23 -------------------------------------------------------------------------------
- Интеграция
- Местами хаки
- Отлов багов (2 ffmpeg-а)
- Поиск надежного и безопасного пути
Машина Сборки.-.
Алгебра операций .-.
Параметры преобразования .-.
Типы файлов .-.
- Видео
- AVI, MP4, …
- Аудио
- WAV, MP3, …
- AVIISYNTH-скрипты
- AVS
- Матрешки
- MKV, …
- Описание матрешки
- UNCUT (YAML)
- Python-скрипты
- PY
- Верстка
- SVG
- Сценарии
- SCENARIO
- Задания
- .sajobs
Зависимости .-.
Сборка «Матрешки» .-.
Сборка видео с версткой .-.
Интерфейс .-.
Текстово-файловый .-.
Command line .-.
Like svn/hg/git…
WYSIWYM .-.
Синхронизация .-.
Инсталляция .-.
- Необходимо
- AVISynth, 32bit, >= 2.6.0
- Скачать SA.EXE, положить в любой каталог, включенный в PATH.
- Очень желательно, практически обязательно, если не уверены в обратном (для видеоверстки)
- Кодек x264vfw 32-бит (даже, если Win764bit)
- Другие кодеки по источникам (Cedocida для DV и т.п.).
- Inkscape
- VLC
- Рекомендую
- ConferenceRecorder или просто Screen2Log для скринкастов.
Исходники .-.
Обратная связь
Багрепорты можно слать на ланчпад, или по email. Вопросы, замечания, предложения → туда же.