185 lines
3.9 KiB
Django/Jinja
185 lines
3.9 KiB
Django/Jinja
[mix]
|
|
#videocaps=video/x-raw,format=I420,width=1920,height=1080,framerate=30/1,pixel-aspect-ratio=1/1,interlace-mode=progressive
|
|
videocaps=video/x-raw,format=I420,width=1280,height=720,framerate=30/1,pixel-aspect-ratio=1/1,interlace-mode=progressive
|
|
audiocaps=audio/x-raw,format=S16LE,channels=4,layout=interleaved,rate=48000
|
|
|
|
sources={{ voctomix_sources | map(attribute = 'name') | join(',') }}
|
|
livesources={{ voctomix_sources | map(attribute = 'name') | join(',') }}
|
|
#backgrounds=side-by-side,side-by-side-reverse
|
|
|
|
|
|
# TODO: convert the rest into loops
|
|
{% for source in voctomix_sources %}
|
|
{% if source.kind == "v4l2" %}
|
|
[source.{{ source.name }}]
|
|
kind=v4l2
|
|
device={{ source.device }}
|
|
width={{ source.width }}
|
|
height={{ source.height }}
|
|
framerate={{ source.framerate }}
|
|
format=YUY2
|
|
{% endif %}
|
|
{% if source.kind == "tcp" %}
|
|
[source.{{ source.name }}]
|
|
kind=tcp
|
|
scan=progressive
|
|
volume={{ source.volume }}
|
|
{% if source.name == "cam1" %}
|
|
audio.presenter=0+1
|
|
#audio.slides=2+3
|
|
{% endif %}
|
|
{% if source.name == "slides" %}
|
|
#audio.presenter=0+1
|
|
audio.slides=2+3
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
|
|
|
|
#[source.side-by-side]
|
|
[source.background]
|
|
kind=img
|
|
scan=progressive
|
|
file=/opt/voctomix/artwork/side-by-side.png
|
|
#composites=fs-sbs
|
|
|
|
#[source.side-by-side-reverse]
|
|
#kind=img
|
|
#file=/opt/voctomix/artwork/side-by-side-reverse.png
|
|
#composites=|fs-sbs
|
|
|
|
|
|
[previews]
|
|
# disable if ui & server run on the same computer and can exchange uncompressed video frames
|
|
enabled=false
|
|
#live=true
|
|
#videocaps=video/x-raw,width=1024,height=576,framerate=30/1
|
|
#vaapi=h264
|
|
|
|
|
|
#[blinder]
|
|
#enabled=true
|
|
|
|
#[source.blinder]
|
|
#kind=img
|
|
#file=/opt/voctomix/artwork/blank.png
|
|
|
|
|
|
#[overlay]
|
|
#path = /opt/voctomix/overlays
|
|
|
|
|
|
[mirrors]
|
|
enabled=true
|
|
|
|
|
|
[composites]
|
|
|
|
fs.a = *
|
|
fs.b = *
|
|
fs.alpha-b = 0
|
|
fs.noswap = true
|
|
|
|
lec.a = 0.006/0.01 0.75
|
|
lec.b = 0.60/0.42 0.56
|
|
lec.crop-b = 0.31/0
|
|
lec.mirror = true
|
|
|
|
lec_43.a = -0.125/0.0 1.0
|
|
lec_43.b = 0.60/0.42 0.56
|
|
lec_43.crop-a = 0.125/0
|
|
lec_43.crop-b = 0.31/0
|
|
lec_43.mirror = true
|
|
|
|
fs-b.a = *
|
|
fs-b.b = *
|
|
fs-b.noswap = true
|
|
|
|
|
|
[transitions]
|
|
|
|
# unique name = ms, from / [... /] to
|
|
fs-fs = 750, fs / fs-b
|
|
fs-lec = 750, fs / lec
|
|
|
|
# default blending
|
|
# unique name = ms, from / [... /] to
|
|
def = 750, * / *
|
|
|
|
|
|
[toolbar.sources.a]
|
|
buttons = slides,cam1
|
|
|
|
slides.name = slides
|
|
slides.key = 1
|
|
slides.tip = Select source slides on channel A
|
|
|
|
cam1.name = cam1
|
|
cam1.key = 2
|
|
cam1.tip = Select source cam1 on channel A
|
|
|
|
|
|
[toolbar.sources.b]
|
|
buttons = cam1,slides
|
|
|
|
cam1.name = cam1
|
|
cam1.key = F1
|
|
cam1.tip = Select source cam1 on channel B
|
|
|
|
slides.name = slides
|
|
slides.key = F2
|
|
slides.tip = Select source slides on channel B
|
|
|
|
|
|
[toolbar.composites]
|
|
buttons = fs,lec
|
|
|
|
fs.name = FULL
|
|
fs.key = F5
|
|
fs.tip = Show channel A on full screen
|
|
|
|
lec.name = LECTURE
|
|
lec.key = F6
|
|
lec.tip = Put cropped channel B beside large channel A
|
|
|
|
|
|
[toolbar.mods]
|
|
buttons = ratio
|
|
|
|
ratio.name = 4:3
|
|
ratio.replace = lec->lec_43
|
|
ratio.key = F9
|
|
ratio.tip = Crop channel A to 4:3 ratio
|
|
|
|
|
|
[toolbar.mix]
|
|
buttons = retake,trans
|
|
|
|
retake.name = RETAKE
|
|
retake.key = BackSpace
|
|
retake.tip = Copy output composite to preview for modification\n(output remains untouched)
|
|
|
|
cut.name = CUT
|
|
cut.key = Return
|
|
cut.tip = Hard cut preview composite to output.
|
|
cut.expand = True
|
|
|
|
trans.name = TRANS
|
|
trans.key = space
|
|
trans.tip = Use transition to cut preview composite to output
|
|
trans.expand = True
|
|
|
|
|
|
[toolbar.insert]
|
|
auto-off.name = AUTO-OFF
|
|
auto-off.key = o
|
|
auto-off.tip = automatically turn off insertion before every mix
|
|
|
|
update.name = UPDATE
|
|
update.key = u
|
|
update.tip = Update current event
|
|
|
|
insert.name = INSERT
|
|
insert.key = i
|
|
insert.tip = Show or hide current insertion
|