/* * MG 动能排版 · 40s · v6 AE 2022 / ExtendScript * 1920x1080 / 30fps / 1200 帧 / 27 个镜头 * 依据参考片节奏重做:平均 1.5s 一切,每屏 8-20 个文字元素 * 元素:字墙 / 胶囊条 / 圆环字 / 动能字母 / 棋盘带 / 弹簧线圈 / 半调网 * 文案全部自拟 * [fix1] kf() 缓动改为按属性实际维度自动匹配 + 异常兜底(修复 setTemporalEaseAtKey 报错) */ (function mgV6() { var C = { black:"0D0D0D", white:"FFFFFF", orange:"F2500A", blue:"1B3AF0", cream:"F3EDE4", pink:"F2C9C0" }; var CFG = { compName:"MG_MOTION_FINAL", width:1920, height:1080, fps:30, duration:40 }; var END = 1200; var FONTS = ["Arial-BoldMT","Arial-Bold","HelveticaNeue-Bold","Inter-Bold", "MicrosoftYaHei-Bold","SimHei","PingFangSC-Semibold","MyriadPro-Bold"]; function rgb(h){ h=String(h).replace("#",""); return [parseInt(h.substr(0,2),16)/255, parseInt(h.substr(2,2),16)/255, parseInt(h.substr(4,2),16)/255]; } function rgba(h){ var c=rgb(h); c.push(1); return c; } function T(f){ return f/CFG.fps; } function tg(l){ return l.property("ADBE Transform Group"); } function P(l){ return tg(l).property("ADBE Position"); } function S(l){ return tg(l).property("ADBE Scale"); } function A(l){ return tg(l).property("ADBE Anchor Point"); } function O(l){ return tg(l).property("ADBE Opacity"); } function R(l){ return tg(l).property("ADBE Rotate Z"); } // ---- 缓动 ---- function kf(prop, frame, value, inf) { prop.setValueAtTime(T(frame), value); var i = prop.nearestKeyIndex(T(frame)); if (!i || i < 1) { return i; } try { prop.setInterpolationTypeAtKey(i, KeyframeInterpolationType.BEZIER, KeyframeInterpolationType.BEZIER); } catch (e0) {} var spd = (inf === undefined || inf === null) ? 50 : inf; var n = 1; try { var pv = prop.value; if (pv && typeof pv.length === 'number' && pv.length > 0) { n = pv.length; } } catch (e1) {} var dims = [n, 2, 3, 1], t, done = false; for (t = 0; t < dims.length && !done; t++) { var k = dims[t], ei = [], eo = [], d; for (d = 0; d < k; d++) { ei.push(new KeyframeEase(0, spd)); eo.push(new KeyframeEase(0, spd)); } try { prop.setTemporalEaseAtKey(i, ei, eo); done = true; } catch (e2) {} } return i; } function lin(prop, frame, value) { prop.setValueAtTime(T(frame), value); var i = prop.nearestKeyIndex(T(frame)); prop.setInterpolationTypeAtKey(i, KeyframeInterpolationType.LINEAR, KeyframeInterpolationType.LINEAR); return i; } // ---- 基础元素 ---- function solid(hex, name, t0, t1) { var s = comp.layers.addSolid(rgb(hex), name, CFG.width, CFG.height, 1); s.inPoint = T(t0); s.outPoint = T(t1 === undefined ? END : t1); return s; } function txt(str, size, hex, x, y, align, t0, t1, mode) { var l = comp.layers.addText(str); l.inPoint = T(t0); l.outPoint = T(t1); var src = l.property("ADBE Text Properties").property("ADBE Text Document"); var td = src.value; td.text = str; td.fontSize = size; td.fillColor = rgb(hex); if (mode === "stroke") { td.applyFill = false; td.applyStroke = true; td.strokeColor = rgb(hex); td.strokeWidth = Math.max(1.2, size * 0.014); } else { td.applyFill = true; td.applyStroke = false; } td.justification = (align === "center") ? ParagraphJustification.CENTER_JUSTIFY : ParagraphJustification.LEFT_JUSTIFY; for (var f = 0; f < FONTS.length; f++) { try { td.font = FONTS[f]; break; } catch (eF) {} } src.setValue(td); try { var r = l.sourceRectAtTime(l.inPoint, false); if (r && r.width > 0) { if (align === "center") A(l).setValue([r.left + r.width/2, r.top + r.height/2]); else A(l).setValue([r.left, r.top + r.height/2]); } } catch (e2) {} P(l).setValue([x, y]); return l; } function shape(name, t0, t1) { var l = comp.layers.addShape(); l.name = name; l.inPoint = T(t0); l.outPoint = T(t1); return l; } function grp(layer, name) { var g = layer.property("ADBE Root Vectors Group").addProperty("ADBE Vector Group"); g.name = name; return g; } function ct(g) { return g.property("ADBE Vectors Group"); } function addRect(g, x, y, w, h, round) { var r = ct(g).addProperty("ADBE Vector Shape - Rect"); r.property("ADBE Vector Rect Size").setValue([w, h]); r.property("ADBE Vector Rect Position").setValue([x, y]); if (round) { try { r.property("ADBE Vector Rect Roundness").setValue(round); } catch (e) {} } } function addEll(g, x, y, w, h) { var e = ct(g).addProperty("ADBE Vector Shape - Ellipse"); e.property("ADBE Vector Ellipse Size").setValue([w, h]); e.property("ADBE Vector Ellipse Position").setValue([x, y]); } function addLine(g, x1, y1, x2, y2) { var p = ct(g).addProperty("ADBE Vector Shape - Group"); var sh = new Shape(); sh.vertices = [[x1,y1],[x2,y2]]; sh.closed = false; p.property("ADBE Vector Shape").setValue(sh); } function fill(g, hex) { ct(g).addProperty("ADBE Vector Graphic - Fill").property("ADBE Vector Fill Color").setValue(rgba(hex)); } function stroke(g, hex, w) { var s = ct(g).addProperty("ADBE Vector Graphic - Stroke"); s.property("ADBE Vector Stroke Color").setValue(rgba(hex)); s.property("ADBE Vector Stroke Width").setValue(w); } // ---- 复合构件 ---- function capsule(hex, x, y, w, h, ang, t0, t1) { var l = shape("CAPS", t0, t1), g = grp(l, "c"); addRect(g, 0, 0, w, h, h/2); fill(g, hex); P(l).setValue([x, y]); R(l).setValue(ang); l.motionBlur = true; return l; } function ring(hex, x, y, d, w, t0, t1) { var l = shape("RING", t0, t1), g = grp(l, "c"); addEll(g, 0, 0, d, d); stroke(g, hex, w); P(l).setValue([x, y]); return l; } function boxOutline(hex, x, y, w, h, sw, t0, t1) { var l = shape("BOX", t0, t1), g = grp(l, "b"); addRect(g, 0, 0, w, h); stroke(g, hex, sw); P(l).setValue([x, y]); return l; } function checkBand(y, cell, rows, t0, t1, dir) { var l = shape("CHECK", t0, t1), g = grp(l, "k"); var c, r; for (r = 0; r < rows; r++) { for (c = 0; c < 20; c++) { if ((r + c) % 2 === 0) addRect(g, -1000 + c*cell*2, r*cell, cell, cell); } } fill(g, C.white); P(l).setValue([960, y]); if (dir !== 0) { kf(P(l), t0, [960, y], 60); kf(P(l), t1, [960 + dir, y], 60); } return l; } function dotRow(y, n, size, gap, hex, x0, x1, t0, t1) { var l = shape("DOTS", t0, t1), g = grp(l, "d"), i; for (i = 0; i < n; i++) addEll(g, i*gap, 0, size, size); fill(g, hex); P(l).setValue([x0, y]); lin(P(l), t0, [x0, y]); lin(P(l), t1, [x1, y]); l.motionBlur = true; return l; } function halftone(x, y, cols, rows, gap, size, hex, t0, t1) { var l = shape("HALF", t0, t1), g = grp(l, "h"), i, j; for (i = 0; i < cols; i++) for (j = 0; j < rows; j++) addEll(g, i*gap, j*gap, size, size); fill(g, hex); P(l).setValue([x, y]); return l; } function coil(x, y, count, d, hex, t0, t1) { var l = shape("COIL", t0, t1), g = grp(l, "c"), i; for (i = 0; i < count; i++) addEll(g, i*14, 0, d, d*2.6); stroke(g, hex, 4); P(l).setValue([x, y]); return l; } // 字墙:rows x cols 重复词,实心/描边交替 function typeWall(word, cols, rows, size, x0, y0, dx, dy, t0, t1, hex) { var r, c, mode; for (r = 0; r < rows; r++) { for (c = 0; c < cols; c++) { mode = ((r + c) % 2 === 0) ? "solid" : "stroke"; txt(word, size, hex, x0 + c*dx, y0 + r*dy, "center", t0, t1, mode); } } } // 圆环排字 function ringWords(words, cx, cy, radius, size, hex, t0, t1) { var i, ang, rad, l; for (i = 0; i < words.length; i++) { ang = i * (360 / words.length); rad = ang * Math.PI / 180; l = txt(words[i], size, hex, cx + Math.sin(rad)*radius, cy - Math.cos(rad)*radius, "center", t0, t1); R(l).setValue(ang); S(l).setValue([0, 0]); kf(S(l), t0 + i*2, [0, 0], 70); kf(S(l), t0 + i*2 + 8, [108, 108], 70); kf(S(l), t0 + i*2 + 14, [100, 100], 70); } } // 持续横向滚动的细字带 function ticker(y, text, t0, t1, hex, size) { var l = txt(text, size, hex, 0, y, "left", t0, t1); P(l).setValue([2000, y]); lin(P(l), t0, [2000, y]); lin(P(l), t1, [-2800, y]); l.motionBlur = true; return l; } // 四角小字角标:参考片里到处散着 AIGC / C4D / AE 这类小标签 function tags(t0, t1, list) { var slots = [[150, 70], [1770, 70], [150, 1010], [1770, 1010]]; var i, l; for (i = 0; i < list.length && i < 4; i++) { l = txt(list[i], 22, C.white, slots[i][0], slots[i][1], "center", t0, t1); O(l).setValue(65); } } // 一行小字重复铺满 function captionStrip(y, word, t0, t1, hex) { var str = word + " / " + word + " / " + word + " / " + word; return txt(str, 30, hex, 120, y, "left", t0, t1); } // 闪切插入:8 帧全屏色块 + 单词,用来打断均匀节奏 function flash(t0, t1, hex, word, tcol) { solid(hex, "FLASH", t0, t1); var l = txt(word, 260, tcol || C.black, 960, 540, "center", t0, t1); S(l).setValue([140, 140]); kf(S(l), t0, [140, 140], 70); kf(S(l), t1, [100, 100], 70); } // 棋盘字母拼贴:4 色方块打底,字母压在格子上(参考片后段主视觉) function checkerCollage(word, t0, t1, tile) { var cols = 16, rows = 9, r, c, k, pi; var palette = [C.white, C.black, C.orange, C.blue]; var layer = shape("COLLAGE", t0, t1), g; for (pi = 0; pi < 4; pi++) { g = grp(layer, "t" + pi); for (r = 0; r < rows; r++) { for (c = 0; c < cols; c++) { if (((r * 31 + c * 17) % 7) % 4 === pi) { addRect(g, -960 + tile/2 + c*tile, -540 + tile/2 + r*tile, tile, tile); } } } fill(g, palette[pi]); } P(layer).setValue([960, 540]); var n = word.length, rw; for (rw = 0; rw < 5; rw++) { for (k = 0; k < n; k++) { txt(word.charAt(k), tile * 0.78, ((k + rw) % 2 === 0) ? C.black : C.white, 960 + (k - (n - 1) / 2) * tile + (rw % 2 ? tile * 0.5 : 0), 540 + (rw - 2) * tile, "center", t0, t1); } } return layer; } // 描边大字墙:巨大的空心字叠 4 行,压在人脸后面 function outlineField(word, rows, size, t0, t1, hex) { var r, y; for (r = 0; r < rows; r++) { y = 220 + r * (size * 0.92); txt(word, size, hex, 960, y, "center", t0, t1, "stroke"); } } // 斜向色带墙:8-10 条平行带同时飞,速度不同做出视差 function bandWall(t0, t1) { var words = ["KEEP IT MOVING", "TYPE / FORM / TIME", "STUDY 01", "SIGNAL", "BEAT", "RHYTHM", "FRAME", "LOOP", "CUT", "NOISE"]; var i, y, l, str, mode, spd; for (i = 0; i < 14; i++) { y = -560 + i * 96; if (i % 3 === 1) { l = shape("HATCH" + i, t0, t1); var gh = grp(l, "h"); var q; for (q = 0; q < 26; q++) addLine(gh, -1200 + q * 110, 40, -1140 + q * 110, -40); stroke(gh, C.white, 2); P(l).setValue([960, y]); R(l).setValue(-12); kf(P(l), t0, [960 + 700, y], 55); kf(P(l), t1, [960 - 700, y], 55); l.motionBlur = true; } else { str = words[i % words.length]; mode = (i % 4 === 0) ? "stroke" : "solid"; l = txt(str + " " + str + " " + str + " " + str, 62, (i % 5 === 0) ? C.orange : C.white, 0, y, "left", t0, t1, mode); R(l).setValue(-12); spd = 900 + (i % 4) * 320; P(l).setValue([2600 + i * 60, y]); lin(P(l), t0, [2600 + i * 60, y]); lin(P(l), t1, [2600 - spd * (t1 - t0) / CFG.fps, y]); l.motionBlur = true; } } dotRow(-300, 18, 22, 190, C.blue, -200, 2000, t0, t1); dotRow(360, 14, 22, 250, C.orange, 2000, -200, t0, t1); } // 表情:圆环 + 双眼 + 撇嘴 function face(x, y, d, hex, t0, t1) { var l = shape("FACE", t0, t1), g; g = grp(l, "ring"); addEll(g, 0, 0, d, d); stroke(g, hex, 9); g = grp(l, "eyeL"); addEll(g, -d*0.22, -d*0.14, d*0.09, d*0.09); fill(g, hex); g = grp(l, "eyeR"); addEll(g, d*0.22, -d*0.14, d*0.09, d*0.09); fill(g, hex); g = grp(l, "mouth"); addLine(g, -d*0.24, d*0.18, -d*0.08, d*0.26); addLine(g, -d*0.08, d*0.26, d*0.08, d*0.26); addLine(g, d*0.08, d*0.26, d*0.24, d*0.18); stroke(g, hex, 9); P(l).setValue([x, y]); return l; } app.beginUndoGroup("MG FINAL 自动搭建"); var comp; try { comp = app.project.items.addComp(CFG.compName, CFG.width, CFG.height, 1, CFG.duration, CFG.fps); comp.bgColor = rgb(C.black); comp.motionBlur = true; // 强机:全程运动模糊 var i, g, l; // ===== 常驻层 ===== solid(C.black, "BG", 0, END); var grid = shape("GRID", 0, END); g = grp(grid, "l"); for (i = -960; i <= 960; i += 72) addLine(g, i, -540, i, 540); for (i = -540; i <= 540; i += 72) addLine(g, -960, i, 960, i); stroke(g, C.white, 1); P(grid).setValue([960, 540]); S(grid).setValue([100, 100]); lin(S(grid), 0, [100, 100]); lin(S(grid), END, [107, 107]); kf(O(grid), 0, 0, 70); kf(O(grid), 24, 16, 70); // ===== 镜头表:时长按实测节奏混排,末段 141 帧定格 ===== var t = 0; var cut = function (d) { var s = t; t += d; return [s, t]; }; // 01 START var r = cut(40); boxOutline(C.white, 960, 720, 360, 84, 3, r[0], r[1]); txt("START", 40, C.white, 960, 720, "center", r[0]+2, r[1]); txt("STUDY / 01", 24, C.white, 960, 800, "center", r[0]+6, r[1]); tags(r[0], r[1], ["AE 2022", "JSX"]); // 02 奶白卡 r = cut(45); var c1 = solid(C.cream, "CARD", r[0], r[1]); A(c1).setValue([960, 1080]); lin(P(c1), r[0], [960, 2160]); kf(P(c1), r[0]+12, [960, 1080], 74); lin(P(c1), r[1], [960, 0]); boxOutline(C.black, 900, 500, 640, 110, 4, r[0], r[1]); txt("FIRST FRAME", 56, C.black, 900, 500, "center", r[0]+6, r[1]); txt("A", 620, C.blue, 1540, 560, "center", r[0]+8, r[1]); // 03 MOTION 巨字 r = cut(40); solid(C.cream, "CARD2", r[0], r[1]); txt("MOTION", 330, C.orange, 990, 572, "center", r[0], r[1]); var hm = txt("MOTION", 330, C.black, 960, 540, "center", r[0], r[1]); S(hm).setValue([88, 88]); kf(S(hm), r[0], [88, 88], 64); kf(S(hm), r[0]+18, [100, 100], 64); var sk1 = capsule(C.orange, 960, 470, 1500, 12, -4, r[0]+2, r[1]); S(sk1).setValue([0, 100]); kf(S(sk1), r[0]+2, [0, 100], 66); kf(S(sk1), r[0]+16, [100, 100], 66); var sk2 = capsule(C.orange, 960, 640, 1500, 12, -4, r[0]+6, r[1]); S(sk2).setValue([0, 100]); kf(S(sk2), r[0]+6, [0, 100], 66); kf(S(sk2), r[0]+22, [100, 100], 66); // 04 闪切 r = cut(3); flash(r[0], r[1], C.orange, "CUT", C.black); // 05 圆环排字 r = cut(45); var rc = ring(C.blue, 960, 540, 420, 10, r[0], r[1]); S(rc).setValue([0, 0]); kf(S(rc), r[0], [0, 0], 70); kf(S(rc), r[0]+16, [100, 100], 70); ringWords(["TYPE","FORM","TIME","BEAT","CUT","LOOP","GRID","SIGNAL", "NOISE","FRAME","KEEP","MOVE"], 960, 540, 330, 54, C.white, r[0]+4, r[1]); txt("01", 120, C.blue, 960, 540, "center", r[0]+12, r[1]); ticker(950, "TYPE / FORM / TIME / BEAT / CUT / LOOP / GRID / SIGNAL", r[0], r[1], C.cream, 32); tags(r[0], r[1], ["KEYFRAME", "EASE"]); // 06 SIGNAL 色差 r = cut(30); txt("SIGNAL", 360, C.orange, 980, 554, "center", r[0], r[1]); var sg = txt("SIGNAL", 360, C.white, 960, 540, "center", r[0], r[1]); kf(P(sg), r[0], [960, 540], 62); kf(P(sg), r[1], [926, 564], 62); var sl = capsule(C.orange, 960, 300, 1700, 10, 2, r[0]+4, r[1]); S(sl).setValue([0, 100]); kf(S(sl), r[0]+4, [0, 100], 66); kf(S(sl), r[0]+18, [100, 100], 66); // 07 闪切 r = cut(2); flash(r[0], r[1], C.blue, "GO", C.white); // 08 打字 r = cut(40); solid(C.cream, "CARD3", r[0], r[1]); txt("MAKE IT", 150, C.black, 200, 450, "left", r[0]+4, r[1]); txt("MOVE", 150, C.black, 200, 620, "left", r[0]+10, r[1]); var cur = capsule(C.blue, 1160, 620, 14, 150, 0, r[0]+4, r[1]); O(cur).setValue(100); kf(O(cur), r[0]+5, 100, 50); kf(O(cur), r[0]+11, 0, 50); kf(O(cur), r[0]+17, 100, 50); kf(O(cur), r[0]+23, 0, 50); kf(O(cur), r[0]+29, 100, 50); // 09 橙方块 r = cut(40); var sq = solid(C.orange, "SQ", r[0], r[1]); A(sq).setValue([960, 540]); S(sq).setValue([86, 86]); kf(S(sq), r[0], [86, 86], 66); kf(S(sq), r[0]+16, [100, 100], 66); var cm = shape("CROP", r[0], r[1]); g = grp(cm, "c"); addLine(g, -360, -260, -300, -260); addLine(g, -360, -260, -360, -200); addLine(g, 360, -260, 300, -260); addLine(g, 360, -260, 360, -200); addLine(g, -360, 260, -300, 260); addLine(g, -360, 260, -360, 200); addLine(g, 360, 260, 300, 260); addLine(g, 360, 260, 360, 200); stroke(g, C.black, 4); P(cm).setValue([960, 540]); ring(C.black, 960, 540, 420, 8, r[0], r[1]); txt("01", 210, C.black, 960, 540, "center", r[0]+6, r[1]); txt("AE 2022 / JSX", 26, C.black, 960, 960, "center", r[0]+10, r[1]); // 10 棋盘带 + 胶囊 r = cut(45); checkBand(400, 60, 2, r[0], r[1], 700); checkBand(760, 60, 2, r[0], r[1], -700); var cp = capsule(C.blue, 960, 470, 900, 170, -7, r[0], r[1]); P(cp).setValue([-700, 470]); kf(P(cp), r[0], [-700, 470], 66); kf(P(cp), r[0]+18, [960, 470], 66); dotRow(620, 40, 14, 34, C.white, -200, 1900, r[0]+3, r[1]); txt("RHYTHM", 110, C.cream, 960, 470, "center", r[0]+14, r[1]); // 11 CUT r = cut(35); var cw = txt("CUT", 430, C.white, 960, 540, "center", r[0], r[1]); S(cw).setValue([130, 130]); kf(S(cw), r[0], [130, 130], 64); kf(S(cw), r[0]+16, [100, 100], 64); checkBand(130, 54, 2, r[0], r[1], 450); checkBand(950, 54, 2, r[0], r[1], -450); capsule(C.orange, 420, 260, 300, 90, -10, r[0]+2, r[1]); capsule(C.blue, 1500, 300, 260, 90, 8, r[0]+4, r[1]); // 12 闪切 r = cut(4); flash(r[0], r[1], C.cream, "GO", C.black); // 13 BEAT + 弧 r = cut(40); txt("BEAT", 300, C.cream, 960, 560, "center", r[0], r[1]); var arc = ring(C.orange, 960, 560, 760, 26, r[0], r[1]); kf(R(arc), r[0], 0, 60); kf(R(arc), r[1], 24, 60); capsule(C.orange, 960, 830, 760, 60, -3, r[0]+3, r[1]); captionStrip(1000, "RHYTHM", r[0], r[1], C.cream); ticker(120, "RHYTHM / FRAME / LOOP / CUT / NOISE / SIGNAL / GRID", r[0], r[1], C.cream, 30); // 14 分屏 r = cut(45); var tb = solid(C.blue, "TOP", r[0], r[1]); A(tb).setValue([960, 540]); S(tb).setValue([100, 50]); P(tb).setValue([960, 270]); var bo = solid(C.orange, "BOT", r[0], r[1]); A(bo).setValue([960, 540]); S(bo).setValue([100, 50]); P(bo).setValue([960, 810]); var w1 = txt("ONE", 260, C.white, 960, 270, "center", r[0]+2, r[1]); P(w1).setValue([-400, 270]); kf(P(w1), r[0]+2, [-400, 270], 68); kf(P(w1), r[0]+20, [960, 270], 68); var w2 = txt("BEAT", 260, C.cream, 960, 810, "center", r[0]+6, r[1]); P(w2).setValue([2400, 810]); kf(P(w2), r[0]+6, [2400, 810], 68); kf(P(w2), r[0]+24, [960, 810], 68); // 15 面板 + 线圈 r = cut(40); var pn = ["LOOP","NOISE","CUT","SET"], pc = [C.white, C.blue, C.white, C.orange]; for (i = 0; i < 4; i++) { var pb = solid(i % 2 === 0 ? C.black : C.cream, "PANEL" + i, r[0], r[1]); A(pb).setValue([960, 540]); S(pb).setValue([100, 25]); P(pb).setValue([960, 135 + i * 270]); txt(pn[i], 92, pc[i], 300, 135 + i * 270, "left", r[0]+3 + i*5, r[1]); } coil(1180, 540, 22, 30, C.white, r[0]+5, r[1]); boxOutline(C.orange, 1650, 540, 220, 90, 4, r[0], r[1]); txt("AE", 54, C.orange, 1650, 540, "center", r[0]+7, r[1]); // 16 棋盘拼贴 A r = cut(45); checkerCollage("BEAT", r[0], r[1], 120); capsule(C.blue, 960, 540, 2100, 34, -12, r[0]+6, r[1]); // 17 闪切 r = cut(2); flash(r[0], r[1], C.orange, "", C.white); // 18 描边字墙 + 表情 r = cut(45); outlineField("RHYTHM", 4, 300, r[0], r[1], C.cream); face(1420, 540, 420, C.orange, r[0]+3, r[1]); txt("NO RUSH", 64, C.orange, 300, 940, "left", r[0]+9, r[1]); // 19 动能字母 r = cut(40); var lt = ["M","O","T","I","O","N"]; var ps6 = [[300,300],[-260,120],[420,-180],[-380,-240],[180,420],[-120,360]]; for (i = 0; i < 6; i++) { var kl = txt(lt[i], 300, C.white, 960 + ps6[i][0], 540 + ps6[i][1], "center", r[0], r[1]); S(kl).setValue([0, 0]); kf(S(kl), r[0] + i*3, [0, 0], 72); kf(S(kl), r[0] + 10 + i*3, [106, 106], 72); kf(S(kl), r[0] + 18 + i*3, [100, 100], 72); R(kl).setValue((i % 2 === 0) ? 8 : -8); } capsule(C.orange, 1450, 260, 420, 70, -30, r[0]+4, r[1]); ticker(1010, "MOTION / MOTION / MOTION / MOTION / MOTION", r[0], r[1], C.white, 30); // 20 白页 TO r = cut(35); solid(C.cream, "WP1", r[0], r[1]); txt("TO", 460, C.blue, 520, 540, "center", r[0]+4, r[1]); halftone(1180, 300, 12, 12, 34, 12, C.black, r[0], r[1]); txt("KEEP IT MOVING", 40, C.black, 520, 860, "center", r[0]+12, r[1]); txt("SECTION 01", 22, C.black, 120, 120, "center", r[0]+2, r[1]); txt("MOTION STUDY", 22, C.black, 1800, 120, "center", r[0]+2, r[1]); // 21 白页 AE r = cut(35); solid(C.cream, "WP2", r[0], r[1]); txt("AE", 620, C.orange, 960, 540, "center", r[0]+3, r[1]); txt("2022", 48, C.black, 960, 900, "center", r[0]+8, r[1]); dotRow(120, 30, 10, 40, C.black, -100, 1500, r[0]+2, r[1]); txt("TYPE / FORM / TIME", 26, C.black, 960, 660, "center", r[0]+6, r[1]); txt("02", 22, C.black, 120, 120, "center", r[0]+2, r[1]); // 22 棋盘拼贴 B r = cut(40); checkerCollage("RHYTHM", r[0], r[1], 110); tags(r[0], r[1], ["MOTION", "GRID"]); // 23 十条斜带 r = cut(45); bandWall(r[0], r[1]); // 24 黑带文字 r = cut(45); var bds = [[300, "WHAT MATTERS"], [540, "IS THE RHYTHM"], [780, "NOT THE TOOL"]]; for (i = 0; i < 3; i++) { var bd = solid(C.black, "BAND" + i, r[0], r[1]); A(bd).setValue([960, 540]); S(bd).setValue([100, 12]); P(bd).setValue([960, bds[i][0]]); var bw = txt(bds[i][1], 84, i === 1 ? C.orange : C.white, 140, bds[i][0], "left", r[0]+3+i*7, r[1]); P(bw).setValue([-800, bds[i][0]]); kf(P(bw), r[0]+3+i*7, [-800, bds[i][0]], 66); kf(P(bw), r[0]+23+i*7, [140, bds[i][0]], 66); } // 25 主句 r = cut(40); txt("WHAT MATTERS", 120, C.white, 960, 430, "center", r[0]+4, r[1]); var mw = txt("IS THE RHYTHM", 120, C.blue, 960, 590, "center", r[0]+8, r[1]); S(mw).setValue([92, 92]); kf(S(mw), r[0]+8, [92, 92], 66); kf(S(mw), r[0]+26, [100, 100], 66); capsule(C.orange, 960, 700, 900, 10, 0, r[0]+12, r[1]); capsule(C.orange, 960, 716, 900, 10, 0, r[0]+18, r[1]); ticker(860, "IS THE RHYTHM / IS THE RHYTHM / IS THE RHYTHM", r[0], r[1], C.white, 28); // 26 闪切 r = cut(3); flash(r[0], r[1], C.white, "01", C.black); // 27 巨号 01 r = cut(40); var b1 = txt("01", 800, C.white, 960, 540, "center", r[0], r[1]); S(b1).setValue([130, 130]); kf(S(b1), r[0], [130, 130], 64); kf(S(b1), r[0]+22, [100, 100], 64); kf(S(b1), r[1], [250, 250], 64); O(b1).setValue(100); kf(O(b1), r[1]-10, 100, 60); kf(O(b1), r[1], 0, 60); capsule(C.orange, 960, 540, 8, 620, 0, r[0]+2, r[1]); // 28 白卡字母 r = cut(40); solid(C.cream, "WP3", r[0], r[1]); var lx = [-360, -120, 120, 360], lc2 = ["T","I","M","E"]; for (i = 0; i < 4; i++) { var ch = txt(lc2[i], 400, i === 2 ? C.orange : C.black, 960 + lx[i], 540, "center", r[0], r[1]); S(ch).setValue([50, 50]); kf(S(ch), r[0]+5+i*6, [50, 50], 72); kf(S(ch), r[0]+15+i*6, [110, 110], 72); kf(S(ch), r[0]+23+i*6, [100, 100], 72); } // 29 橙底圆盘 r = cut(35); solid(C.orange, "BGO", r[0], r[1]); var dc = shape("DISC", r[0], r[1]); g = grp(dc, "c"); addEll(g, 0, 0, 780, 780); fill(g, C.white); P(dc).setValue([960, 540]); S(dc).setValue([0, 0]); kf(S(dc), r[0]+2, [0, 0], 70); kf(S(dc), r[0]+24, [100, 100], 70); txt("MOVE", 200, C.black, 960, 540, "center", r[0]+16, r[1]); // 30 半调 + STUDY r = cut(35); halftone(1240, 200, 12, 10, 46, 18, C.white, r[0], r[1]); var sw = txt("STUDY", 240, C.white, 220, 520, "left", r[0]+3, r[1]); P(sw).setValue([-400, 520]); kf(P(sw), r[0]+3, [-400, 520], 68); kf(P(sw), r[0]+20, [220, 520], 68); txt("01 / 40S", 44, C.orange, 220, 660, "left", r[0]+14, r[1]); // 31 落句 r = cut(40); txt("MAKE IT MOVE", 200, C.cream, 140, 520, "left", r[0]+3, r[1]); boxOutline(C.orange, 1520, 760, 300, 100, 5, r[0]+5, r[1]); txt("JSX", 54, C.orange, 1520, 760, "center", r[0]+10, r[1]); checkBand(940, 46, 1, r[0], r[1], -520); // 32 定格收尾(实测原片最后 5 秒完全静止) r = cut(141); txt("MOTION STUDY 01", 110, C.white, 960, 500, "center", r[0]+6, r[1]); txt("AE 2022 / 30FPS / 40S", 34, C.orange, 960, 600, "center", r[0]+10, r[1]); txt("MOTION STUDY", 22, C.white, 960, 1000, "center", r[0]+14, r[1]); // 所有图层打开运动模糊(强机) for (i = 1; i <= comp.numLayers; i++) { comp.layer(i).motionBlur = true; } comp.openInViewer(); alert("搭建完成:" + CFG.compName + "\n40 秒 / 32 个镜头 / 末段 4.7 秒定格"); } catch (err) { alert("脚本出错(第 " + err.line + " 行):\n" + err.toString()); } app.endUndoGroup(); })();