Compare commits

...

3 commits

7 changed files with 452 additions and 63 deletions

View file

@ -19,34 +19,34 @@ def introFrames(args):
)
# fade in logo
# frames = 1 * fps
# for i in range(0, frames):
# # source: matrix(0.66093871,0,0,0.66093871,325.49887,111.96043)
# # target: matrix(1, 0, 0, 1, 0, 0)
# size = 0.66 + easeInOutSine(i, 0.0, 1.0 - 0.66, frames)
# posx = easeInOutSine(frames - i, 0.0, 325.49887, frames)
# posy = easeInOutSine(frames - i, 0.0, 111.96043, frames)
# yield (
# (
# "glogo",
# "attr",
# "transform",
# # the easing function cant handle easing from larger to smaller, so use this hacky workaround
# f"translate(0,{easeInQuad(frames - i, 0.0, 200.0, frames)})",
# ),
# ("glogo", "style", "opacity", easeOutSine(i, 0, 1, frames)),
# # scale in the fsck text banner behind the foreground elements
# # target size is 5.414656 in both x and y
# (
# "fsck-banner",
# "attr",
# "transform",
# f"matrix({size:.4f},0,0,{size:.4f},{posx:.4f},{posy:.4f})",
# ),
# ("title", "style", "opacity", 0),
# ("persons", "style", "opacity", 0),
# ("sparkle", "style", "opacity", 0),
# )
frames = 3 * fps
for i in range(0, frames):
# source: matrix(0.66093871,0,0,0.66093871,325.49887,111.96043)
# target: matrix(1, 0, 0, 1, 0, 0)
size = 0.66 + easeInOutQuad(i, 0.0, 1.0 - 0.66, frames)
posx = easeInOutQuad(frames - i, 0.0, 325.49887, frames)
posy = easeInOutQuad(frames - i, 0.0, 111.96043, frames)
yield (
(
"glogo",
"attr",
"transform",
# the easing function cant handle easing from larger to smaller, so use this hacky workaround
f"translate(0,{easeInQuad(frames - i, 0.0, 200.0, frames)})",
),
("glogo", "style", "opacity", easeOutQuad(i, 0, 1, frames)),
# scale in the fsck text banner behind the foreground elements
# target size is 5.414656 in both x and y
(
"fsck-banner",
"attr",
"transform",
f"matrix({size:.4f},0,0,{size:.4f},{posx:.4f},{posy:.4f})",
),
("title", "style", "opacity", 0),
("persons", "style", "opacity", 0),
("sparkle", "style", "opacity", 0),
)
frames = 1 * fps
for i in range(0, frames):
@ -58,41 +58,53 @@ def introFrames(args):
)
# fade in title and persons
frames = 2 * fps
frames = 3 * fps
intermediate = (frames * 1) // 3
for i in range(0, intermediate):
yield (
("title", "style", "opacity", easeOutSine(i, 0, 1, frames)),
("title", "style", "opacity", easeOutQuad(i, 0, 1, frames)),
("persons", "style", "opacity", 0),
("glogo", "style", "opacity", 1),
(
"sparkle",
"style",
"opacity",
easeOutSine(min(i * 2, intermediate), 0, 1, intermediate),
easeOutQuad(min(i * 2, intermediate), 0, 1, intermediate),
),
(
"sparkle",
"attr",
"transform",
f"translate({-463.66869 + easeLinear(i, 0.0, 378.32308 + 463.66869, frames)}, 0)",
),
)
for i in range(intermediate, frames):
yield (
("title", "style", "opacity", easeOutSine(i, 0, 1, frames)),
("title", "style", "opacity", easeOutQuad(i, 0, 1, frames)),
(
"persons",
"style",
"opacity",
easeOutSine(i - intermediate, 0, 1, frames - intermediate),
easeOutQuad(i - intermediate, 0, 1, frames - intermediate),
),
("glogo", "style", "opacity", 1),
(
"sparkle",
"style",
"opacity",
easeInSine(
i-intermediate,
easeInQuad(
i - intermediate,
1,
-1,
frames - intermediate,
),
),
(
"sparkle",
"attr",
"transform",
f"translate({-463.66869 + easeLinear(i, 0.0, 378.32308 + 463.66869, frames)}, 0)",
),
)
# show whole image for 5 seconds
@ -134,7 +146,7 @@ def outroFrames(args):
def debug():
render(
"intro.svg",
["intro.svg", "intro.flac"],
"../intro.ts",
introFrames,
{
@ -169,7 +181,7 @@ def tasks(queue, args, idlist, skiplist):
# generate a task description and put it into the queue
queue.put(
Rendertask(
infile="intro.svg",
infile=["intro.svg", "intro.flac"],
outfile=str(event["id"]) + ".ts",
sequence=introFrames,
parameters={

View file

@ -0,0 +1,133 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
version="1.1"
x="0px"
y="0px"
width="141.733px"
height="110.551px"
viewBox="167.146 125.956 141.733 110.551"
enable-background="new 167.146 125.956 141.733 110.551"
xml:space="preserve"
id="svg1"
sodipodi:docname="FSCK_Banner.svg"
inkscape:version="1.4.1 (93de688d07, 2025-03-30)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1" /><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="4.8900842"
inkscape:cx="59.610426"
inkscape:cy="36.297944"
inkscape:window-width="3840"
inkscape:window-height="2052"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="Logo" />
<g
id="Path">
</g>
<g
id="Logo"
inkscape:export-ydpi="198.46001"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="Screen-FSCK-Logov3-JX-noBG.svg"
inkscape:export-filename="Screen-FSCK-Logov3-JX-noBG.png"
inkscape:export-xdpi="198.46001">
<g
id="g8037-6"
transform="translate(-545.47229,-718.4672)">
<path
id="path8023-7"
sodipodi:nodetypes="ccccccc"
fill="#122E5C"
d="M718.288,914.687c43.321-4.726,86.784-4.782,130.393,0 v-32.145v-32.147c-43.609,4.782-87.072,4.727-130.393,0v32.147V914.687z" />
<path
id="path8033-5"
sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
fill="#FBBA00"
d=" M740.355,878.988l-3.022-0.03v-6.423l-3.012-0.129v-7.934l-3.014-0.154v-7.003l-6.029-0.557V864l3.004,0.161v7.898l3.016,0.189 v6.649l3.049,0.03v3.615v3.613l-3.049,0.032v6.647l-3.016,0.189v7.897l-3.004,0.164v7.241l6.029-0.56v-7.002l3.014-0.155v-7.934 l3.012-0.129v-6.422l3.022-0.028v-3.555V878.988z M841.692,901.085l-3.014-0.164v-7.904l-3.013-0.189v-6.641l-3.014-0.032v-7.229 l3.014-0.03v-6.641l3.013-0.191v-7.904l3.014-0.162v-7.239l-6.026,0.559v6.999l-3.014,0.154v7.942l-3.014,0.131v6.412l-3.013,0.03 v-20.945l-6.026,0.406v48.187l6.026,0.404v-14.607l3.013,0.106v7.924l3.014,0.147v6.896l9.04,0.817V901.085z M816.743,892.245 l-6.026-0.026v7.396l-6.026-0.226v-7.151l-3.013,0.02v-19.432l3.013,0.02v-7.151l6.026-0.226v7.395l6.026-0.025v-7.619 l-3.013,0.128v-6.51l-12.053,0.489v6.47l-3.014,0.093v6.913l-3.013-0.026v19.531l3.013-0.026v6.914l3.014,0.093v6.469 l12.053,0.488v-6.508l3.013,0.126V892.245z M791.793,885.838l-3.013-0.01v-6.571l-12.052-0.008v-13.161l6.027,0.065v6.554 l6.025,0.018v-6.614l-3.014,0.034v-6.55l-12.052-0.079v6.511l-3.013-0.074v13.268l3.013,0.015v6.608l12.052-0.023v13.115 l-9.039,0.057v-6.639l-6.026-0.042v6.816l3.013-0.075v6.511l15.066-0.059v-6.536l3.013,0.053V885.838z M766.845,859.366 l-21.092-0.963v48.279l6.027-0.354v-20.335l12.052-0.092v-6.716l-12.052-0.093v-13.805l15.065,0.629V859.366z" />
</g>
<path
id="path31683-3"
sodipodi:end="3.1415927"
sodipodi:open="true"
sodipodi:ry="5.5844088"
sodipodi:start="0"
sodipodi:cy="352.84659"
sodipodi:rx="16.928846"
sodipodi:cx="-250.17326"
sodipodi:type="arc"
sodipodi:arc-type="arc"
fill="none"
d=" M223.497,218.428c0.401,1.491-1.648,3.51-5.375,5.303c-3.728,1.793-8.569,3.084-12.698,3.39c-4.128,0.303-6.919-0.43-7.32-1.92" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
fsck2025/artwork/intro.flac Normal file

Binary file not shown.

View file

@ -39,7 +39,7 @@
id="path17" /></marker><linearGradient
id="linearGradient3"
inkscape:collect="always"><stop
style="stop-color:#24b3db;stop-opacity:1;"
style="stop-color:#1b8ecb;stop-opacity:0.99795711;"
offset="0"
id="stop3" /><stop
style="stop-color:#24b3db;stop-opacity:0;"
@ -250,11 +250,11 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.5700866"
inkscape:cx="1074.1445"
inkscape:cy="584.36266"
inkscape:zoom="1.7608371"
inkscape:cx="1028.7721"
inkscape:cy="584.09719"
inkscape:document-units="px"
inkscape:current-layer="layer3"
inkscape:current-layer="g4"
showgrid="false"
inkscape:window-width="3840"
inkscape:window-height="2052"
@ -768,7 +768,7 @@
inkscape:transform-center-y="-0.71428571"><tspan
x="1060.8515"
y="792.97121"
id="tspan4">$title</tspan></text><text
id="tspan1">$title</tspan></text><text
xml:space="preserve"
id="persons"
style="font-size:53.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';text-align:center;writing-mode:lr-tb;direction:ltr;white-space:pre;shape-inside:url(#rect3);shape-padding:1.2142;display:inline;opacity:1;fill:#ff9700"
@ -778,11 +778,12 @@
inkscape:transform-center-y="0.71428571"><tspan
x="1082.8204"
y="832.11247"
id="tspan6"><tspan
id="tspan3"><tspan
style="fill:#ffffff"
id="tspan5">$personnames</tspan></tspan></text><g id="sparkle"><g
id="g4"
transform="rotate(180,825.41336,820.30005)"><path
style="fill:#23efec;fill-opacity:1;stroke:url(#linearGradient4);stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Dot)"
d="M 495.60623,776.93821 H 864.63598"
id="path1" /></g></g></g></svg>
id="tspan2">$personnames</tspan></tspan></text><g
id="sparkle"><g
id="g4"
transform="rotate(180,825.41336,820.30005)"><path
style="fill:#19bcb9;fill-opacity:1;stroke:url(#linearGradient4);stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#Dot)"
d="M 495.60623,776.93821 H 864.63598"
id="path1" /></g></g></g></svg>

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Before After
Before After

View file

@ -27,15 +27,15 @@
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="px"
inkscape:zoom="1.2564954"
inkscape:cx="913.25441"
inkscape:cy="482.29383"
inkscape:zoom="1.0127873"
inkscape:cx="931.58751"
inkscape:cy="488.25652"
inkscape:window-width="3840"
inkscape:window-height="2052"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
inkscape:current-layer="layer2"
showgrid="false" /><defs
id="defs1"><filter
style="color-interpolation-filters:sRGB;"
@ -237,4 +237,7 @@
x="1653.757"
y="-417.16516"
style="fill:url(#linearGradient225)"
transform="rotate(15)" /></g></svg>
transform="rotate(15)" /></g><g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="reference" /></svg>

Before

Width:  |  Height:  |  Size: 730 KiB

After

Width:  |  Height:  |  Size: 730 KiB

Before After
Before After

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 608 KiB

View file

@ -41,7 +41,8 @@ class Rendertask:
def __init__(self, infile, parameters={}, outfile=None, workdir='.', sequence=None):
if isinstance(infile, list):
self.infile = infile[0]
# self.audiofile = infile[1]
self.audiofile = infile[1]
print(f"using audio file {self.audiofile}")
else:
self.infile = infile
self.audiofile = None
@ -200,16 +201,12 @@ def rendertask_video(task):
cmd = 'cd {0} && '.format(task.workdir)
cmd += 'ffmpeg -f image2 -i .frames/%04d.png '
if task.audiofile is None:
cmd += '-ar 48000 -ac 1 -f s16le -i /dev/zero -ar 48000 -ac 1 -f s16le -i /dev/zero '
cmd += '-ar 48000 -ac 1 -f s16le -i /dev/zero '
else:
cmd += '-i {0} -i {0} '.format(task.audiofile)
cmd += '-i {0} '.format(task.audiofile)
cmd += '-map 0:0 -c:v mpeg2video -q:v 2 -aspect 16:9 '
cmd += '-map 0:0 -c:v mpeg2video -q:v 2 -aspect 16:9 -map 1:a '
if task.audiofile is None:
cmd += '-map 1:0 -map 2:0 '
else:
cmd += '-map 1:0 -c:a copy -map 2:0 -c:a copy '
cmd += '-shortest -f mpegts "{0}"'.format(task.outfile)
elif task.outfile.endswith('.mov'):
cmd = 'cd {0} && '.format(task.workdir)