@bylqwjc/media-editor-server 1.0.18 → 1.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/dist/browser.cjs +1 -1
- package/core/dist/browser.js +2 -2
- package/core/dist/chunk-MGKYVYOH.js +1 -1
- package/core/dist/chunk-USY6UDGL.js +1 -1
- package/core/dist/engine.cjs +1 -1
- package/core/dist/index.cjs +1 -1
- package/core/dist/index.js +1 -1
- package/core/package.json +1 -1
- package/core/zod/index.cjs +1 -1
- package/core/zod/v3/errors.cjs +1 -1
- package/core/zod/v3/helpers/errorUtil.cjs +1 -1
- package/core/zod/v3/helpers/errorUtil.js +1 -1
- package/core/zod/v3/helpers/parseUtil.js +1 -1
- package/core/zod/v3/helpers/util.cjs +1 -1
- package/core/zod/v3/helpers/util.js +1 -1
- package/core/zod/v3/index.cjs +1 -1
- package/core/zod/v3/locales/en.js +1 -1
- package/core/zod/v3/types.cjs +1 -1
- package/core/zod/v3/types.js +1 -1
- package/dist/adapters/express.cjs +1 -1
- package/dist/adapters/express.js +1 -1
- package/dist/adapters/web.cjs +1 -1
- package/dist/index.cjs +4 -4
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/core/dist/browser.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var v=Math.PI/180;function y(t,e,a){t.strokeStyle=e,t.lineWidth=a,t.lineCap="round",t.lineJoin="round"}function $(t,e,a,n,r,o){const i=Math.atan2(r-a,n-e),c=Math.max(12,o*3.5);t.beginPath(),t.moveTo(n,r),t.lineTo(n-c*Math.cos(i-Math.PI/7),r-c*Math.sin(i-Math.PI/7)),t.moveTo(n,r),t.lineTo(n-c*Math.cos(i+Math.PI/7),r-c*Math.sin(i+Math.PI/7)),t.stroke()}function b(t){if(!Number.isFinite(t))return 0;let e=t%360;return e>180&&(e-=360),e<-180&&(e+=360),Math.abs(e)<.001?0:e}function m(t){return b(t.rotation??0)}function k(t){switch(t.type){case"pen":{let e=1/0,a=1/0,n=-1/0,r=-1/0;for(let o=0;o<t.points.length;o+=2)e=Math.min(e,t.points[o]),n=Math.max(n,t.points[o]),a=Math.min(a,t.points[o+1]),r=Math.max(r,t.points[o+1]);return{x:e,y:a,w:n-e,h:r-a}}case"line":case"arrow":return{x:Math.min(t.x1,t.x2),y:Math.min(t.y1,t.y2),w:Math.abs(t.x2-t.x1),h:Math.abs(t.y2-t.y1)};case"rect":case"ellipse":case"sticker":return{x:t.x,y:t.y,w:t.w,h:t.h};case"text":return{x:t.x,y:t.y,w:t.text.length*t.fontSize*.6,h:t.fontSize*1.2}}}function g(t){const e=k(t);return{x:e.x+e.w/2,y:e.y+e.h/2}}function A(t,e,a,n,r){const o=r*v,i=Math.cos(o),c=Math.sin(o),h=t-a,s=e-n;return{x:a+h*i-s*c,y:n+h*c+s*i}}function S(t,e,a,n,r){return{x:a+(t-a)*r,y:n+(e-n)*r}}function P(t,e,a){const n=m(e);if(n){const r=g(e);t.save(),t.translate(r.x,r.y),t.rotate(n*v),t.translate(-r.x,-r.y),T(t,e,a),t.restore();return}T(t,e,a)}function T(t,e,a){switch(e.type){case"pen":{y(t,e.color,e.width),t.beginPath(),t.moveTo(e.points[0],e.points[1]);for(let n=2;n<e.points.length;n+=2)t.lineTo(e.points[n],e.points[n+1]);t.stroke();break}case"line":case"arrow":{y(t,e.color,e.width),t.beginPath(),t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2),t.stroke(),e.type==="arrow"&&$(t,e.x1,e.y1,e.x2,e.y2,e.width);break}case"rect":{y(t,e.color,e.width),t.strokeRect(e.x,e.y,e.w,e.h);break}case"ellipse":{y(t,e.color,e.width),t.beginPath(),t.ellipse(e.x+e.w/2,e.y+e.h/2,Math.abs(e.w/2),Math.abs(e.h/2),0,0,Math.PI*2),t.stroke();break}case"text":{t.fillStyle=e.color,t.font=`bold ${e.fontSize}px -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif`,t.textBaseline="top",t.strokeStyle="rgba(0,0,0,0.45)",t.lineWidth=Math.max(2,e.fontSize/16),t.lineJoin="round",t.strokeText(e.text,e.x,e.y),t.fillText(e.text,e.x,e.y);break}case"sticker":{if(e.emoji)t.font=`${Math.min(e.w,e.h)}px -apple-system, "Apple Color Emoji", "Segoe UI Emoji", sans-serif`,t.textBaseline="top",t.fillText(e.emoji,e.x,e.y);else if(e.src){const n=a?.get(e.src);n&&t.drawImage(n,e.x,e.y,e.w,e.h)}break}}}function M(t,e,a){for(const n of e)P(t,n,a)}async function E(t){const e=new Map,a=[...new Set(t.filter(n=>n.type==="sticker"&&n.src).map(n=>n.src))];return await Promise.all(a.map(n=>new Promise(r=>{const o=new Image;o.onload=()=>{e.set(n,o),r()},o.onerror=()=>r(),o.src=n}))),e}async function F(t,e,a){if(!t?.length)return null;const n=document.createElement("canvas");n.width=e,n.height=a;const r=n.getContext("2d");if(!r)return null;const o=await E(t);return M(r,t,o),new Promise(i=>n.toBlob(c=>i(c),"image/png"))}function D(t,e,a,n=12){for(let r=t.length-1;r>=0;r--){const o=t[r];if(R(o,e,a,n))return r}return-1}function N(t,e,a,n,r){return Math.abs(t-a)<=r&&Math.abs(e-n)<=r}function C(t,e,a,n,r,o,i){const c=r-a,h=o-n,s=c*c+h*h||1,u=Math.max(0,Math.min(1,((t-a)*c+(e-n)*h)/s)),l=a+u*c,x=n+u*h;return(t-l)**2+(e-x)**2<=i*i}function R(t,e,a,n){const r=m(t);if(r){const o=g(t),i=A(e,a,o.x,o.y,-r);return I(t,i.x,i.y,n)}return I(t,e,a,n)}function I(t,e,a,n){switch(t.type){case"pen":{for(let r=0;r+3<t.points.length;r+=2)if(C(e,a,t.points[r],t.points[r+1],t.points[r+2],t.points[r+3],n+t.width/2))return!0;return!1}case"line":case"arrow":return C(e,a,t.x1,t.y1,t.x2,t.y2,n+t.width/2);case"rect":case"ellipse":return e>=t.x-n&&e<=t.x+t.w+n&&a>=t.y-n&&a<=t.y+t.h+n;case"text":return e>=t.x-n&&e<=t.x+t.text.length*t.fontSize*.6+n&&a>=t.y-n&&a<=t.y+t.fontSize+n;case"sticker":return N(e,a,t.x+t.w/2,t.y+t.h/2,Math.max(t.w,t.h)/2+n)}}function _(t,e,a){const n=Math.max(8,a);if(!(t>0)||!(e>0))return{w:n,h:n};const r=n/Math.max(t,e);return{w:Math.max(8,Math.round(t*r)),h:Math.max(8,Math.round(e*r))}}function J(t,e){const a=Math.max(.05,e),n=g(t);switch(t.type){case"pen":return{...t,points:t.points.map((r,o)=>o%2===0?n.x+(r-n.x)*a:n.y+(r-n.y)*a)};case"line":case"arrow":{const r=S(t.x1,t.y1,n.x,n.y,a),o=S(t.x2,t.y2,n.x,n.y,a);return{...t,x1:r.x,y1:r.y,x2:o.x,y2:o.y}}case"rect":case"ellipse":case"sticker":return{...t,w:Math.max(8,t.w*a),h:Math.max(8,t.h*a)};case"text":return{...t,fontSize:Math.min(512,Math.max(8,t.fontSize*a))};default:return t}}function U(t,e){return{...t,rotation:b(e)}}function V(t,e,a){switch(t.type){case"pen":{const n=t.points.map((r,o)=>o%2===0?r+e:r+a);return{...t,points:n}}case"line":case"arrow":return{...t,x1:t.x1+e,y1:t.y1+a,x2:t.x2+e,y2:t.y2+a};case"rect":case"ellipse":case"sticker":return{...t,x:t.x+e,y:t.y+a};case"text":return{...t,x:t.x+e,y:t.y+a}}}var O=Math.PI/180;function z(t,e,a){const n=W(a);if(n===0||n===180)return{w:t,h:e};if(n===90||n===270)return{w:e,h:t};const r=n*O;return{w:Math.round(Math.abs(t*Math.cos(r))+Math.abs(e*Math.sin(r))),h:Math.round(Math.abs(t*Math.sin(r))+Math.abs(e*Math.cos(r)))}}function W(t){return(t%360+360)%360}function f(t){const e=Math.round(t);return e-e%2}function L(t,e){let a=t.w,n=a/e;return n>t.h&&(n=t.h,a=n*e),{x:Math.round((t.w-a)/2),y:Math.round((t.h-n)/2),width:Math.round(a),height:Math.round(n)}}function j(t,e,a){const n={x:0,y:0,width:t.width,height:t.height},r={x:0,y:0,width:e.w,height:e.h};return a==="cover"?{src:L({w:t.width,h:t.height},e.w/e.h),dst:r}:a==="contain"?{src:n,dst:L({w:e.w,h:e.h},t.width/t.height)}:{src:n,dst:r}}function B(t,e){if(e.scale)return{w:f(e.scale.width),h:f(e.scale.height)};if(e.crop)return{w:f(e.crop.width),h:f(e.crop.height)};const a=z(t.w,t.h,e.rotation);return{w:f(a.w),h:f(a.h)}}function q(t){const e=String(t??"").match(/^data:(image\/(?:png|jpe?g));base64,([a-z0-9+/=]+)$/i);if(!e)return null;const a=atob(e[2]),n=new Uint8Array(a.length);for(let r=0;r<a.length;r++)n[r]=a.charCodeAt(r);return new Blob([n],{type:e[1].toLowerCase()})}async function H(t,e,a=[]){const n=t.getExportPlan(),r=new FormData;n.videoSrcOrder.forEach((s,u)=>{const l=e[s];l&&r.append(`video_${u}`,l,l.name||`video_${u}.mp4`)}),n.audioSrcOrder.forEach((s,u)=>{const l=a[s];l&&r.append(`audio_${u}`,l,l.name||`audio_${u}`)});const o=B(n.state.canvas,n.state),i=await F(n.state.overlays,o.w,o.h);i&&r.append("overlay",i,"overlay.png");const c=n.state.poster?.useAsVideoCover?q(n.state.poster.preview):null;c&&r.append("videoCover",c,"video-cover.png");const h=n.state.poster?.preview?{...n.state,poster:{...n.state.poster,preview:void 0}}:n.state;return r.append("editState",JSON.stringify(h)),r}var Y=[{id:"bw",label:"\u9ED1\u767D",vf:"hue=s=0",css:"grayscale(1)"},{id:"sepia",label:"\u590D\u53E4",vf:"colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131",css:"sepia(0.85)"},{id:"warm",label:"\u6696\u9633",vf:"colorbalance=rs=.15:gs=.04:bs=-.15",css:"sepia(0.25) saturate(1.25) brightness(1.03)"},{id:"cool",label:"\u51B7\u8C03",vf:"colorbalance=rs=-.14:bs=.16",css:"hue-rotate(12deg) saturate(0.95) brightness(1.02)"},{id:"vivid",label:"\u9C9C\u8273",vf:"eq=saturation=1.45:contrast=1.08",css:"saturate(1.45) contrast(1.08)"}];function X(t){return t?Y.find(e=>e.id===t):void 0}function G(t,e){const a=X(e)?.css??"";return[`brightness(${1+t.brightness})`,`contrast(${1+t.contrast})`,`saturate(${1+t.saturation})`,a].filter(Boolean).join(" ")}function K(t,e,a,n,r,o=1,i,c=!0){const h=B(n,r);t.width=Math.max(2,Math.round(h.w*o)),t.height=Math.max(2,Math.round(h.h*o));const s=t.getContext("2d");if(!s)return;const u=z(n.w,n.h,r.rotation),l=r.crop??{x:0,y:0,width:u.w,height:u.h},x=r.scale?.fit??"force",{src:p,dst:d}=j({width:l.width,height:l.height},h,x);x==="contain"&&(s.fillStyle="#000",s.fillRect(0,0,t.width,t.height)),s.filter=G(r.filters,r.filterPreset),s.save(),x==="contain"&&(s.beginPath(),s.rect(o*d.x,o*d.y,o*d.width,o*d.height),s.clip()),s.translate(o*d.x,o*d.y),s.scale(o*d.width/p.width,o*d.height/p.height),s.translate(-(l.x+p.x),-(l.y+p.y)),s.translate(u.w/2,u.h/2),s.rotate(r.rotation*O),s.scale(r.flipX?-1:1,r.flipY?-1:1);const w=j({width:a.w,height:a.h},{w:n.w,h:n.h},"cover");s.drawImage(e,w.src.x,w.src.y,w.src.width,w.src.height,-n.w/2,-n.h/2,n.w,n.h),s.restore(),s.filter="none",c&&r.overlays?.length&&(s.setTransform(o,0,0,o,0,0),M(s,r.overlays,i),s.setTransform(1,0,0,1,0,0))}function Q(t,e){return new Promise(a=>{const n=()=>{t.removeEventListener("seeked",n),a()};t.addEventListener("seeked",n),t.currentTime=Math.min(Math.max(0,e),t.duration||e)})}async function Z(t,e,a=160){const n=t.duration;if(!n||!isFinite(n)||e<=0)return[];const r=t.videoWidth||16,o=t.videoHeight||9,i=Math.min(a,r),c=Math.max(1,Math.round(i*o/r)),h=document.createElement("canvas");h.width=i,h.height=c;const s=h.getContext("2d");if(!s)return[];const u=[];for(let l=0;l<e;l++)await Q(t,n*(l+.5)/e),s.drawImage(t,0,0,i,c),u.push(h.toDataURL("image/jpeg",.6));return u}function tt(t,e={}){const a=e.mode??"overlay",n=document.createElement("button");n.type="button",n.className=["me-fullscreen-toggle",e.className].filter(Boolean).join(" "),n.dataset.meFullscreenToggle="true",n.dataset.mode=a,n.title="\u5168\u5C4F / \u9000\u51FA\u5168\u5C4F",n.style.cssText=[a==="overlay"?"position:absolute;left:8px;bottom:8px;z-index:30;":"position:static;","width:32px;height:32px;padding:0;","display:inline-flex;align-items:center;justify-content:center;","border:1px solid var(--me-border,#26262b);border-radius:6px;","background:var(--me-chip,#1c1c20);color:var(--me-fg,#e7e7ee);","cursor:pointer;font-size:15px;line-height:1;opacity:0.9;font:inherit;"].join(""),t.classList.add("me-fullscreen-host");const r=()=>{const c=document.fullscreenElement===t;n.textContent=c?"\xD7":"\u26F6",n.setAttribute("aria-label",c?"\u9000\u51FA\u5168\u5C4F":"\u5168\u5C4F"),t.classList.toggle("me-is-fullscreen",c),t.dataset.meFullscreen=c?"true":"false"};r();const o=()=>r(),i=()=>{(document.fullscreenElement===t?document.exitFullscreen?.():t.requestFullscreen?.())?.catch?.(()=>{})};return n.addEventListener("click",i),document.addEventListener("fullscreenchange",o),{button:n,dispose:()=>{document.removeEventListener("fullscreenchange",o),n.removeEventListener("click",i),n.remove(),t.classList.remove("me-fullscreen-host","me-is-fullscreen"),delete t.dataset.meFullscreen}}}exports.buildVideoExportFormData=H,exports.createFullscreenToggle=tt,exports.drawOverlay=P,exports.drawOverlays=M,exports.drawVideoFrame=K,exports.fitStickerBox=_,exports.generateThumbnails=Z,exports.getOverlayRotation=m,exports.hitTestOverlay=D,exports.loadOverlayImages=E,exports.overlayBBox=k,exports.renderOverlaysToPng=F,exports.rotateOverlay=U,exports.scaleOverlay=J,exports.translateOverlay=V;
|
|
1
|
+
"use strict";var v=Math.PI/180;function y(e,t,a){e.strokeStyle=t,e.lineWidth=a,e.lineCap="round",e.lineJoin="round"}function $(e,t,a,n,r,s){const i=Math.atan2(r-a,n-t),c=Math.max(12,s*3.5);e.beginPath(),e.moveTo(n,r),e.lineTo(n-c*Math.cos(i-Math.PI/7),r-c*Math.sin(i-Math.PI/7)),e.moveTo(n,r),e.lineTo(n-c*Math.cos(i+Math.PI/7),r-c*Math.sin(i+Math.PI/7)),e.stroke()}function b(e){if(!Number.isFinite(e))return 0;let t=e%360;return t>180&&(t-=360),t<-180&&(t+=360),Math.abs(t)<.001?0:t}function m(e){return b(e.rotation??0)}function k(e){switch(e.type){case"pen":{let t=1/0,a=1/0,n=-1/0,r=-1/0;for(let s=0;s<e.points.length;s+=2)t=Math.min(t,e.points[s]),n=Math.max(n,e.points[s]),a=Math.min(a,e.points[s+1]),r=Math.max(r,e.points[s+1]);return{x:t,y:a,w:n-t,h:r-a}}case"line":case"arrow":return{x:Math.min(e.x1,e.x2),y:Math.min(e.y1,e.y2),w:Math.abs(e.x2-e.x1),h:Math.abs(e.y2-e.y1)};case"rect":case"ellipse":case"sticker":return{x:e.x,y:e.y,w:e.w,h:e.h};case"text":return{x:e.x,y:e.y,w:e.text.length*e.fontSize*.6,h:e.fontSize*1.2}}}function g(e){const t=k(e);return{x:t.x+t.w/2,y:t.y+t.h/2}}function A(e,t,a,n,r){const s=r*v,i=Math.cos(s),c=Math.sin(s),h=e-a,o=t-n;return{x:a+h*i-o*c,y:n+h*c+o*i}}function S(e,t,a,n,r){return{x:a+(e-a)*r,y:n+(t-n)*r}}function P(e,t,a){const n=m(t);if(n){const r=g(t);e.save(),e.translate(r.x,r.y),e.rotate(n*v),e.translate(-r.x,-r.y),T(e,t,a),e.restore();return}T(e,t,a)}function T(e,t,a){switch(t.type){case"pen":{y(e,t.color,t.width),e.beginPath(),e.moveTo(t.points[0],t.points[1]);for(let n=2;n<t.points.length;n+=2)e.lineTo(t.points[n],t.points[n+1]);e.stroke();break}case"line":case"arrow":{y(e,t.color,t.width),e.beginPath(),e.moveTo(t.x1,t.y1),e.lineTo(t.x2,t.y2),e.stroke(),t.type==="arrow"&&$(e,t.x1,t.y1,t.x2,t.y2,t.width);break}case"rect":{y(e,t.color,t.width),e.strokeRect(t.x,t.y,t.w,t.h);break}case"ellipse":{y(e,t.color,t.width),e.beginPath(),e.ellipse(t.x+t.w/2,t.y+t.h/2,Math.abs(t.w/2),Math.abs(t.h/2),0,0,Math.PI*2),e.stroke();break}case"text":{e.fillStyle=t.color,e.font=`bold ${t.fontSize}px -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif`,e.textBaseline="top",e.strokeStyle="rgba(0,0,0,0.45)",e.lineWidth=Math.max(2,t.fontSize/16),e.lineJoin="round",e.strokeText(t.text,t.x,t.y),e.fillText(t.text,t.x,t.y);break}case"sticker":{if(t.emoji)e.font=`${Math.min(t.w,t.h)}px -apple-system, "Apple Color Emoji", "Segoe UI Emoji", sans-serif`,e.textBaseline="top",e.fillText(t.emoji,t.x,t.y);else if(t.src){const n=a?.get(t.src);n&&e.drawImage(n,t.x,t.y,t.w,t.h)}break}}}function M(e,t,a){for(const n of t)P(e,n,a)}async function E(e){const t=new Map,a=[...new Set(e.filter(n=>n.type==="sticker"&&n.src).map(n=>n.src))];return await Promise.all(a.map(n=>new Promise(r=>{const s=new Image;s.onload=()=>{t.set(n,s),r()},s.onerror=()=>r(),s.src=n}))),t}async function F(e,t,a){if(!e?.length)return null;const n=document.createElement("canvas");n.width=t,n.height=a;const r=n.getContext("2d");if(!r)return null;const s=await E(e);return M(r,e,s),new Promise(i=>n.toBlob(c=>i(c),"image/png"))}function D(e,t,a,n=12){for(let r=e.length-1;r>=0;r--){const s=e[r];if(R(s,t,a,n))return r}return-1}function N(e,t,a,n,r){return Math.abs(e-a)<=r&&Math.abs(t-n)<=r}function C(e,t,a,n,r,s,i){const c=r-a,h=s-n,o=c*c+h*h||1,u=Math.max(0,Math.min(1,((e-a)*c+(t-n)*h)/o)),l=a+u*c,x=n+u*h;return(e-l)**2+(t-x)**2<=i*i}function R(e,t,a,n){const r=m(e);if(r){const s=g(e),i=A(t,a,s.x,s.y,-r);return I(e,i.x,i.y,n)}return I(e,t,a,n)}function I(e,t,a,n){switch(e.type){case"pen":{for(let r=0;r+3<e.points.length;r+=2)if(C(t,a,e.points[r],e.points[r+1],e.points[r+2],e.points[r+3],n+e.width/2))return!0;return!1}case"line":case"arrow":return C(t,a,e.x1,e.y1,e.x2,e.y2,n+e.width/2);case"rect":case"ellipse":return t>=e.x-n&&t<=e.x+e.w+n&&a>=e.y-n&&a<=e.y+e.h+n;case"text":return t>=e.x-n&&t<=e.x+e.text.length*e.fontSize*.6+n&&a>=e.y-n&&a<=e.y+e.fontSize+n;case"sticker":return N(t,a,e.x+e.w/2,e.y+e.h/2,Math.max(e.w,e.h)/2+n)}}function _(e,t,a){const n=Math.max(8,a);if(!(e>0)||!(t>0))return{w:n,h:n};const r=n/Math.max(e,t);return{w:Math.max(8,Math.round(e*r)),h:Math.max(8,Math.round(t*r))}}function J(e,t){const a=Math.max(.05,t),n=g(e);switch(e.type){case"pen":return{...e,points:e.points.map((r,s)=>s%2===0?n.x+(r-n.x)*a:n.y+(r-n.y)*a)};case"line":case"arrow":{const r=S(e.x1,e.y1,n.x,n.y,a),s=S(e.x2,e.y2,n.x,n.y,a);return{...e,x1:r.x,y1:r.y,x2:s.x,y2:s.y}}case"rect":case"ellipse":case"sticker":return{...e,w:Math.max(8,e.w*a),h:Math.max(8,e.h*a)};case"text":return{...e,fontSize:Math.min(512,Math.max(8,e.fontSize*a))};default:return e}}function U(e,t){return{...e,rotation:b(t)}}function V(e,t,a){switch(e.type){case"pen":{const n=e.points.map((r,s)=>s%2===0?r+t:r+a);return{...e,points:n}}case"line":case"arrow":return{...e,x1:e.x1+t,y1:e.y1+a,x2:e.x2+t,y2:e.y2+a};case"rect":case"ellipse":case"sticker":return{...e,x:e.x+t,y:e.y+a};case"text":return{...e,x:e.x+t,y:e.y+a}}}var O=Math.PI/180;function z(e,t,a){const n=W(a);if(n===0||n===180)return{w:e,h:t};if(n===90||n===270)return{w:t,h:e};const r=n*O;return{w:Math.round(Math.abs(e*Math.cos(r))+Math.abs(t*Math.sin(r))),h:Math.round(Math.abs(e*Math.sin(r))+Math.abs(t*Math.cos(r)))}}function W(e){return(e%360+360)%360}function f(e){const t=Math.round(e);return t-t%2}function L(e,t){let a=e.w,n=a/t;return n>e.h&&(n=e.h,a=n*t),{x:Math.round((e.w-a)/2),y:Math.round((e.h-n)/2),width:Math.round(a),height:Math.round(n)}}function j(e,t,a){const n={x:0,y:0,width:e.width,height:e.height},r={x:0,y:0,width:t.w,height:t.h};return a==="cover"?{src:L({w:e.width,h:e.height},t.w/t.h),dst:r}:a==="contain"?{src:n,dst:L({w:t.w,h:t.h},e.width/e.height)}:{src:n,dst:r}}function B(e,t){if(t.scale)return{w:f(t.scale.width),h:f(t.scale.height)};if(t.crop)return{w:f(t.crop.width),h:f(t.crop.height)};const a=z(e.w,e.h,t.rotation);return{w:f(a.w),h:f(a.h)}}function q(e){const t=String(e??"").match(/^data:(image\/(?:png|jpe?g));base64,([a-z0-9+/=]+)$/i);if(!t)return null;const a=atob(t[2]),n=new Uint8Array(a.length);for(let r=0;r<a.length;r++)n[r]=a.charCodeAt(r);return new Blob([n],{type:t[1].toLowerCase()})}async function H(e,t,a=[]){const n=e.getExportPlan(),r=new FormData;n.videoSrcOrder.forEach((o,u)=>{const l=t[o];l&&r.append(`video_${u}`,l,l.name||`video_${u}.mp4`)}),n.audioSrcOrder.forEach((o,u)=>{const l=a[o];l&&r.append(`audio_${u}`,l,l.name||`audio_${u}`)});const s=B(n.state.canvas,n.state),i=await F(n.state.overlays,s.w,s.h);i&&r.append("overlay",i,"overlay.png");const c=n.state.poster?.useAsVideoCover?q(n.state.poster.preview):null;c&&r.append("videoCover",c,"video-cover.png");const h=n.state.poster?.preview?{...n.state,poster:{...n.state.poster,preview:void 0}}:n.state;return r.append("editState",JSON.stringify(h)),r}var Y=[{id:"bw",label:"\u9ED1\u767D",vf:"hue=s=0",css:"grayscale(1)"},{id:"sepia",label:"\u590D\u53E4",vf:"colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131",css:"sepia(0.85)"},{id:"warm",label:"\u6696\u9633",vf:"colorbalance=rs=.15:gs=.04:bs=-.15",css:"sepia(0.25) saturate(1.25) brightness(1.03)"},{id:"cool",label:"\u51B7\u8C03",vf:"colorbalance=rs=-.14:bs=.16",css:"hue-rotate(12deg) saturate(0.95) brightness(1.02)"},{id:"vivid",label:"\u9C9C\u8273",vf:"eq=saturation=1.45:contrast=1.08",css:"saturate(1.45) contrast(1.08)"}];function X(e){return e?Y.find(t=>t.id===e):void 0}function G(e,t){const a=X(t)?.css??"";return[`brightness(${1+e.brightness})`,`contrast(${1+e.contrast})`,`saturate(${1+e.saturation})`,a].filter(Boolean).join(" ")}function K(e,t,a,n,r,s=1,i,c=!0){const h=B(n,r);e.width=Math.max(2,Math.round(h.w*s)),e.height=Math.max(2,Math.round(h.h*s));const o=e.getContext("2d");if(!o)return;const u=z(n.w,n.h,r.rotation),l=r.crop??{x:0,y:0,width:u.w,height:u.h},x=r.scale?.fit??"force",{src:p,dst:d}=j({width:l.width,height:l.height},h,x);x==="contain"&&(o.fillStyle="#000",o.fillRect(0,0,e.width,e.height)),o.filter=G(r.filters,r.filterPreset),o.save(),x==="contain"&&(o.beginPath(),o.rect(s*d.x,s*d.y,s*d.width,s*d.height),o.clip()),o.translate(s*d.x,s*d.y),o.scale(s*d.width/p.width,s*d.height/p.height),o.translate(-(l.x+p.x),-(l.y+p.y)),o.translate(u.w/2,u.h/2),o.rotate(r.rotation*O),o.scale(r.flipX?-1:1,r.flipY?-1:1);const w=j({width:a.w,height:a.h},{w:n.w,h:n.h},"cover");o.drawImage(t,w.src.x,w.src.y,w.src.width,w.src.height,-n.w/2,-n.h/2,n.w,n.h),o.restore(),o.filter="none",c&&r.overlays?.length&&(o.setTransform(s,0,0,s,0,0),M(o,r.overlays,i),o.setTransform(1,0,0,1,0,0))}function Q(e,t){return new Promise(a=>{const n=()=>{e.removeEventListener("seeked",n),a()};e.addEventListener("seeked",n),e.currentTime=Math.min(Math.max(0,t),e.duration||t)})}async function Z(e,t,a=160){const n=e.duration;if(!n||!isFinite(n)||t<=0)return[];const r=e.videoWidth||16,s=e.videoHeight||9,i=Math.min(a,r),c=Math.max(1,Math.round(i*s/r)),h=document.createElement("canvas");h.width=i,h.height=c;const o=h.getContext("2d");if(!o)return[];const u=[];for(let l=0;l<t;l++)await Q(e,n*(l+.5)/t),o.drawImage(e,0,0,i,c),u.push(h.toDataURL("image/jpeg",.6));return u}function ee(e,t={}){const a=t.mode??"overlay",n=document.createElement("button");n.type="button",n.className=["me-fullscreen-toggle",t.className].filter(Boolean).join(" "),n.dataset.meFullscreenToggle="true",n.dataset.mode=a,n.title="\u5168\u5C4F / \u9000\u51FA\u5168\u5C4F",n.style.cssText=[a==="overlay"?"position:absolute;left:8px;bottom:8px;z-index:30;":"position:static;","width:32px;height:32px;padding:0;","display:inline-flex;align-items:center;justify-content:center;","border:1px solid var(--me-border,#26262b);border-radius:6px;","background:var(--me-chip,#1c1c20);color:var(--me-fg,#e7e7ee);","cursor:pointer;font-size:15px;line-height:1;opacity:0.9;font:inherit;"].join(""),e.classList.add("me-fullscreen-host");const r=()=>{const c=document.fullscreenElement===e;n.textContent=c?"\xD7":"\u26F6",n.setAttribute("aria-label",c?"\u9000\u51FA\u5168\u5C4F":"\u5168\u5C4F"),e.classList.toggle("me-is-fullscreen",c),e.dataset.meFullscreen=c?"true":"false"};r();const s=()=>r(),i=()=>{(document.fullscreenElement===e?document.exitFullscreen?.():e.requestFullscreen?.())?.catch?.(()=>{})};return n.addEventListener("click",i),document.addEventListener("fullscreenchange",s),{button:n,dispose:()=>{document.removeEventListener("fullscreenchange",s),n.removeEventListener("click",i),n.remove(),e.classList.remove("me-fullscreen-host","me-is-fullscreen"),delete e.dataset.meFullscreen}}}exports.buildVideoExportFormData=H,exports.createFullscreenToggle=ee,exports.drawOverlay=P,exports.drawOverlays=M,exports.drawVideoFrame=K,exports.fitStickerBox=_,exports.generateThumbnails=Z,exports.getOverlayRotation=m,exports.hitTestOverlay=D,exports.loadOverlayImages=E,exports.overlayBBox=k,exports.renderOverlaysToPng=F,exports.rotateOverlay=U,exports.scaleOverlay=J,exports.translateOverlay=V;
|
package/core/dist/browser.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{outputSize as q,rotatedSize as
|
|
1
|
+
import{outputSize as q,rotatedSize as St,fitRects as at,buildFilterCss as it,DEG2RAD as Ft,findFilterPreset as Tt}from"./chunk-USY6UDGL.js";var ot=Math.PI/180;function R(t,e,r){t.strokeStyle=e,t.lineWidth=r,t.lineCap="round",t.lineJoin="round"}function Nt(t,e,r,n,a,i){const s=Math.atan2(a-r,n-e),c=Math.max(12,i*3.5);t.beginPath(),t.moveTo(n,a),t.lineTo(n-c*Math.cos(s-Math.PI/7),a-c*Math.sin(s-Math.PI/7)),t.moveTo(n,a),t.lineTo(n-c*Math.cos(s+Math.PI/7),a-c*Math.sin(s+Math.PI/7)),t.stroke()}function st(t){if(!Number.isFinite(t))return 0;let e=t%360;return e>180&&(e-=360),e<-180&&(e+=360),Math.abs(e)<.001?0:e}var kt=.84;function Ct(t){const e=Math.max(8,Number(t?.w)||0),r=Math.max(8,Number(t?.h)||0),n=Math.max(8,Math.min(e,r)*kt);return{x:(Number(t?.x)||0)+(e-n)/2,y:(Number(t?.y)||0)+(r-n)/2,size:n}}var J=null;function Pt(){return typeof document>"u"?null:(J??(J=document.createElement("canvas")),J.getContext("2d"))}function ct(t){return Math.min(512,Math.max(8,Number(t.fontSize)||24))}function At(t,e){return Number.isFinite(t.paddingX)?Math.max(0,t.paddingX):Math.max(8,Math.round(e*.18))}function Et(t,e){return Number.isFinite(t.paddingY)?Math.max(0,t.paddingY):Math.max(6,Math.round(e*.14))}function It(t,e){return(Number.isFinite(t.lineHeight)?Math.max(.9,t.lineHeight):1.1)*e}function Wt(t){return t.textAlign==="center"||t.textAlign==="right"?t.textAlign:"left"}function Ot(t){const e=ct(t),r=t.fontStyle||"normal",n=t.fontWeight||"700",a=t.fontFamily||'-apple-system, "PingFang SC", "Microsoft YaHei", sans-serif';return`${r} ${n} ${e}px ${a}`}function zt(t,e){const r=t==null?"":String(t);switch(e){case"uppercase":return r.toUpperCase();case"lowercase":return r.toLowerCase();case"capitalize":return r.toLowerCase().replace(/(^|\s)(\S)/g,(n,a,i)=>`${a}${i.toUpperCase()}`);default:return r}}function $t(t,e){const r=zt(t,e).replace(/\r\n/g,`
|
|
2
2
|
`).split(`
|
|
3
|
-
`);return r.length?r:[""]}function D(e){return Number.isFinite(e)&&e>=0}function Le(e){if(!V(e))return null;const t=D(e.startAt)?Number(e.startAt):null,r=D(e.endAt)?Number(e.endAt):null;if(t==null&&r==null)return null;const n=Math.max(0,t??0),a=Math.max(n,r??n);return{start:n,end:a}}function le(e){const t=Le(e);return!!t&&t.end>t.start}function V(e){return e?.type==="pen"||e?.type==="line"||e?.type==="arrow"||e?.type==="rect"||e?.type==="ellipse"||e?.type==="text"||e?.type==="sticker"}function je(e){if(!V(e)&&e?.type!=="filter"&&e?.type!=="adjust")return null;const t=D(e.startAt)?Number(e.startAt):null,r=D(e.endAt)?Number(e.endAt):null;if(t==null&&r==null)return null;const n=Math.max(0,t??0),a=Math.max(n,r??n);return{start:n,end:a}}function De(e,t){const r=je(e);return r?Number.isFinite(t)?t>=r.start&&t<=r.end:!1:!0}function Ye(e,t){return e?.length?Number.isFinite(t)?e.filter(r=>De(r,t)):e:[]}function he(e){return e?.type==="text"||e?.type==="sticker"||e?.type==="filter"||e?.type==="adjust"}function ue(e){return Number.isFinite(e?.timelineTrack)?Math.max(0,Math.round(Number(e.timelineTrack))):0}function de(e){return D(e?.startAt)?Number(e.startAt):0}function G(e){const t=ce(e),r=Pe(e,t),n=Ee(e,t),a=ze(e,t),i=$e(e.text,e.textTransform),s=Ae(),c=Oe(e);s&&(s.font=c);const m=i.map(b=>{const g=b===""?" ":b;return s?s.measureText(g).width:Math.max(1,g.length)*t*.6}),o=m.length?Math.max(...m):t*.6,y=Math.max(t,i.length*a),w=Math.max(Number.isFinite(e.width)?e.width:0,o+r*2),f=y+n*2;return{font:c,fontSize:t,paddingX:r,paddingY:n,lineHeight:a,lines:i,widths:m,boxWidth:w,boxHeight:f,align:We(e)}}function He(e,t,r){return t.align==="center"?e.x+t.boxWidth/2-r/2:t.align==="right"?e.x+t.boxWidth-t.paddingX-r:e.x+t.paddingX}function Xe(e,t,r,n,a,i){if(!t.textDecoration||i<=0)return;const s=r.fontSize,c=String(t.textDecoration).includes("underline"),m=String(t.textDecoration).includes("line-through");if(!(!c&&!m)){if(e.save(),e.strokeStyle=t.color||"#fff",e.lineWidth=Math.max(1,s/18),c){const o=a+s+Math.max(1,s*.08);e.beginPath(),e.moveTo(n,o),e.lineTo(n+i,o),e.stroke()}if(m){const o=a+s*.56;e.beginPath(),e.moveTo(n,o),e.lineTo(n+i,o),e.stroke()}e.restore()}}function K(e){return se(e.rotation??0)}function me(e){switch(e.type){case"pen":{let t=1/0,r=1/0,n=-1/0,a=-1/0;for(let i=0;i<e.points.length;i+=2)t=Math.min(t,e.points[i]),n=Math.max(n,e.points[i]),r=Math.min(r,e.points[i+1]),a=Math.max(a,e.points[i+1]);return{x:t,y:r,w:n-t,h:a-r}}case"line":case"arrow":return{x:Math.min(e.x1,e.x2),y:Math.min(e.y1,e.y2),w:Math.abs(e.x2-e.x1),h:Math.abs(e.y2-e.y1)};case"rect":case"ellipse":case"sticker":return{x:e.x,y:e.y,w:e.w,h:e.h};case"text":{const t=G(e);return{x:e.x,y:e.y,w:t.boxWidth,h:t.boxHeight}}}}function Q(e){const t=me(e);return{x:t.x+t.w/2,y:t.y+t.h/2}}function Be(e,t,r,n,a){const i=a*oe,s=Math.cos(i),c=Math.sin(i),m=e-r,o=t-n;return{x:r+m*s-o*c,y:n+m*c+o*s}}function fe(e,t,r,n,a){return{x:r+(e-r)*a,y:n+(t-n)*a}}function Z(e,t,r){const n=K(t);if(n){const a=Q(t);e.save(),e.translate(a.x,a.y),e.rotate(n*oe),e.translate(-a.x,-a.y),xe(e,t,r),e.restore();return}xe(e,t,r)}function xe(e,t,r){switch(t.type){case"pen":{B(e,t.color,t.width),e.beginPath(),e.moveTo(t.points[0],t.points[1]);for(let n=2;n<t.points.length;n+=2)e.lineTo(t.points[n],t.points[n+1]);e.stroke();break}case"line":case"arrow":{B(e,t.color,t.width),e.beginPath(),e.moveTo(t.x1,t.y1),e.lineTo(t.x2,t.y2),e.stroke(),t.type==="arrow"&&Ne(e,t.x1,t.y1,t.x2,t.y2,t.width);break}case"rect":{B(e,t.color,t.width),e.strokeRect(t.x,t.y,t.w,t.h);break}case"ellipse":{B(e,t.color,t.width),e.beginPath(),e.ellipse(t.x+t.w/2,t.y+t.h/2,Math.abs(t.w/2),Math.abs(t.h/2),0,0,Math.PI*2),e.stroke();break}case"text":{const n=G(t),a=Number.isFinite(t.opacity)?Math.min(1,Math.max(0,t.opacity/100)):1,i=Number.isFinite(t.borderWidth)?Math.max(0,t.borderWidth):0,s=t.autoOutline!==!1;e.save(),e.globalAlpha*=a,t.backgroundColor&&t.backgroundColor!=="transparent"&&(e.fillStyle=t.backgroundColor,e.fillRect(t.x,t.y,n.boxWidth,n.boxHeight)),e.fillStyle=t.color||"#fff",e.font=n.font,e.textBaseline="top",e.lineJoin="round";const c=t.boxShadow;c&&(e.shadowColor=c.color||"transparent",e.shadowOffsetX=c.x||0,e.shadowOffsetY=c.y||0,e.shadowBlur=c.blur||0),n.lines.forEach((m,o)=>{const y=n.widths[o]??0,w=He(t,n,y),f=t.y+n.paddingY+o*n.lineHeight;(i>0||s)&&(e.strokeStyle=i>0?t.borderColor||"#000":t.strokeColor||"rgba(0,0,0,0.45)",e.lineWidth=i>0?i:Math.max(1,n.fontSize/18),e.strokeText(m,w,f)),e.fillText(m,w,f),Xe(e,t,n,w,f,y)}),e.restore();break}case"sticker":{if(t.emoji){const n=Ce(t);e.save(),e.font=`${n.size}px -apple-system, "Apple Color Emoji", "Segoe UI Emoji", sans-serif`,e.textAlign="center",e.textBaseline="middle",e.fillText(t.emoji,n.x+n.size/2,n.y+n.size/2),e.restore()}else if(t.src){const n=r?.get(t.src);n&&e.drawImage(n,t.x,t.y,t.w,t.h)}break}}}function ee(e,t,r){for(const n of t)Z(e,n,r)}async function pe(e){const t=new Map,r=[...new Set(e.filter(n=>n.type==="sticker"&&n.src).map(n=>n.src))];return await Promise.all(r.map(n=>new Promise(a=>{const i=new Image;i.onload=()=>{t.set(n,i),a()},i.onerror=()=>a(),i.src=n}))),t}async function te(e,t,r){if(!e?.length)return null;const n=document.createElement("canvas");n.width=t,n.height=r;const a=n.getContext("2d");if(!a)return null;const i=await pe(e);return ee(a,e,i),new Promise(s=>n.toBlob(c=>s(c),"image/png"))}function Re(e,t,r,n=12){for(let a=e.length-1;a>=0;a--){const i=e[a];if(Ue(i,t,r,n))return a}return-1}function _e(e,t,r,n,a){return Math.abs(e-r)<=a&&Math.abs(t-n)<=a}function ge(e,t,r,n,a,i,s){const c=a-r,m=i-n,o=c*c+m*m||1,y=Math.max(0,Math.min(1,((e-r)*c+(t-n)*m)/o)),w=r+y*c,f=n+y*m;return(e-w)**2+(t-f)**2<=s*s}function Ue(e,t,r,n){const a=K(e);if(a){const i=Q(e),s=Be(t,r,i.x,i.y,-a);return ye(e,s.x,s.y,n)}return ye(e,t,r,n)}function ye(e,t,r,n){switch(e.type){case"pen":{for(let a=0;a+3<e.points.length;a+=2)if(ge(t,r,e.points[a],e.points[a+1],e.points[a+2],e.points[a+3],n+e.width/2))return!0;return!1}case"line":case"arrow":return ge(t,r,e.x1,e.y1,e.x2,e.y2,n+e.width/2);case"rect":case"ellipse":return t>=e.x-n&&t<=e.x+e.w+n&&r>=e.y-n&&r<=e.y+e.h+n;case"text":{const a=G(e);return t>=e.x-n&&t<=e.x+a.boxWidth+n&&r>=e.y-n&&r<=e.y+a.boxHeight+n}case"sticker":return _e(t,r,e.x+e.w/2,e.y+e.h/2,Math.max(e.w,e.h)/2+n)}}function qe(e,t,r){const n=Math.max(8,r);if(!(e>0)||!(t>0))return{w:n,h:n};const a=n/Math.max(e,t);return{w:Math.max(8,Math.round(e*a)),h:Math.max(8,Math.round(t*a))}}function Je(e,t){const r=Math.max(.05,t),n=Q(e);switch(e.type){case"pen":return{...e,points:e.points.map((a,i)=>i%2===0?n.x+(a-n.x)*r:n.y+(a-n.y)*r)};case"line":case"arrow":{const a=fe(e.x1,e.y1,n.x,n.y,r),i=fe(e.x2,e.y2,n.x,n.y,r);return{...e,x1:a.x,y1:a.y,x2:i.x,y2:i.y}}case"rect":case"ellipse":case"sticker":return{...e,w:Math.max(8,e.w*r),h:Math.max(8,e.h*r)};case"text":return{...e,fontSize:Math.min(512,Math.max(8,e.fontSize*r)),width:Number.isFinite(e.width)?Math.max(80,e.width*r):e.width,paddingX:Number.isFinite(e.paddingX)?Math.max(0,e.paddingX*r):e.paddingX,paddingY:Number.isFinite(e.paddingY)?Math.max(0,e.paddingY*r):e.paddingY,borderWidth:Number.isFinite(e.borderWidth)?Math.max(0,e.borderWidth*r):e.borderWidth,boxShadow:e.boxShadow?{...e.boxShadow,x:(e.boxShadow.x||0)*r,y:(e.boxShadow.y||0)*r,blur:(e.boxShadow.blur||0)*r}:e.boxShadow};default:return e}}function Ve(e,t){return{...e,rotation:se(t)}}function Ge(e,t,r){switch(e.type){case"pen":{const n=e.points.map((a,i)=>i%2===0?a+t:a+r);return{...e,points:n}}case"line":case"arrow":return{...e,x1:e.x1+t,y1:e.y1+r,x2:e.x2+t,y2:e.y2+r};case"rect":case"ellipse":case"sticker":return{...e,x:e.x+t,y:e.y+r};case"text":return{...e,x:e.x+t,y:e.y+r}}}function L(e,t){const r=Math.min(8192,Math.max(2,Math.round(Number(e)||t)));return r%2===0?r:r-1}function ct(e){const t=q(e.canvas,e),r=e?.exportSettings??null;if(!r)return t;const n=Number.isFinite(Number(r.width))&&Number(r.width)>0,a=Number.isFinite(Number(r.height))&&Number(r.height)>0;if(!n&&!a)return t;const i=t.w>0&&t.h>0?t.w/t.h:1;if(n&&a)return{w:L(r.width,t.w),h:L(r.height,t.h)};if(n){const c=L(r.width,t.w);return{w:c,h:L(c/i,t.h)}}const s=L(r.height,t.h);return{w:L(s*i,t.w),h:s}}function Ke(e){const t=String(e??"").match(/^data:(image\/(?:png|jpe?g));base64,([a-z0-9+/=]+)$/i);if(!t)return null;const r=atob(t[2]),n=new Uint8Array(r.length);for(let a=0;a<r.length;a++)n[a]=r.charCodeAt(a);return new Blob([n],{type:t[1].toLowerCase()})}async function Qe(e,t,r=[]){const n=e.getExportPlan(),a=new FormData;n.videoSrcOrder.forEach((f,b)=>{const g=t[f];g&&a.append(`video_${b}`,g,g.name||`video_${b}.mp4`)}),n.audioSrcOrder.forEach((f,b)=>{const g=r[f];g&&a.append(`audio_${b}`,g,g.name||`audio_${b}`)});const i=q(n.state.canvas,n.state),s=n.state.overlays??[],c=s.filter(f=>le(f)),m=s.filter(f=>!le(f)&&V(f)),o=await te(m,i.w,i.h);o&&a.append("overlay",o,"overlay.png");for(let f=0;f<c.length;f++){const b=await te([c[f]],i.w,i.h);b&&a.append(`textOverlay_${f}`,b,`text-overlay-${f}.png`)}const y=n.state.poster?.useAsVideoCover?Ke(n.state.poster.preview):null;y&&a.append("videoCover",y,"video-cover.png");const w=n.state.poster?.preview?{...n.state,poster:{...n.state.poster,preview:void 0}}:n.state;return a.append("editState",JSON.stringify(w)),a}function N(e){return Math.max(-1,Math.min(1,Number(e)||0))}function j(e){return Math.max(0,Math.min(1,Number(e)||0))}function k(e){return Math.max(0,Math.min(1,e))}function A(e){return Math.max(0,Math.min(255,e))}function W(e,t,r){if(e===t)return r<e?0:1;const n=Math.max(0,Math.min(1,(r-e)/(t-e)));return n*n*(3-2*n)}function ne(e){const t=W(.08,.4,e),r=1-W(.6,.92,e);return k(t*r*2.2)}function we(e,t,r=0){const n=Math.sin(e*12.9898+t*78.233+r*37.719)*43758.5453;return n-Math.floor(n)}var O=null;function Ze(e,t){return typeof document>"u"?null:(O??(O=document.createElement("canvas")),O.width!==e&&(O.width=e),O.height!==t&&(O.height=t),O)}function be(e,t,r,n){if(!n||n==="none")return;const a=Ze(t,r),i=a?.getContext("2d");!a||!i||(i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,t,r),i.drawImage(e.canvas,0,0,t,r),e.save(),e.setTransform(1,0,0,1,0,0),e.clearRect(0,0,t,r),e.filter=n,e.drawImage(a,0,0,t,r),e.restore(),e.filter="none")}function et(e,t,r,n){const a=Te(n?.filterPreset)?.css??"";be(e,t,r,a)}function tt(e,t,r,n){be(e,t,r,ie(n??{},"")),Me(e,t,r,n??{})}function nt(e={}){return["temperature","tint","vibrance","gamma","highlights","shadows","whites","blacks","lightSense"].some(t=>Math.abs(N(e[t]))>1e-4)?!0:["sharpen","clarity","grain","fade","vignette"].some(t=>j(e[t])>1e-4)}function Me(e,t,r,n={}){if(!nt(n))return;let a;try{a=e.getImageData(0,0,t,r)}catch{return}const i=N(n.temperature),s=N(n.tint),c=N(n.vibrance),m=N(n.gamma),o=N(n.highlights),y=N(n.shadows),w=N(n.whites),f=N(n.blacks),b=N(n.lightSense),g=j(n.sharpen),P=j(n.clarity),I=j(n.grain),E=j(n.fade),Y=j(n.vignette),R=1+m*(m>0?1:.5),M=m===0?1:1/Math.max(.01,R),z=i*.18,H=i*.02,X=-i*.18,re=s*.1,ve=-s*.12,p=a.data;for(let h=0;h<p.length;h+=4){let d=p[h]/255,x=p[h+1]/255,u=p[h+2]/255;if((i!==0||s!==0)&&(d=k(d+z+re),x=k(x+H+ve),u=k(u+X+re)),c!==0){const l=Math.max(d,x,u),S=Math.min(d,x,u),T=l-S,v=(d+x+u)/3,F=c>0?c*(1-T):c*(.35+T*.65);d=k(v+(d-v)*(1+F)),x=k(v+(x-v)*(1+F)),u=k(v+(u-v)*(1+F))}if(m!==0&&(d=k(Math.pow(d,M)),x=k(Math.pow(x,M)),u=k(Math.pow(u,M))),o!==0||y!==0||w!==0||f!==0||b!==0||E!==0){const l=.2126*d+.7152*x+.0722*u,S=1-W(.18,.62,l),T=1-W(.04,.32,l),v=W(.38,.84,l),F=W(.7,.98,l),C=ne(l),_=y*S*.28+o*v*.24+f*T*.2+w*F*.2+b*C*.18+E*(.12+S*.06);if(d=k(d+_),x=k(x+_),u=k(u+_),E>0){const U=(d+x+u)/3,$=E*.16;d=k(d*(1-$)+U*$),x=k(x*(1-$)+U*$),u=k(u*(1-$)+U*$)}}p[h]=Math.round(d*255),p[h+1]=Math.round(x*255),p[h+2]=Math.round(u*255)}if(g>1e-4||P>1e-4){const h=new Uint8ClampedArray(p),d=t*4;for(let x=1;x<r-1;x++)for(let u=1;u<t-1;u++){const l=x*d+u*4,S=(h[l-4]+h[l+4]+h[l-d]+h[l+d]+h[l]*4)/8,T=(h[l-3]+h[l+5]+h[l-d+1]+h[l+d+1]+h[l+1]*4)/8,v=(h[l-2]+h[l+6]+h[l-d+2]+h[l+d+2]+h[l+2]*4)/8,F=(.2126*h[l]+.7152*h[l+1]+.0722*h[l+2])/255,C=Math.min(1.8,g*1.45+P*.9*ne(F));p[l]=A(h[l]+(h[l]-S)*C),p[l+1]=A(h[l+1]+(h[l+1]-T)*C),p[l+2]=A(h[l+2]+(h[l+2]-v)*C)}}if(I>1e-4){const h=I*26;for(let d=0;d<r;d++)for(let x=0;x<t;x++){const u=(d*t+x)*4,l=(.2126*p[u]+.7152*p[u+1]+.0722*p[u+2])/255,S=.4+ne(l)*.9,T=(we(x,d)-.5)*h*S,v=(we(x,d,1)-.5)*h*.22*I;p[u]=A(p[u]+T+v),p[u+1]=A(p[u+1]+T*.88),p[u+2]=A(p[u+2]+T-v)}}if(Y>1e-4){const h=(t-1)/2,d=(r-1)/2,x=Math.sqrt(h*h+d*d)||1;for(let u=0;u<r;u++)for(let l=0;l<t;l++){const S=(u*t+l)*4,T=l-h,v=u-d,F=Math.sqrt(T*T+v*v)/x,C=1-W(.32,1,F)*Y*.62;p[S]=A(p[S]*C),p[S+1]=A(p[S+1]*C),p[S+2]=A(p[S+2]*C)}}e.putImageData(a,0,0)}function rt(e,t,r,n,a,i=1,s,c=!0){const m=q(n,a);e.width=Math.max(2,Math.round(m.w*i)),e.height=Math.max(2,Math.round(m.h*i));const o=e.getContext("2d");if(!o)return;const y=ke(n.w,n.h,a.rotation),w=a.crop??{x:0,y:0,width:y.w,height:y.h},f=a.scale?.fit??"force",{src:b,dst:g}=ae({width:w.width,height:w.height},m,f);f==="contain"&&(o.fillStyle="#000",o.fillRect(0,0,e.width,e.height)),o.filter=ie(a.filters,a.filterPreset),o.save(),f==="contain"&&(o.beginPath(),o.rect(i*g.x,i*g.y,i*g.width,i*g.height),o.clip()),o.translate(i*g.x,i*g.y),o.scale(i*g.width/b.width,i*g.height/b.height),o.translate(-(w.x+b.x),-(w.y+b.y)),o.translate(y.w/2,y.h/2),o.rotate(a.rotation*Se),o.scale(a.flipX?-1:1,a.flipY?-1:1);const P=ae({width:r.w,height:r.h},{w:n.w,h:n.h},"cover");if(o.drawImage(t,P.src.x,P.src.y,P.src.width,P.src.height,-n.w/2,-n.h/2,n.w,n.h),o.restore(),o.filter="none",Me(o,e.width,e.height,a.filters),c&&a.overlays?.length){const I=Number.isFinite(a?.__mePreviewTimelineTime)?Number(a.__mePreviewTimelineTime):null,E=I==null?a.overlays:Ye(a.overlays,I),Y=E.map((M,z)=>({overlay:M,index:z})).filter(M=>he(M.overlay)).sort((M,z)=>{const H=ue(z.overlay)-ue(M.overlay);if(H!==0)return H;const X=de(M.overlay)-de(z.overlay);return Math.abs(X)>1e-6?X:M.index-z.index}),R=E.filter(M=>!he(M));o.setTransform(i,0,0,i,0,0),Y.forEach(M=>{if(M.overlay?.type==="filter"){o.setTransform(1,0,0,1,0,0),et(o,e.width,e.height,M.overlay),o.setTransform(i,0,0,i,0,0);return}if(M.overlay?.type==="adjust"){o.setTransform(1,0,0,1,0,0),tt(o,e.width,e.height,M.overlay),o.setTransform(i,0,0,i,0,0);return}Z(o,M.overlay,s)}),ee(o,R,s),o.setTransform(1,0,0,1,0,0)}}function at(e,t){return new Promise(r=>{const n=()=>{e.removeEventListener("seeked",n),r()};e.addEventListener("seeked",n),e.currentTime=Math.min(Math.max(0,t),e.duration||t)})}async function it(e,t,r=160){const n=e.duration;if(!n||!isFinite(n)||t<=0)return[];const a=e.videoWidth||16,i=e.videoHeight||9,s=Math.min(r,a),c=Math.max(1,Math.round(s*i/a)),m=document.createElement("canvas");m.width=s,m.height=c;const o=m.getContext("2d");if(!o)return[];const y=[];for(let w=0;w<t;w++)await at(e,n*(w+.5)/t),o.drawImage(e,0,0,s,c),y.push(m.toDataURL("image/jpeg",.6));return y}function ot(e,t={}){const r=t.mode??"overlay",n=document.createElement("button");n.type="button",n.className=["me-fullscreen-toggle",t.className].filter(Boolean).join(" "),n.dataset.meFullscreenToggle="true",n.dataset.mode=r,n.title="\u5168\u5C4F / \u9000\u51FA\u5168\u5C4F",n.style.cssText=[r==="overlay"?"position:absolute;left:8px;bottom:8px;z-index:30;":"position:static;","width:32px;height:32px;padding:0;","display:inline-flex;align-items:center;justify-content:center;","border:1px solid var(--me-border,#26262b);border-radius:6px;","background:var(--me-chip,#1c1c20);color:var(--me-fg,#e7e7ee);","cursor:pointer;font-size:15px;line-height:1;opacity:0.9;font:inherit;"].join(""),e.classList.add("me-fullscreen-host");const a=()=>{const c=document.fullscreenElement===e;n.textContent=c?"\xD7":"\u26F6",n.setAttribute("aria-label",c?"\u9000\u51FA\u5168\u5C4F":"\u5168\u5C4F"),e.classList.toggle("me-is-fullscreen",c),e.dataset.meFullscreen=c?"true":"false"};a();const i=()=>a(),s=()=>{(document.fullscreenElement===e?document.exitFullscreen?.():e.requestFullscreen?.())?.catch?.(()=>{})};return n.addEventListener("click",s),document.addEventListener("fullscreenchange",i),{button:n,dispose:()=>{document.removeEventListener("fullscreenchange",i),n.removeEventListener("click",s),n.remove(),e.classList.remove("me-fullscreen-host","me-is-fullscreen"),delete e.dataset.meFullscreen}}}export{Qe as buildVideoExportFormData,ot as createFullscreenToggle,Z as drawOverlay,ee as drawOverlays,rt as drawVideoFrame,qe as fitStickerBox,it as generateThumbnails,K as getOverlayRotation,Re as hitTestOverlay,pe as loadOverlayImages,me as overlayBBox,te as renderOverlaysToPng,Ve as rotateOverlay,Je as scaleOverlay,Ge as translateOverlay};
|
|
3
|
+
`);return r.length?r:[""]}function X(t){return Number.isFinite(t)&&t>=0}function Lt(t){if(!V(t))return null;const e=X(t.startAt)?Number(t.startAt):null,r=X(t.endAt)?Number(t.endAt):null;if(e==null&&r==null)return null;const n=Math.max(0,e??0),a=Math.max(n,r??n);return{start:n,end:a}}function lt(t){const e=Lt(t);return!!e&&e.end>e.start}function V(t){return t?.type==="pen"||t?.type==="line"||t?.type==="arrow"||t?.type==="rect"||t?.type==="ellipse"||t?.type==="text"||t?.type==="sticker"}function jt(t){if(!V(t)&&t?.type!=="filter"&&t?.type!=="adjust")return null;const e=X(t.startAt)?Number(t.startAt):null,r=X(t.endAt)?Number(t.endAt):null;if(e==null&&r==null)return null;const n=Math.max(0,e??0),a=Math.max(n,r??n);return{start:n,end:a}}function Xt(t,e){const r=jt(t);return r?Number.isFinite(e)?e>=r.start&&e<=r.end:!1:!0}function Yt(t,e){return t?.length?Number.isFinite(e)?t.filter(r=>Xt(r,e)):t:[]}function ht(t){return t?.type==="text"||t?.type==="sticker"||t?.type==="filter"||t?.type==="adjust"}function ut(t){return Number.isFinite(t?.timelineTrack)?Math.max(0,Math.round(Number(t.timelineTrack))):0}function dt(t){return X(t?.startAt)?Number(t.startAt):0}function G(t){const e=ct(t),r=At(t,e),n=Et(t,e),a=It(t,e),i=$t(t.text,t.textTransform),s=Pt(),c=Ot(t);s&&(s.font=c);const m=i.map(b=>{const g=b===""?" ":b;return s?s.measureText(g).width:Math.max(1,g.length)*e*.6}),o=m.length?Math.max(...m):e*.6,y=Math.max(e,i.length*a),w=Math.max(Number.isFinite(t.width)?t.width:0,o+r*2),f=y+n*2;return{font:c,fontSize:e,paddingX:r,paddingY:n,lineHeight:a,lines:i,widths:m,boxWidth:w,boxHeight:f,align:Wt(t)}}function Dt(t,e,r){return e.align==="center"?t.x+e.boxWidth/2-r/2:e.align==="right"?t.x+e.boxWidth-e.paddingX-r:t.x+e.paddingX}function Ht(t,e,r,n,a,i){if(!e.textDecoration||i<=0)return;const s=r.fontSize,c=String(e.textDecoration).includes("underline"),m=String(e.textDecoration).includes("line-through");if(!(!c&&!m)){if(t.save(),t.strokeStyle=e.color||"#fff",t.lineWidth=Math.max(1,s/18),c){const o=a+s+Math.max(1,s*.08);t.beginPath(),t.moveTo(n,o),t.lineTo(n+i,o),t.stroke()}if(m){const o=a+s*.56;t.beginPath(),t.moveTo(n,o),t.lineTo(n+i,o),t.stroke()}t.restore()}}function K(t){return st(t.rotation??0)}function mt(t){switch(t.type){case"pen":{let e=1/0,r=1/0,n=-1/0,a=-1/0;for(let i=0;i<t.points.length;i+=2)e=Math.min(e,t.points[i]),n=Math.max(n,t.points[i]),r=Math.min(r,t.points[i+1]),a=Math.max(a,t.points[i+1]);return{x:e,y:r,w:n-e,h:a-r}}case"line":case"arrow":return{x:Math.min(t.x1,t.x2),y:Math.min(t.y1,t.y2),w:Math.abs(t.x2-t.x1),h:Math.abs(t.y2-t.y1)};case"rect":case"ellipse":case"sticker":return{x:t.x,y:t.y,w:t.w,h:t.h};case"text":{const e=G(t);return{x:t.x,y:t.y,w:e.boxWidth,h:e.boxHeight}}}}function Q(t){const e=mt(t);return{x:e.x+e.w/2,y:e.y+e.h/2}}function Rt(t,e,r,n,a){const i=a*ot,s=Math.cos(i),c=Math.sin(i),m=t-r,o=e-n;return{x:r+m*s-o*c,y:n+m*c+o*s}}function ft(t,e,r,n,a){return{x:r+(t-r)*a,y:n+(e-n)*a}}function Z(t,e,r){const n=K(e);if(n){const a=Q(e);t.save(),t.translate(a.x,a.y),t.rotate(n*ot),t.translate(-a.x,-a.y),xt(t,e,r),t.restore();return}xt(t,e,r)}function xt(t,e,r){switch(e.type){case"pen":{R(t,e.color,e.width),t.beginPath(),t.moveTo(e.points[0],e.points[1]);for(let n=2;n<e.points.length;n+=2)t.lineTo(e.points[n],e.points[n+1]);t.stroke();break}case"line":case"arrow":{R(t,e.color,e.width),t.beginPath(),t.moveTo(e.x1,e.y1),t.lineTo(e.x2,e.y2),t.stroke(),e.type==="arrow"&&Nt(t,e.x1,e.y1,e.x2,e.y2,e.width);break}case"rect":{R(t,e.color,e.width),t.strokeRect(e.x,e.y,e.w,e.h);break}case"ellipse":{R(t,e.color,e.width),t.beginPath(),t.ellipse(e.x+e.w/2,e.y+e.h/2,Math.abs(e.w/2),Math.abs(e.h/2),0,0,Math.PI*2),t.stroke();break}case"text":{const n=G(e),a=Number.isFinite(e.opacity)?Math.min(1,Math.max(0,e.opacity/100)):1,i=Number.isFinite(e.borderWidth)?Math.max(0,e.borderWidth):0,s=e.autoOutline!==!1;t.save(),t.globalAlpha*=a,e.backgroundColor&&e.backgroundColor!=="transparent"&&(t.fillStyle=e.backgroundColor,t.fillRect(e.x,e.y,n.boxWidth,n.boxHeight)),t.fillStyle=e.color||"#fff",t.font=n.font,t.textBaseline="top",t.lineJoin="round";const c=e.boxShadow;c&&(t.shadowColor=c.color||"transparent",t.shadowOffsetX=c.x||0,t.shadowOffsetY=c.y||0,t.shadowBlur=c.blur||0),n.lines.forEach((m,o)=>{const y=n.widths[o]??0,w=Dt(e,n,y),f=e.y+n.paddingY+o*n.lineHeight;(i>0||s)&&(t.strokeStyle=i>0?e.borderColor||"#000":e.strokeColor||"rgba(0,0,0,0.45)",t.lineWidth=i>0?i:Math.max(1,n.fontSize/18),t.strokeText(m,w,f)),t.fillText(m,w,f),Ht(t,e,n,w,f,y)}),t.restore();break}case"sticker":{if(e.emoji){const n=Ct(e);t.save(),t.font=`${n.size}px -apple-system, "Apple Color Emoji", "Segoe UI Emoji", sans-serif`,t.textAlign="center",t.textBaseline="middle",t.fillText(e.emoji,n.x+n.size/2,n.y+n.size/2),t.restore()}else if(e.src){const n=r?.get(e.src);n&&t.drawImage(n,e.x,e.y,e.w,e.h)}break}}}function tt(t,e,r){for(const n of e)Z(t,n,r)}async function pt(t){const e=new Map,r=[...new Set(t.filter(n=>n.type==="sticker"&&n.src).map(n=>n.src))];return await Promise.all(r.map(n=>new Promise(a=>{const i=new Image;i.onload=()=>{e.set(n,i),a()},i.onerror=()=>a(),i.src=n}))),e}async function et(t,e,r){if(!t?.length)return null;const n=document.createElement("canvas");n.width=e,n.height=r;const a=n.getContext("2d");if(!a)return null;const i=await pt(t);return tt(a,t,i),new Promise(s=>n.toBlob(c=>s(c),"image/png"))}function Bt(t,e,r,n=12){for(let a=t.length-1;a>=0;a--){const i=t[a];if(Ut(i,e,r,n))return a}return-1}function _t(t,e,r,n,a){return Math.abs(t-r)<=a&&Math.abs(e-n)<=a}function gt(t,e,r,n,a,i,s){const c=a-r,m=i-n,o=c*c+m*m||1,y=Math.max(0,Math.min(1,((t-r)*c+(e-n)*m)/o)),w=r+y*c,f=n+y*m;return(t-w)**2+(e-f)**2<=s*s}function Ut(t,e,r,n){const a=K(t);if(a){const i=Q(t),s=Rt(e,r,i.x,i.y,-a);return yt(t,s.x,s.y,n)}return yt(t,e,r,n)}function yt(t,e,r,n){switch(t.type){case"pen":{for(let a=0;a+3<t.points.length;a+=2)if(gt(e,r,t.points[a],t.points[a+1],t.points[a+2],t.points[a+3],n+t.width/2))return!0;return!1}case"line":case"arrow":return gt(e,r,t.x1,t.y1,t.x2,t.y2,n+t.width/2);case"rect":case"ellipse":return e>=t.x-n&&e<=t.x+t.w+n&&r>=t.y-n&&r<=t.y+t.h+n;case"text":{const a=G(t);return e>=t.x-n&&e<=t.x+a.boxWidth+n&&r>=t.y-n&&r<=t.y+a.boxHeight+n}case"sticker":return _t(e,r,t.x+t.w/2,t.y+t.h/2,Math.max(t.w,t.h)/2+n)}}function qt(t,e,r){const n=Math.max(8,r);if(!(t>0)||!(e>0))return{w:n,h:n};const a=n/Math.max(t,e);return{w:Math.max(8,Math.round(t*a)),h:Math.max(8,Math.round(e*a))}}function Jt(t,e){const r=Math.max(.05,e),n=Q(t);switch(t.type){case"pen":return{...t,points:t.points.map((a,i)=>i%2===0?n.x+(a-n.x)*r:n.y+(a-n.y)*r)};case"line":case"arrow":{const a=ft(t.x1,t.y1,n.x,n.y,r),i=ft(t.x2,t.y2,n.x,n.y,r);return{...t,x1:a.x,y1:a.y,x2:i.x,y2:i.y}}case"rect":case"ellipse":case"sticker":return{...t,w:Math.max(8,t.w*r),h:Math.max(8,t.h*r)};case"text":return{...t,fontSize:Math.min(512,Math.max(8,t.fontSize*r)),width:Number.isFinite(t.width)?Math.max(80,t.width*r):t.width,paddingX:Number.isFinite(t.paddingX)?Math.max(0,t.paddingX*r):t.paddingX,paddingY:Number.isFinite(t.paddingY)?Math.max(0,t.paddingY*r):t.paddingY,borderWidth:Number.isFinite(t.borderWidth)?Math.max(0,t.borderWidth*r):t.borderWidth,boxShadow:t.boxShadow?{...t.boxShadow,x:(t.boxShadow.x||0)*r,y:(t.boxShadow.y||0)*r,blur:(t.boxShadow.blur||0)*r}:t.boxShadow};default:return t}}function Vt(t,e){return{...t,rotation:st(e)}}function Gt(t,e,r){switch(t.type){case"pen":{const n=t.points.map((a,i)=>i%2===0?a+e:a+r);return{...t,points:n}}case"line":case"arrow":return{...t,x1:t.x1+e,y1:t.y1+r,x2:t.x2+e,y2:t.y2+r};case"rect":case"ellipse":case"sticker":return{...t,x:t.x+e,y:t.y+r};case"text":return{...t,x:t.x+e,y:t.y+r}}}function L(t,e){const r=Math.min(8192,Math.max(2,Math.round(Number(t)||e)));return r%2===0?r:r-1}function ce(t){const e=q(t.canvas,t),r=t?.exportSettings??null;if(!r)return e;const n=Number.isFinite(Number(r.width))&&Number(r.width)>0,a=Number.isFinite(Number(r.height))&&Number(r.height)>0;if(!n&&!a)return e;const i=e.w>0&&e.h>0?e.w/e.h:1;if(n&&a)return{w:L(r.width,e.w),h:L(r.height,e.h)};if(n){const c=L(r.width,e.w);return{w:c,h:L(c/i,e.h)}}const s=L(r.height,e.h);return{w:L(s*i,e.w),h:s}}function Kt(t){const e=String(t??"").match(/^data:(image\/(?:png|jpe?g));base64,([a-z0-9+/=]+)$/i);if(!e)return null;const r=atob(e[2]),n=new Uint8Array(r.length);for(let a=0;a<r.length;a++)n[a]=r.charCodeAt(a);return new Blob([n],{type:e[1].toLowerCase()})}async function Qt(t,e,r=[]){const n=t.getExportPlan(),a=new FormData;n.videoSrcOrder.forEach((f,b)=>{const g=e[f];g&&a.append(`video_${b}`,g,g.name||`video_${b}.mp4`)}),n.audioSrcOrder.forEach((f,b)=>{const g=r[f];g&&a.append(`audio_${b}`,g,g.name||`audio_${b}`)});const i=q(n.state.canvas,n.state),s=n.state.overlays??[],c=s.filter(f=>lt(f)),m=s.filter(f=>!lt(f)&&V(f)),o=await et(m,i.w,i.h);o&&a.append("overlay",o,"overlay.png");for(let f=0;f<c.length;f++){const b=await et([c[f]],i.w,i.h);b&&a.append(`textOverlay_${f}`,b,`text-overlay-${f}.png`)}const y=n.state.poster?.useAsVideoCover?Kt(n.state.poster.preview):null;y&&a.append("videoCover",y,"video-cover.png");const w=n.state.poster?.preview?{...n.state,poster:{...n.state.poster,preview:void 0}}:n.state;return a.append("editState",JSON.stringify(w)),a}function N(t){return Math.max(-1,Math.min(1,Number(t)||0))}function j(t){return Math.max(0,Math.min(1,Number(t)||0))}function S(t){return Math.max(0,Math.min(1,t))}function P(t){return Math.max(0,Math.min(255,t))}function W(t,e,r){if(t===e)return r<t?0:1;const n=Math.max(0,Math.min(1,(r-t)/(e-t)));return n*n*(3-2*n)}function nt(t){const e=W(.08,.4,t),r=1-W(.6,.92,t);return S(e*r*2.2)}function wt(t,e,r=0){const n=Math.sin(t*12.9898+e*78.233+r*37.719)*43758.5453;return n-Math.floor(n)}var O=null;function Zt(t,e){return typeof document>"u"?null:(O??(O=document.createElement("canvas")),O.width!==t&&(O.width=t),O.height!==e&&(O.height=e),O)}function bt(t,e,r,n){if(!n||n==="none")return;const a=Zt(e,r),i=a?.getContext("2d");!a||!i||(i.setTransform(1,0,0,1,0,0),i.clearRect(0,0,e,r),i.drawImage(t.canvas,0,0,e,r),t.save(),t.setTransform(1,0,0,1,0,0),t.clearRect(0,0,e,r),t.filter=n,t.drawImage(a,0,0,e,r),t.restore(),t.filter="none")}function te(t,e,r,n){const a=Tt(n?.filterPreset)?.css??"";bt(t,e,r,a)}function ee(t,e,r,n){bt(t,e,r,it(n??{},"")),Mt(t,e,r,n??{})}function ne(t={}){return["temperature","tint","vibrance","gamma","highlights","shadows","whites","blacks","lightSense"].some(e=>Math.abs(N(t[e]))>1e-4)?!0:["sharpen","clarity","grain","fade","vignette"].some(e=>j(t[e])>1e-4)}function Mt(t,e,r,n={}){if(!ne(n))return;let a;try{a=t.getImageData(0,0,e,r)}catch{return}const i=N(n.temperature),s=N(n.tint),c=N(n.vibrance),m=N(n.gamma),o=N(n.highlights),y=N(n.shadows),w=N(n.whites),f=N(n.blacks),b=N(n.lightSense),g=j(n.sharpen),A=j(n.clarity),z=j(n.grain),E=j(n.fade),Y=j(n.vignette),B=1+m*(m>0?1:.5),M=m===0?1:1/Math.max(.01,B),I=i*.18,D=i*.02,H=-i*.18,rt=s*.1,vt=-s*.12,p=a.data;for(let h=0;h<p.length;h+=4){let d=p[h]/255,x=p[h+1]/255,u=p[h+2]/255;if((i!==0||s!==0)&&(d=S(d+I+rt),x=S(x+D+vt),u=S(u+H+rt)),c!==0){const l=Math.max(d,x,u),F=Math.min(d,x,u),T=l-F,v=(d+x+u)/3,k=c>0?c*(1-T):c*(.35+T*.65);d=S(v+(d-v)*(1+k)),x=S(v+(x-v)*(1+k)),u=S(v+(u-v)*(1+k))}if(m!==0&&(d=S(Math.pow(d,M)),x=S(Math.pow(x,M)),u=S(Math.pow(u,M))),o!==0||y!==0||w!==0||f!==0||b!==0||E!==0){const l=.2126*d+.7152*x+.0722*u,F=1-W(.18,.62,l),T=1-W(.04,.32,l),v=W(.38,.84,l),k=W(.7,.98,l),C=nt(l),_=y*F*.28+o*v*.24+f*T*.2+w*k*.2+b*C*.18+E*(.12+F*.06);if(d=S(d+_),x=S(x+_),u=S(u+_),E>0){const U=(d+x+u)/3,$=E*.16;d=S(d*(1-$)+U*$),x=S(x*(1-$)+U*$),u=S(u*(1-$)+U*$)}}p[h]=Math.round(d*255),p[h+1]=Math.round(x*255),p[h+2]=Math.round(u*255)}if(g>1e-4||A>1e-4){const h=new Uint8ClampedArray(p),d=e*4;for(let x=1;x<r-1;x++)for(let u=1;u<e-1;u++){const l=x*d+u*4,F=(h[l-4]+h[l+4]+h[l-d]+h[l+d]+h[l]*4)/8,T=(h[l-3]+h[l+5]+h[l-d+1]+h[l+d+1]+h[l+1]*4)/8,v=(h[l-2]+h[l+6]+h[l-d+2]+h[l+d+2]+h[l+2]*4)/8,k=(.2126*h[l]+.7152*h[l+1]+.0722*h[l+2])/255,C=Math.min(1.8,g*1.45+A*.9*nt(k));p[l]=P(h[l]+(h[l]-F)*C),p[l+1]=P(h[l+1]+(h[l+1]-T)*C),p[l+2]=P(h[l+2]+(h[l+2]-v)*C)}}if(z>1e-4){const h=z*26;for(let d=0;d<r;d++)for(let x=0;x<e;x++){const u=(d*e+x)*4,l=(.2126*p[u]+.7152*p[u+1]+.0722*p[u+2])/255,F=.4+nt(l)*.9,T=(wt(x,d)-.5)*h*F,v=(wt(x,d,1)-.5)*h*.22*z;p[u]=P(p[u]+T+v),p[u+1]=P(p[u+1]+T*.88),p[u+2]=P(p[u+2]+T-v)}}if(Y>1e-4){const h=(e-1)/2,d=(r-1)/2,x=Math.sqrt(h*h+d*d)||1;for(let u=0;u<r;u++)for(let l=0;l<e;l++){const F=(u*e+l)*4,T=l-h,v=u-d,k=Math.sqrt(T*T+v*v)/x,C=1-W(.32,1,k)*Y*.62;p[F]=P(p[F]*C),p[F+1]=P(p[F+1]*C),p[F+2]=P(p[F+2]*C)}}t.putImageData(a,0,0)}function re(t,e,r,n,a,i=1,s,c=!0){const m=q(n,a);t.width=Math.max(2,Math.round(m.w*i)),t.height=Math.max(2,Math.round(m.h*i));const o=t.getContext("2d");if(!o)return;const y=St(n.w,n.h,a.rotation),w=a.crop??{x:0,y:0,width:y.w,height:y.h},f=a.scale?.fit??"force",{src:b,dst:g}=at({width:w.width,height:w.height},m,f);f==="contain"&&(o.fillStyle="#000",o.fillRect(0,0,t.width,t.height)),o.filter=it(a.filters,a.filterPreset),o.save(),f==="contain"&&(o.beginPath(),o.rect(i*g.x,i*g.y,i*g.width,i*g.height),o.clip()),o.translate(i*g.x,i*g.y),o.scale(i*g.width/b.width,i*g.height/b.height),o.translate(-(w.x+b.x),-(w.y+b.y)),o.translate(y.w/2,y.h/2),o.rotate(a.rotation*Ft),o.scale(a.flipX?-1:1,a.flipY?-1:1);const A=at({width:r.w,height:r.h},{w:n.w,h:n.h},"cover");if(o.drawImage(e,A.src.x,A.src.y,A.src.width,A.src.height,-n.w/2,-n.h/2,n.w,n.h),o.restore(),o.filter="none",Mt(o,t.width,t.height,a.filters),c&&a.overlays?.length){const z=Number.isFinite(a?.__mePreviewTimelineTime)?Number(a.__mePreviewTimelineTime):null,E=z==null?a.overlays:Yt(a.overlays,z),Y=E.map((M,I)=>({overlay:M,index:I})).filter(M=>ht(M.overlay)).sort((M,I)=>{const D=ut(I.overlay)-ut(M.overlay);if(D!==0)return D;const H=dt(M.overlay)-dt(I.overlay);return Math.abs(H)>1e-6?H:M.index-I.index}),B=E.filter(M=>!ht(M));o.setTransform(i,0,0,i,0,0),Y.forEach(M=>{if(M.overlay?.type==="filter"){o.setTransform(1,0,0,1,0,0),te(o,t.width,t.height,M.overlay),o.setTransform(i,0,0,i,0,0);return}if(M.overlay?.type==="adjust"){o.setTransform(1,0,0,1,0,0),ee(o,t.width,t.height,M.overlay),o.setTransform(i,0,0,i,0,0);return}Z(o,M.overlay,s)}),tt(o,B,s),o.setTransform(1,0,0,1,0,0)}}function ae(t,e){return new Promise(r=>{const n=()=>{t.removeEventListener("seeked",n),r()};t.addEventListener("seeked",n),t.currentTime=Math.min(Math.max(0,e),t.duration||e)})}async function ie(t,e,r=160){const n=t.duration;if(!n||!isFinite(n)||e<=0)return[];const a=t.videoWidth||16,i=t.videoHeight||9,s=Math.min(r,a),c=Math.max(1,Math.round(s*i/a)),m=document.createElement("canvas");m.width=s,m.height=c;const o=m.getContext("2d");if(!o)return[];const y=[];for(let w=0;w<e;w++)await ae(t,n*(w+.5)/e),o.drawImage(t,0,0,s,c),y.push(m.toDataURL("image/jpeg",.6));return y}function oe(t,e={}){const r=e.mode??"overlay",n=document.createElement("button");n.type="button",n.className=["me-fullscreen-toggle",e.className].filter(Boolean).join(" "),n.dataset.meFullscreenToggle="true",n.dataset.mode=r,n.title="\u5168\u5C4F / \u9000\u51FA\u5168\u5C4F",n.style.cssText=[r==="overlay"?"position:absolute;left:8px;bottom:8px;z-index:30;":"position:static;","width:32px;height:32px;padding:0;","display:inline-flex;align-items:center;justify-content:center;","border:1px solid var(--me-border,#26262b);border-radius:6px;","background:var(--me-chip,#1c1c20);color:var(--me-fg,#e7e7ee);","cursor:pointer;font-size:15px;line-height:1;opacity:0.9;font:inherit;"].join(""),t.classList.add("me-fullscreen-host");const a=()=>{const c=document.fullscreenElement===t;n.textContent=c?"\xD7":"\u26F6",n.setAttribute("aria-label",c?"\u9000\u51FA\u5168\u5C4F":"\u5168\u5C4F"),t.classList.toggle("me-is-fullscreen",c),t.dataset.meFullscreen=c?"true":"false"};a();const i=()=>a(),s=()=>{(document.fullscreenElement===t?document.exitFullscreen?.():t.requestFullscreen?.())?.catch?.(()=>{})};return n.addEventListener("click",s),document.addEventListener("fullscreenchange",i),{button:n,dispose:()=>{document.removeEventListener("fullscreenchange",i),n.removeEventListener("click",s),n.remove(),t.classList.remove("me-fullscreen-host","me-is-fullscreen"),delete t.dataset.meFullscreen}}}export{Qt as buildVideoExportFormData,oe as createFullscreenToggle,Z as drawOverlay,tt as drawOverlays,re as drawVideoFrame,qt as fitStickerBox,ie as generateThumbnails,K as getOverlayRotation,Bt as hitTestOverlay,pt as loadOverlayImages,mt as overlayBBox,et as renderOverlaysToPng,Vt as rotateOverlay,Jt as scaleOverlay,Gt as translateOverlay};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{z as t}from"../zod/index.js";var c={color:t.string().max(32),width:t.number().positive().max(200)},m={rotation:t.number().min(-180).max(180).optional()},s={startAt:t.number().min(0).optional(),endAt:t.number().min(0).optional(),timelineTrack:t.number().int().min(0).max(99).optional()},f=t.discriminatedUnion("type",[t.object({type:t.literal("pen"),points:t.array(t.number()).min(4),...c,...s,...m}),t.object({type:t.literal("line"),x1:t.number(),y1:t.number(),x2:t.number(),y2:t.number(),...c,...s,...m}),t.object({type:t.literal("arrow"),x1:t.number(),y1:t.number(),x2:t.number(),y2:t.number(),...c,...s,...m}),t.object({type:t.literal("rect"),x:t.number(),y:t.number(),w:t.number(),h:t.number(),...c,...s,...m}),t.object({type:t.literal("ellipse"),x:t.number(),y:t.number(),w:t.number(),h:t.number(),...c,...s,...m}),t.object({type:t.literal("text"),x:t.number(),y:t.number(),text:t.string().max(500),color:t.string().max(32),fontSize:t.number().positive().max(512),startAt:t.number().min(0).optional(),endAt:t.number().min(0).optional(),timelineTrack:t.number().int().min(0).max(99).optional(),...m}),t.object({type:t.literal("sticker"),x:t.number().optional(),y:t.number().optional(),w:t.number().positive().optional(),h:t.number().positive().optional(),emoji:t.string().max(16).optional(),src:t.string().optional(),startAt:t.number().min(0).optional(),endAt:t.number().min(0).optional(),timelineTrack:t.number().int().min(0).max(99).optional(),...m}),t.object({type:t.literal("filter"),x:t.number().optional(),y:t.number().optional(),w:t.number().positive().optional(),h:t.number().positive().optional(),filterPreset:t.string().max(32).optional(),...s,...m}),t.object({type:t.literal("adjust"),x:t.number(),y:t.number(),w:t.number().positive(),h:t.number().positive(),brightness:t.number().min(-1).max(1).default(0),contrast:t.number().min(-1).max(1).default(0),saturation:t.number().min(-1).max(1).default(0),temperature:t.number().min(-1).max(1).default(0),tint:t.number().min(-1).max(1).default(0),vibrance:t.number().min(-1).max(1).default(0),gamma:t.number().min(-1).max(1).default(0),highlights:t.number().min(-1).max(1).default(0),shadows:t.number().min(-1).max(1).default(0),whites:t.number().min(-1).max(1).default(0),blacks:t.number().min(-1).max(1).default(0),lightSense:t.number().min(-1).max(1).default(0),sharpen:t.number().min(0).max(1).default(0),clarity:t.number().min(0).max(1).default(0),grain:t.number().min(0).max(1).default(0),fade:t.number().min(0).max(1).default(0),vignette:t.number().min(0).max(1).default(0),...s,...m})]),x=t.object({srcIdx:t.number().int().min(0).max(7),in:t.number().min(0),out:t.number().min(0)}),h=t.object({srcIdx:t.number().int().min(0).max(2),track:t.number().int().min(0).default(0),startAt:t.number().min(0),in:t.number().min(0),out:t.number().min(0),speed:t.number().min(.5).max(2).default(1),volume:t.number().min(0).max(2),fadeIn:t.number().min(0).default(0),fadeOut:t.number().min(0).default(0)}),C=t.object({type:t.enum(["none","fade","slide","wipe","flip","clockWipe","star","circle","rectangle"]).default("none"),duration:t.number().min(0).max(2).default(.4)}),I=t.object({fileName:t.string().max(120).optional(),format:t.enum(["mp4","mov","mxf"]).default("mp4"),width:t.number().int().min(2).max(8192).optional(),height:t.number().int().min(2).max(8192).optional(),frameRate:t.number().int().min(12).max(120).default(30),videoBitrateKbps:t.number().int().min(100).max(5e4).optional(),audioBitrateKbps:t.number().int().min(32).max(1024).optional(),audioCodec:t.enum(["aac","mp3"]).default("aac")}).optional(),j=t.object({clips:t.array(x).min(1).max(50),audioClips:t.array(h).max(8).default([]),canvas:t.object({w:t.number().int().min(2).max(4096),h:t.number().int().min(2).max(4096)}),crop:t.object({x:t.number().min(0),y:t.number().min(0),width:t.number().positive(),height:t.number().positive()}).optional(),scale:t.object({width:t.number().positive(),height:t.number().positive(),fit:t.enum(["contain","cover","force"])}).optional(),rotation:t.number().min(-180).max(180).default(0),flipX:t.boolean().default(!1),flipY:t.boolean().default(!1),filters:t.object({brightness:t.number().min(-1).max(1).default(0),contrast:t.number().min(-1).max(1).default(0),saturation:t.number().min(-1).max(1).default(0),temperature:t.number().min(-1).max(1).default(0),tint:t.number().min(-1).max(1).default(0),vibrance:t.number().min(-1).max(1).default(0),gamma:t.number().min(-1).max(1).default(0),highlights:t.number().min(-1).max(1).default(0),shadows:t.number().min(-1).max(1).default(0),whites:t.number().min(-1).max(1).default(0),blacks:t.number().min(-1).max(1).default(0),lightSense:t.number().min(-1).max(1).default(0),sharpen:t.number().min(0).max(1).default(0),clarity:t.number().min(0).max(1).default(0),grain:t.number().min(0).max(1).default(0),fade:t.number().min(0).max(1).default(0),vignette:t.number().min(0).max(1).default(0)}).default({brightness:0,contrast:0,saturation:0,temperature:0,tint:0,vibrance:0,gamma:0,highlights:0,shadows:0,whites:0,blacks:0,lightSense:0,sharpen:0,clarity:0,grain:0,fade:0,vignette:0}),filterPreset:t.string().max(32).optional(),overlays:t.array(f).max(200).optional(),transitions:t.array(C).max(49).default([]),keepAudio:t.boolean().default(!0),poster:t.object({time:t.number().min(0),useAsVideoCover:t.boolean().optional(),preview:t.string().optional()}).optional(),exportSettings:I}).superRefine((e,
|
|
1
|
+
import{z as t}from"../zod/index.js";var c={color:t.string().max(32),width:t.number().positive().max(200)},m={rotation:t.number().min(-180).max(180).optional()},s={startAt:t.number().min(0).optional(),endAt:t.number().min(0).optional(),timelineTrack:t.number().int().min(0).max(99).optional()},f=t.discriminatedUnion("type",[t.object({type:t.literal("pen"),points:t.array(t.number()).min(4),...c,...s,...m}),t.object({type:t.literal("line"),x1:t.number(),y1:t.number(),x2:t.number(),y2:t.number(),...c,...s,...m}),t.object({type:t.literal("arrow"),x1:t.number(),y1:t.number(),x2:t.number(),y2:t.number(),...c,...s,...m}),t.object({type:t.literal("rect"),x:t.number(),y:t.number(),w:t.number(),h:t.number(),...c,...s,...m}),t.object({type:t.literal("ellipse"),x:t.number(),y:t.number(),w:t.number(),h:t.number(),...c,...s,...m}),t.object({type:t.literal("text"),x:t.number(),y:t.number(),text:t.string().max(500),color:t.string().max(32),fontSize:t.number().positive().max(512),startAt:t.number().min(0).optional(),endAt:t.number().min(0).optional(),timelineTrack:t.number().int().min(0).max(99).optional(),...m}),t.object({type:t.literal("sticker"),x:t.number().optional(),y:t.number().optional(),w:t.number().positive().optional(),h:t.number().positive().optional(),emoji:t.string().max(16).optional(),src:t.string().optional(),startAt:t.number().min(0).optional(),endAt:t.number().min(0).optional(),timelineTrack:t.number().int().min(0).max(99).optional(),...m}),t.object({type:t.literal("filter"),x:t.number().optional(),y:t.number().optional(),w:t.number().positive().optional(),h:t.number().positive().optional(),filterPreset:t.string().max(32).optional(),...s,...m}),t.object({type:t.literal("adjust"),x:t.number(),y:t.number(),w:t.number().positive(),h:t.number().positive(),brightness:t.number().min(-1).max(1).default(0),contrast:t.number().min(-1).max(1).default(0),saturation:t.number().min(-1).max(1).default(0),temperature:t.number().min(-1).max(1).default(0),tint:t.number().min(-1).max(1).default(0),vibrance:t.number().min(-1).max(1).default(0),gamma:t.number().min(-1).max(1).default(0),highlights:t.number().min(-1).max(1).default(0),shadows:t.number().min(-1).max(1).default(0),whites:t.number().min(-1).max(1).default(0),blacks:t.number().min(-1).max(1).default(0),lightSense:t.number().min(-1).max(1).default(0),sharpen:t.number().min(0).max(1).default(0),clarity:t.number().min(0).max(1).default(0),grain:t.number().min(0).max(1).default(0),fade:t.number().min(0).max(1).default(0),vignette:t.number().min(0).max(1).default(0),...s,...m})]),x=t.object({srcIdx:t.number().int().min(0).max(7),in:t.number().min(0),out:t.number().min(0)}),h=t.object({srcIdx:t.number().int().min(0).max(2),track:t.number().int().min(0).default(0),startAt:t.number().min(0),in:t.number().min(0),out:t.number().min(0),speed:t.number().min(.5).max(2).default(1),volume:t.number().min(0).max(2),fadeIn:t.number().min(0).default(0),fadeOut:t.number().min(0).default(0)}),C=t.object({type:t.enum(["none","fade","slide","wipe","flip","clockWipe","star","circle","rectangle"]).default("none"),duration:t.number().min(0).max(2).default(.4)}),I=t.object({fileName:t.string().max(120).optional(),format:t.enum(["mp4","mov","mxf"]).default("mp4"),width:t.number().int().min(2).max(8192).optional(),height:t.number().int().min(2).max(8192).optional(),frameRate:t.number().int().min(12).max(120).default(30),videoBitrateKbps:t.number().int().min(100).max(5e4).optional(),audioBitrateKbps:t.number().int().min(32).max(1024).optional(),audioCodec:t.enum(["aac","mp3"]).default("aac")}).optional(),j=t.object({clips:t.array(x).min(1).max(50),audioClips:t.array(h).max(8).default([]),canvas:t.object({w:t.number().int().min(2).max(4096),h:t.number().int().min(2).max(4096)}),crop:t.object({x:t.number().min(0),y:t.number().min(0),width:t.number().positive(),height:t.number().positive()}).optional(),scale:t.object({width:t.number().positive(),height:t.number().positive(),fit:t.enum(["contain","cover","force"])}).optional(),rotation:t.number().min(-180).max(180).default(0),flipX:t.boolean().default(!1),flipY:t.boolean().default(!1),filters:t.object({brightness:t.number().min(-1).max(1).default(0),contrast:t.number().min(-1).max(1).default(0),saturation:t.number().min(-1).max(1).default(0),temperature:t.number().min(-1).max(1).default(0),tint:t.number().min(-1).max(1).default(0),vibrance:t.number().min(-1).max(1).default(0),gamma:t.number().min(-1).max(1).default(0),highlights:t.number().min(-1).max(1).default(0),shadows:t.number().min(-1).max(1).default(0),whites:t.number().min(-1).max(1).default(0),blacks:t.number().min(-1).max(1).default(0),lightSense:t.number().min(-1).max(1).default(0),sharpen:t.number().min(0).max(1).default(0),clarity:t.number().min(0).max(1).default(0),grain:t.number().min(0).max(1).default(0),fade:t.number().min(0).max(1).default(0),vignette:t.number().min(0).max(1).default(0)}).default({brightness:0,contrast:0,saturation:0,temperature:0,tint:0,vibrance:0,gamma:0,highlights:0,shadows:0,whites:0,blacks:0,lightSense:0,sharpen:0,clarity:0,grain:0,fade:0,vignette:0}),filterPreset:t.string().max(32).optional(),overlays:t.array(f).max(200).optional(),transitions:t.array(C).max(49).default([]),keepAudio:t.boolean().default(!0),poster:t.object({time:t.number().min(0),useAsVideoCover:t.boolean().optional(),preview:t.string().optional()}).optional(),exportSettings:I}).superRefine((e,i)=>{e.clips.forEach((n,a)=>{n.out<=n.in&&i.addIssue({code:t.ZodIssueCode.custom,message:`clips[${a}].out \u5FC5\u987B\u5927\u4E8E in`,path:["clips",a,"out"]})}),e.audioClips?.forEach((n,a)=>{n.out<=n.in&&i.addIssue({code:t.ZodIssueCode.custom,message:`audioClips[${a}].out \u5FC5\u987B\u5927\u4E8E in`,path:["audioClips",a,"out"]})}),(e.canvas.w%2!==0||e.canvas.h%2!==0)&&i.addIssue({code:t.ZodIssueCode.custom,message:"canvas \u5BBD\u9AD8\u5FC5\u987B\u4E3A\u5076\u6570",path:["canvas"]}),e.exportSettings?.width!=null&&e.exportSettings.width%2!==0&&i.addIssue({code:t.ZodIssueCode.custom,message:"exportSettings.width \u5FC5\u987B\u4E3A\u5076\u6570",path:["exportSettings","width"]}),e.exportSettings?.height!=null&&e.exportSettings.height%2!==0&&i.addIssue({code:t.ZodIssueCode.custom,message:"exportSettings.height \u5FC5\u987B\u4E3A\u5076\u6570",path:["exportSettings","height"]})});function S(){return{clips:[],audioClips:[],canvas:{w:2,h:2},rotation:0,flipX:!1,flipY:!1,filters:{brightness:0,contrast:0,saturation:0,temperature:0,tint:0,vibrance:0,gamma:0,highlights:0,shadows:0,whites:0,blacks:0,lightSense:0,sharpen:0,clarity:0,grain:0,fade:0,vignette:0},transitions:[],keepAudio:!0}}var o=.1;function d(e){return e.out-e.in}function g(e){return e.reduce((i,n)=>i+d(n),0)}function k(e,i){let n=0;for(let a=0;a<i&&a<e.length;a++)n+=d(e[a]);return n}function v(e,i){if(!e.length||i<0)return null;let n=0;for(let a=0;a<e.length;a++){const r=d(e[a]);if(i<n+r)return{idx:a,srcTime:e[a].in+(i-n)};n+=r}if(Math.abs(i-n)<1e-9||i<=n){const a=e.length-1;return{idx:a,srcTime:e[a].out}}return null}function E(e,i){const n=v(e,i);if(!n)return e;const a=e[n.idx];return n.srcTime<a.in+o||n.srcTime>a.out-o?e:[...e.slice(0,n.idx),{...a,out:n.srcTime},{...a,in:n.srcTime},...e.slice(n.idx+1)]}function N(e,i){return e.length<=1||!e[i]?e:e.filter((n,a)=>a!==i)}function B(e,i){const n=e[i];return n?[...e.slice(0,i+1),{...n},...e.slice(i+1)]:e}function T(e,i,n){if(i===n||!e[i]||n<0||n>=e.length)return e;const a=[...e],[r]=a.splice(i,1);return a.splice(n,0,r),a}function F(e,i,n,a,r){if(!e[i])return e;const u=e.map(l=>({...l}));return n==="in"?u[i].in=Math.min(Math.max(a,0),u[i].out-o):u[i].out=Math.max(Math.min(a,r),u[i].in+o),u}function O(e,i,n){const a=Math.max(Math.min(e.out,i),o),r=Math.min(Math.max(e.in,0),a-o),u=Math.min(Math.max(e.startAt,0),Math.max(0,n-o)),l=Math.max(o,a-r),p=Math.min(Math.max(Number(e.speed)||1,.5),2),M=Number.isInteger(e.track)&&e.track>=0?e.track:0,b=Math.min(Math.max(Number(e.fadeIn)||0,0),l),A=Math.min(Math.max(Number(e.fadeOut)||0,0),Math.max(0,l-b));return{...e,track:M,in:r,out:a,startAt:u,speed:p,fadeIn:b,fadeOut:A}}function D(e=[]){return(e??[]).reduce((i,n)=>{if(n?.type!=="text"&&n?.type!=="sticker")return i;const a=Number.isFinite(n?.startAt)?Math.max(0,Number(n.startAt)):0,r=Number.isFinite(n?.endAt)?Math.max(a,Number(n.endAt)):a;return Math.max(i,r)},0)}function Z(e,i=[],n=[]){const a=g(e),r=i.reduce((l,p)=>Math.max(l,p.startAt+(p.out-p.in)),0),u=D(n);return Math.max(a,r,u)}function P(e){return[...new Set(e.map(i=>i.srcIdx))].sort((i,n)=>i-n)}function V(e,i){const n=new Map(i.map((a,r)=>[a,r]));return e.map(a=>({...a,srcIdx:n.get(a.srcIdx)??0}))}var R=100;function z(e){return{past:[],present:e,future:[]}}function H(e,i){if(i===e.present)return e;const n=[...e.past,e.present];return n.length>R&&n.shift(),{past:n,present:i,future:[]}}function K(e,i){return i===e.present?e:{...e,present:i}}function y(e){return e.past.length>0}function w(e){return e.future.length>0}function U(e){return y(e)?{past:e.past.slice(0,-1),present:e.past[e.past.length-1],future:[e.present,...e.future]}:e}function X(e){if(!w(e))return e;const[i,...n]=e.future;return{past:[...e.past,e.present],present:i,future:n}}export{h as AudioClip,x as Clip,o as MIN_CLIP,f as Overlay,j as VideoEditState,w as canRedo,y as canUndo,O as clampAudioClip,d as clipDuration,k as clipStartsAt,Z as contentDuration,z as createHistory,S as defaultVideoEditState,B as duplicateClip,v as locateOutput,H as pushHistory,X as redo,V as remapSrcIndices,N as removeClip,T as reorderClips,K as replacePresent,E as splitAtOutput,g as totalDuration,F as trimClipEdge,U as undo,P as usedVideoSrcIndices};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var i=Math.PI/180;function o(t,h,n){const r=u(n);if(r===0||r===180)return{w:t,h};if(r===90||r===270)return{w:h,h:t};const s=r*i;return{w:Math.round(Math.abs(t*Math.cos(s))+Math.abs(h*Math.sin(s))),h:Math.round(Math.abs(t*Math.sin(s))+Math.abs(h*Math.cos(s)))}}function u(t){return(t%360+360)%360}function e(t){const h=Math.round(t);return h-h%2}function M(t,h,n=40){const r=Math.min(Math.max(n,t.width),h.w),s=Math.min(Math.max(n,t.height),h.h),l=Math.min(Math.max(0,t.x),h.w-r),w=Math.min(Math.max(0,t.y),h.h-s);return{x:Math.round(l),y:Math.round(w),width:Math.round(r),height:Math.round(s)}}function a(t,h){let n=t.w,r=n/h;return r>t.h&&(r=t.h,n=r*h),{x:Math.round((t.w-n)/2),y:Math.round((t.h-r)/2),width:Math.round(n),height:Math.round(r)}}function f(t,h,n){const r={x:0,y:0,width:t.width,height:t.height},s={x:0,y:0,width:h.w,height:h.h};return n==="cover"?{src:a({w:t.width,h:t.height},h.w/h.h),dst:s}:n==="contain"?{src:r,dst:a({w:h.w,h:h.h},t.width/t.height)}:{src:r,dst:s}}function b(t,h){if(h.scale)return{w:e(h.scale.width),h:e(h.scale.height)};if(h.crop)return{w:e(h.crop.width),h:e(h.crop.height)};const n=o(t.w,t.h,h.rotation);return{w:e(n.w),h:e(n.h)}}var c=[{id:"bw",label:"\u9ED1\u767D",vf:"hue=s=0",css:"grayscale(1)"},{id:"sepia",label:"\u590D\u53E4",vf:"colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131",css:"sepia(0.85)"},{id:"warm",label:"\u6696\u9633",vf:"colorbalance=rs=.15:gs=.04:bs=-.15",css:"sepia(0.25) saturate(1.25) brightness(1.03)"},{id:"cool",label:"\u51B7\u8C03",vf:"colorbalance=rs=-.14:bs=.16",css:"hue-rotate(12deg) saturate(0.95) brightness(1.02)"},{id:"vivid",label:"\u9C9C\u8273",vf:"eq=saturation=1.45:contrast=1.08",css:"saturate(1.45) contrast(1.08)"}];function d(t){return t?c.find(h=>h.id===t):void 0}function g(t,h){const n=d(h)?.css??"";return[`brightness(${1+t.brightness})`,`contrast(${1+t.contrast})`,`saturate(${1+t.saturation})`,n].filter(Boolean).join(" ")}export{i as DEG2RAD,c as FILTER_PRESETS,g as buildFilterCss,a as centeredMaxRect,M as clampRect,e as evenize,d as findFilterPreset,f as fitRects,u as normalizeDeg,b as outputSize,o as rotatedSize};
|
package/core/dist/engine.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var s=require("zod"),p={color:s.z.string().max(32),width:s.z.number().positive().max(200)},u={rotation:s.z.number().min(-180).max(180).optional()},A=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("pen"),points:s.z.array(s.z.number()).min(4),...p,...u}),s.z.object({type:s.z.literal("line"),x1:s.z.number(),y1:s.z.number(),x2:s.z.number(),y2:s.z.number(),...p,...u}),s.z.object({type:s.z.literal("arrow"),x1:s.z.number(),y1:s.z.number(),x2:s.z.number(),y2:s.z.number(),...p,...u}),s.z.object({type:s.z.literal("rect"),x:s.z.number(),y:s.z.number(),w:s.z.number(),h:s.z.number(),...p,...u}),s.z.object({type:s.z.literal("ellipse"),x:s.z.number(),y:s.z.number(),w:s.z.number(),h:s.z.number(),...p,...u}),s.z.object({type:s.z.literal("text"),x:s.z.number(),y:s.z.number(),text:s.z.string().max(500),color:s.z.string().max(32),fontSize:s.z.number().positive().max(512),...u}),s.z.object({type:s.z.literal("sticker"),x:s.z.number(),y:s.z.number(),w:s.z.number().positive(),h:s.z.number().positive(),emoji:s.z.string().max(16).optional(),src:s.z.string().optional(),...u})]),B=s.z.object({srcIdx:s.z.number().int().min(0).max(7),in:s.z.number().min(0),out:s.z.number().min(0)}),I=s.z.object({srcIdx:s.z.number().int().min(0).max(2),startAt:s.z.number().min(0),in:s.z.number().min(0),out:s.z.number().min(0),volume:s.z.number().min(0).max(2)}),w=s.z.object({type:s.z.enum(["none","fade","slide","wipe","flip","clockWipe","star","circle","rectangle"]).default("none"),duration:s.z.number().min(0).max(2).default(.4)}),j=s.z.object({clips:s.z.array(B).min(1).max(50),audioClips:s.z.array(I).max(8).default([]),canvas:s.z.object({w:s.z.number().int().min(2).max(4096),h:s.z.number().int().min(2).max(4096)}),crop:s.z.object({x:s.z.number().min(0),y:s.z.number().min(0),width:s.z.number().positive(),height:s.z.number().positive()}).optional(),scale:s.z.object({width:s.z.number().positive(),height:s.z.number().positive(),fit:s.z.enum(["contain","cover","force"])}).optional(),rotation:s.z.number().min(-180).max(180).default(0),flipX:s.z.boolean().default(!1),flipY:s.z.boolean().default(!1),filters:s.z.object({brightness:s.z.number().min(-1).max(1),contrast:s.z.number().min(-1).max(1),saturation:s.z.number().min(-1).max(1),gamma:s.z.number().min(-1).max(1).default(0)}).default({brightness:0,contrast:0,saturation:0,gamma:0}),filterPreset:s.z.string().max(32).optional(),overlays:s.z.array(A).max(200).optional(),transitions:s.z.array(w).max(49).default([]),keepAudio:s.z.boolean().default(!0),poster:s.z.object({time:s.z.number().min(0)}).optional()}).superRefine((t,i)=>{t.clips.forEach((e,r)=>{e.out<=e.in&&i.addIssue({code:s.z.ZodIssueCode.custom,message:`clips[${r}].out \u5FC5\u987B\u5927\u4E8E in`,path:["clips",r,"out"]})}),t.audioClips?.forEach((e,r)=>{e.out<=e.in&&i.addIssue({code:s.z.ZodIssueCode.custom,message:`audioClips[${r}].out \u5FC5\u987B\u5927\u4E8E in`,path:["audioClips",r,"out"]})}),(t.canvas.w%2!==0||t.canvas.h%2!==0)&&i.addIssue({code:s.z.ZodIssueCode.custom,message:"canvas \u5BBD\u9AD8\u5FC5\u987B\u4E3A\u5076\u6570",path:["canvas"]})});function c(){return{clips:[],audioClips:[],canvas:{w:2,h:2},rotation:0,flipX:!1,flipY:!1,filters:{brightness:0,contrast:0,saturation:0,gamma:0},transitions:[],keepAudio:!0}}var E=100;function m(t){return{past:[],present:t,future:[]}}function d(t,i){if(i===t.present)return t;const e=[...t.past,t.present];return e.length>E&&e.shift(),{past:e,present:i,future:[]}}function y(t,i){return i===t.present?t:{...t,present:i}}function z(t){return t.past.length>0}function f(t){return t.future.length>0}function P(t){return z(t)?{past:t.past.slice(0,-1),present:t.past[t.past.length-1],future:[t.present,...t.future]}:t}function F(t){if(!f(t))return t;const[i,...e]=t.future;return{past:[...t.past,t.present],present:i,future:e}}var l=.1;function b(t){return t.out-t.in}function h(t){return t.reduce((i,e)=>i+b(e),0)}function x(t,i){if(!t.length||i<0)return null;let e=0;for(let r=0;r<t.length;r++){const n=b(t[r]);if(i<e+n)return{idx:r,srcTime:t[r].in+(i-e)};e+=n}if(Math.abs(i-e)<1e-9||i<=e){const r=t.length-1;return{idx:r,srcTime:t[r].out}}return null}function T(t,i){const e=x(t,i);if(!e)return t;const r=t[e.idx];return e.srcTime<r.in+l||e.srcTime>r.out-l?t:[...t.slice(0,e.idx),{...r,out:e.srcTime},{...r,in:e.srcTime},...t.slice(e.idx+1)]}function k(t,i){return t.length<=1||!t[i]?t:t.filter((e,r)=>r!==i)}function O(t,i){const e=t[i];return e?[...t.slice(0,i+1),{...e},...t.slice(i+1)]:t}function V(t,i,e){if(i===e||!t[i]||e<0||e>=t.length)return t;const r=[...t],[n]=r.splice(i,1);return r.splice(e,0,n),r}function X(t,i,e,r,n){if(!t[i])return t;const a=t.map(o=>({...o}));return e==="in"?a[i].in=Math.min(Math.max(r,0),a[i].out-l):a[i].out=Math.max(Math.min(r,n),a[i].in+l),a}function M(t,i,e){const r=Math.max(Math.min(t.out,i),l),n=Math.min(Math.max(t.in,0),r-l),a=Math.min(Math.max(t.startAt,0),Math.max(0,e-l));return{...t,in:n,out:r,startAt:a}}function Y(t,i=[]){const e=h(t),r=i.reduce((n,a)=>Math.max(n,a.startAt+(a.out-a.in)),0);return Math.max(e,r)}function v(t){return[...new Set(t.map(i=>i.srcIdx))].sort((i,e)=>i-e)}function D(t,i){const e=new Map(i.map((r,n)=>[r,n]));return t.map(r=>({...r,srcIdx:e.get(r.srcIdx)??0}))}function g(t){const i=Math.min(Math.max(Math.round(t),2),4096);return i%2===0?i:i-1}var C=t=>Math.min(Math.max(t,-180),180),R=class{constructor(t=c()){this.videoSources=[],this.audioSources=[],this.listeners=new Set,this.transientBase=null,this.getSnapshot=()=>this.history.present,this.subscribe=i=>(this.listeners.add(i),()=>this.listeners.delete(i)),this.history=m(t)}getState(){return this.history.present}emit(){const t=this.history.present;for(const i of this.listeners)i(t)}canUndo(){return z(this.history)}canRedo(){return f(this.history)}undo(){this.transientBase=null,this.history=P(this.history),this.emit()}redo(){this.transientBase=null,this.history=F(this.history),this.emit()}applyMut(t,i=!1){if(i)this.transientBase===null&&(this.transientBase=this.history.present),this.history=y(this.history,t(this.transientBase));else{const e=this.transientBase??this.history.present,r=t(e),n=this.transientBase?{...this.history,present:this.transientBase}:this.history;this.history=d(n,r),this.transientBase=null}this.emit()}registerVideoSource(t){const i=this.videoSources.length;this.videoSources.push(t);const e={srcIdx:i,in:0,out:t.duration};return i===0||this.history.present.clips.length===0?(this.transientBase=null,this.history=m({...c(),clips:[e],canvas:{w:g(t.width),h:g(t.height)},poster:{time:Math.min(1,t.duration/2)}}),this.emit()):this.applyMut(r=>({...r,clips:[...r.clips,e]})),i}registerAudioSource(t){const i=this.audioSources.length;return this.audioSources.push(t),this.applyMut(e=>{const r=M({srcIdx:i,startAt:0,in:0,out:t.duration,volume:1},t.duration,h(e.clips));return{...e,audioClips:[...e.audioClips,r]}}),i}getVideoSource(t){return this.videoSources[t]}getAudioSource(t){return this.audioSources[t]}addClipFromSource(t){const i=this.videoSources[t];i&&this.applyMut(e=>({...e,clips:[...e.clips,{srcIdx:t,in:0,out:i.duration}]}))}splitAtPlayhead(t){this.applyMut(i=>({...i,clips:T(i.clips,t)}))}removeClip(t){this.applyMut(i=>({...i,clips:k(i.clips,t)}))}duplicateClip(t){this.applyMut(i=>({...i,clips:O(i.clips,t)}))}reorderClips(t,i){this.applyMut(e=>({...e,clips:V(e.clips,t,i)}))}trimClip(t,i,e,r){this.applyMut(n=>{const a=n.clips[t];if(!a)return n;const o=this.videoSources[a.srcIdx]?.duration??a.out;return{...n,clips:X(n.clips,t,i,e,o)}},r?.transient)}moveAudioClip(t,i,e){this.applyMut(r=>this.patchAudio(r,t,n=>({...n,startAt:i})),e?.transient)}trimAudioClip(t,i,e,r){this.applyMut(n=>this.patchAudio(n,t,a=>{if(i==="in"){const o=e-a.in;return{...a,in:e,startAt:a.startAt+o}}return{...a,out:e}}),r?.transient)}setAudioVolume(t,i,e){this.applyMut(r=>this.patchAudio(r,t,n=>({...n,volume:i}),!1),e?.transient)}removeAudioClip(t){this.applyMut(i=>({...i,audioClips:i.audioClips.filter((e,r)=>r!==t)}))}patchAudio(t,i,e,r=!0){const n=t.audioClips[i];if(!n)return t;let a=e(n);if(r){const o=this.audioSources[n.srcIdx]?.duration??n.out;a=M(a,o,h(t.clips))}return{...t,audioClips:t.audioClips.map((o,S)=>S===i?a:o)}}setCrop(t,i){this.applyMut(e=>({...e,crop:t}),i?.transient)}clearCrop(){this.applyMut(t=>({...t,crop:void 0}))}setScale(t){this.applyMut(i=>({...i,scale:t}))}clearScale(){this.applyMut(t=>({...t,scale:void 0}))}setRotation(t,i){this.applyMut(e=>({...e,rotation:C(t)}),i?.transient)}rotateBy(t){this.applyMut(i=>{let e=i.rotation+t;return e>180&&(e-=360),e<-180&&(e+=360),{...i,rotation:C(e)}})}flipX(){this.applyMut(t=>({...t,flipX:!t.flipX}))}flipY(){this.applyMut(t=>({...t,flipY:!t.flipY}))}setFilter(t,i,e){this.applyMut(r=>({...r,filters:{...r.filters,[t]:i}}),e?.transient)}setFilters(t,i){this.applyMut(e=>({...e,filters:{...e.filters,...t}}),i?.transient)}setFilterPreset(t){this.applyMut(i=>({...i,filterPreset:t}))}addOverlay(t){this.applyMut(i=>({...i,overlays:[...i.overlays??[],t]}))}updateOverlay(t,i,e){this.applyMut(r=>{const n=r.overlays??[];return n[t]?{...r,overlays:n.map((a,o)=>o===t?{...a,...i}:a)}:r},e?.transient)}removeOverlay(t){this.applyMut(i=>({...i,overlays:(i.overlays??[]).filter((e,r)=>r!==t)}))}patch(t,i){i?.transient?(this.transientBase===null&&(this.transientBase=this.history.present),this.history=y(this.history,{...this.transientBase,...t}),this.emit()):this.commit(t)}commit(t){const i=t?{...this.history.present,...t}:this.history.present,e=this.transientBase;this.transientBase=null,this.history=d(e?{...this.history,present:e}:this.history,i),this.emit()}setKeepAudio(t){this.applyMut(i=>({...i,keepAudio:t}))}setPoster(t){this.applyMut(i=>({...i,poster:{time:Math.max(0,t)}}))}totalDuration(){return h(this.history.present.clips)}contentDuration(){const t=this.history.present;return Y(t.clips,t.audioClips)}locate(t){return x(this.history.present.clips,t)}usedVideoSources(){return v(this.history.present.clips)}getExportPlan(){const t=this.history.present,i=v(t.clips),e=[...new Set(t.audioClips.map(n=>n.srcIdx))].sort((n,a)=>n-a),r=new Map(e.map((n,a)=>[n,a]));return{state:{...t,clips:D(t.clips,i),audioClips:t.audioClips.map(n=>({...n,srcIdx:r.get(n.srcIdx)??0}))},videoSrcOrder:i,audioSrcOrder:e}}validate(){return j.safeParse(this.getExportPlan().state)}reset(t=c()){this.transientBase=null,this.history=m(t),this.emit()}};exports.VideoEditorEngine=R;
|
|
1
|
+
"use strict";var s=require("zod"),p={color:s.z.string().max(32),width:s.z.number().positive().max(200)},u={rotation:s.z.number().min(-180).max(180).optional()},A=s.z.discriminatedUnion("type",[s.z.object({type:s.z.literal("pen"),points:s.z.array(s.z.number()).min(4),...p,...u}),s.z.object({type:s.z.literal("line"),x1:s.z.number(),y1:s.z.number(),x2:s.z.number(),y2:s.z.number(),...p,...u}),s.z.object({type:s.z.literal("arrow"),x1:s.z.number(),y1:s.z.number(),x2:s.z.number(),y2:s.z.number(),...p,...u}),s.z.object({type:s.z.literal("rect"),x:s.z.number(),y:s.z.number(),w:s.z.number(),h:s.z.number(),...p,...u}),s.z.object({type:s.z.literal("ellipse"),x:s.z.number(),y:s.z.number(),w:s.z.number(),h:s.z.number(),...p,...u}),s.z.object({type:s.z.literal("text"),x:s.z.number(),y:s.z.number(),text:s.z.string().max(500),color:s.z.string().max(32),fontSize:s.z.number().positive().max(512),...u}),s.z.object({type:s.z.literal("sticker"),x:s.z.number(),y:s.z.number(),w:s.z.number().positive(),h:s.z.number().positive(),emoji:s.z.string().max(16).optional(),src:s.z.string().optional(),...u})]),B=s.z.object({srcIdx:s.z.number().int().min(0).max(7),in:s.z.number().min(0),out:s.z.number().min(0)}),I=s.z.object({srcIdx:s.z.number().int().min(0).max(2),startAt:s.z.number().min(0),in:s.z.number().min(0),out:s.z.number().min(0),volume:s.z.number().min(0).max(2)}),w=s.z.object({type:s.z.enum(["none","fade","slide","wipe","flip","clockWipe","star","circle","rectangle"]).default("none"),duration:s.z.number().min(0).max(2).default(.4)}),j=s.z.object({clips:s.z.array(B).min(1).max(50),audioClips:s.z.array(I).max(8).default([]),canvas:s.z.object({w:s.z.number().int().min(2).max(4096),h:s.z.number().int().min(2).max(4096)}),crop:s.z.object({x:s.z.number().min(0),y:s.z.number().min(0),width:s.z.number().positive(),height:s.z.number().positive()}).optional(),scale:s.z.object({width:s.z.number().positive(),height:s.z.number().positive(),fit:s.z.enum(["contain","cover","force"])}).optional(),rotation:s.z.number().min(-180).max(180).default(0),flipX:s.z.boolean().default(!1),flipY:s.z.boolean().default(!1),filters:s.z.object({brightness:s.z.number().min(-1).max(1),contrast:s.z.number().min(-1).max(1),saturation:s.z.number().min(-1).max(1),gamma:s.z.number().min(-1).max(1).default(0)}).default({brightness:0,contrast:0,saturation:0,gamma:0}),filterPreset:s.z.string().max(32).optional(),overlays:s.z.array(A).max(200).optional(),transitions:s.z.array(w).max(49).default([]),keepAudio:s.z.boolean().default(!0),poster:s.z.object({time:s.z.number().min(0)}).optional()}).superRefine((t,e)=>{t.clips.forEach((i,r)=>{i.out<=i.in&&e.addIssue({code:s.z.ZodIssueCode.custom,message:`clips[${r}].out \u5FC5\u987B\u5927\u4E8E in`,path:["clips",r,"out"]})}),t.audioClips?.forEach((i,r)=>{i.out<=i.in&&e.addIssue({code:s.z.ZodIssueCode.custom,message:`audioClips[${r}].out \u5FC5\u987B\u5927\u4E8E in`,path:["audioClips",r,"out"]})}),(t.canvas.w%2!==0||t.canvas.h%2!==0)&&e.addIssue({code:s.z.ZodIssueCode.custom,message:"canvas \u5BBD\u9AD8\u5FC5\u987B\u4E3A\u5076\u6570",path:["canvas"]})});function c(){return{clips:[],audioClips:[],canvas:{w:2,h:2},rotation:0,flipX:!1,flipY:!1,filters:{brightness:0,contrast:0,saturation:0,gamma:0},transitions:[],keepAudio:!0}}var E=100;function m(t){return{past:[],present:t,future:[]}}function d(t,e){if(e===t.present)return t;const i=[...t.past,t.present];return i.length>E&&i.shift(),{past:i,present:e,future:[]}}function y(t,e){return e===t.present?t:{...t,present:e}}function z(t){return t.past.length>0}function f(t){return t.future.length>0}function P(t){return z(t)?{past:t.past.slice(0,-1),present:t.past[t.past.length-1],future:[t.present,...t.future]}:t}function F(t){if(!f(t))return t;const[e,...i]=t.future;return{past:[...t.past,t.present],present:e,future:i}}var l=.1;function b(t){return t.out-t.in}function h(t){return t.reduce((e,i)=>e+b(i),0)}function x(t,e){if(!t.length||e<0)return null;let i=0;for(let r=0;r<t.length;r++){const n=b(t[r]);if(e<i+n)return{idx:r,srcTime:t[r].in+(e-i)};i+=n}if(Math.abs(e-i)<1e-9||e<=i){const r=t.length-1;return{idx:r,srcTime:t[r].out}}return null}function T(t,e){const i=x(t,e);if(!i)return t;const r=t[i.idx];return i.srcTime<r.in+l||i.srcTime>r.out-l?t:[...t.slice(0,i.idx),{...r,out:i.srcTime},{...r,in:i.srcTime},...t.slice(i.idx+1)]}function k(t,e){return t.length<=1||!t[e]?t:t.filter((i,r)=>r!==e)}function O(t,e){const i=t[e];return i?[...t.slice(0,e+1),{...i},...t.slice(e+1)]:t}function V(t,e,i){if(e===i||!t[e]||i<0||i>=t.length)return t;const r=[...t],[n]=r.splice(e,1);return r.splice(i,0,n),r}function X(t,e,i,r,n){if(!t[e])return t;const o=t.map(a=>({...a}));return i==="in"?o[e].in=Math.min(Math.max(r,0),o[e].out-l):o[e].out=Math.max(Math.min(r,n),o[e].in+l),o}function M(t,e,i){const r=Math.max(Math.min(t.out,e),l),n=Math.min(Math.max(t.in,0),r-l),o=Math.min(Math.max(t.startAt,0),Math.max(0,i-l));return{...t,in:n,out:r,startAt:o}}function Y(t,e=[]){const i=h(t),r=e.reduce((n,o)=>Math.max(n,o.startAt+(o.out-o.in)),0);return Math.max(i,r)}function v(t){return[...new Set(t.map(e=>e.srcIdx))].sort((e,i)=>e-i)}function D(t,e){const i=new Map(e.map((r,n)=>[r,n]));return t.map(r=>({...r,srcIdx:i.get(r.srcIdx)??0}))}function g(t){const e=Math.min(Math.max(Math.round(t),2),4096);return e%2===0?e:e-1}var C=t=>Math.min(Math.max(t,-180),180),R=class{constructor(t=c()){this.videoSources=[],this.audioSources=[],this.listeners=new Set,this.transientBase=null,this.getSnapshot=()=>this.history.present,this.subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e)),this.history=m(t)}getState(){return this.history.present}emit(){const t=this.history.present;for(const e of this.listeners)e(t)}canUndo(){return z(this.history)}canRedo(){return f(this.history)}undo(){this.transientBase=null,this.history=P(this.history),this.emit()}redo(){this.transientBase=null,this.history=F(this.history),this.emit()}applyMut(t,e=!1){if(e)this.transientBase===null&&(this.transientBase=this.history.present),this.history=y(this.history,t(this.transientBase));else{const i=this.transientBase??this.history.present,r=t(i),n=this.transientBase?{...this.history,present:this.transientBase}:this.history;this.history=d(n,r),this.transientBase=null}this.emit()}registerVideoSource(t){const e=this.videoSources.length;this.videoSources.push(t);const i={srcIdx:e,in:0,out:t.duration};return e===0||this.history.present.clips.length===0?(this.transientBase=null,this.history=m({...c(),clips:[i],canvas:{w:g(t.width),h:g(t.height)},poster:{time:Math.min(1,t.duration/2)}}),this.emit()):this.applyMut(r=>({...r,clips:[...r.clips,i]})),e}registerAudioSource(t){const e=this.audioSources.length;return this.audioSources.push(t),this.applyMut(i=>{const r=M({srcIdx:e,startAt:0,in:0,out:t.duration,volume:1},t.duration,h(i.clips));return{...i,audioClips:[...i.audioClips,r]}}),e}getVideoSource(t){return this.videoSources[t]}getAudioSource(t){return this.audioSources[t]}addClipFromSource(t){const e=this.videoSources[t];e&&this.applyMut(i=>({...i,clips:[...i.clips,{srcIdx:t,in:0,out:e.duration}]}))}splitAtPlayhead(t){this.applyMut(e=>({...e,clips:T(e.clips,t)}))}removeClip(t){this.applyMut(e=>({...e,clips:k(e.clips,t)}))}duplicateClip(t){this.applyMut(e=>({...e,clips:O(e.clips,t)}))}reorderClips(t,e){this.applyMut(i=>({...i,clips:V(i.clips,t,e)}))}trimClip(t,e,i,r){this.applyMut(n=>{const o=n.clips[t];if(!o)return n;const a=this.videoSources[o.srcIdx]?.duration??o.out;return{...n,clips:X(n.clips,t,e,i,a)}},r?.transient)}moveAudioClip(t,e,i){this.applyMut(r=>this.patchAudio(r,t,n=>({...n,startAt:e})),i?.transient)}trimAudioClip(t,e,i,r){this.applyMut(n=>this.patchAudio(n,t,o=>{if(e==="in"){const a=i-o.in;return{...o,in:i,startAt:o.startAt+a}}return{...o,out:i}}),r?.transient)}setAudioVolume(t,e,i){this.applyMut(r=>this.patchAudio(r,t,n=>({...n,volume:e}),!1),i?.transient)}removeAudioClip(t){this.applyMut(e=>({...e,audioClips:e.audioClips.filter((i,r)=>r!==t)}))}patchAudio(t,e,i,r=!0){const n=t.audioClips[e];if(!n)return t;let o=i(n);if(r){const a=this.audioSources[n.srcIdx]?.duration??n.out;o=M(o,a,h(t.clips))}return{...t,audioClips:t.audioClips.map((a,S)=>S===e?o:a)}}setCrop(t,e){this.applyMut(i=>({...i,crop:t}),e?.transient)}clearCrop(){this.applyMut(t=>({...t,crop:void 0}))}setScale(t){this.applyMut(e=>({...e,scale:t}))}clearScale(){this.applyMut(t=>({...t,scale:void 0}))}setRotation(t,e){this.applyMut(i=>({...i,rotation:C(t)}),e?.transient)}rotateBy(t){this.applyMut(e=>{let i=e.rotation+t;return i>180&&(i-=360),i<-180&&(i+=360),{...e,rotation:C(i)}})}flipX(){this.applyMut(t=>({...t,flipX:!t.flipX}))}flipY(){this.applyMut(t=>({...t,flipY:!t.flipY}))}setFilter(t,e,i){this.applyMut(r=>({...r,filters:{...r.filters,[t]:e}}),i?.transient)}setFilters(t,e){this.applyMut(i=>({...i,filters:{...i.filters,...t}}),e?.transient)}setFilterPreset(t){this.applyMut(e=>({...e,filterPreset:t}))}addOverlay(t){this.applyMut(e=>({...e,overlays:[...e.overlays??[],t]}))}updateOverlay(t,e,i){this.applyMut(r=>{const n=r.overlays??[];return n[t]?{...r,overlays:n.map((o,a)=>a===t?{...o,...e}:o)}:r},i?.transient)}removeOverlay(t){this.applyMut(e=>({...e,overlays:(e.overlays??[]).filter((i,r)=>r!==t)}))}patch(t,e){e?.transient?(this.transientBase===null&&(this.transientBase=this.history.present),this.history=y(this.history,{...this.transientBase,...t}),this.emit()):this.commit(t)}commit(t){const e=t?{...this.history.present,...t}:this.history.present,i=this.transientBase;this.transientBase=null,this.history=d(i?{...this.history,present:i}:this.history,e),this.emit()}setKeepAudio(t){this.applyMut(e=>({...e,keepAudio:t}))}setPoster(t){this.applyMut(e=>({...e,poster:{time:Math.max(0,t)}}))}totalDuration(){return h(this.history.present.clips)}contentDuration(){const t=this.history.present;return Y(t.clips,t.audioClips)}locate(t){return x(this.history.present.clips,t)}usedVideoSources(){return v(this.history.present.clips)}getExportPlan(){const t=this.history.present,e=v(t.clips),i=[...new Set(t.audioClips.map(n=>n.srcIdx))].sort((n,o)=>n-o),r=new Map(i.map((n,o)=>[n,o]));return{state:{...t,clips:D(t.clips,e),audioClips:t.audioClips.map(n=>({...n,srcIdx:r.get(n.srcIdx)??0}))},videoSrcOrder:e,audioSrcOrder:i}}validate(){return j.safeParse(this.getExportPlan().state)}reset(t=c()){this.transientBase=null,this.history=m(t),this.emit()}};exports.VideoEditorEngine=R;
|
package/core/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var Q=Object.defineProperty,qe=Object.getOwnPropertyDescriptor,Xe=Object.getOwnPropertyNames,Ue=Object.prototype.hasOwnProperty,We=(e,t)=>{for(var u in t)Q(e,u,{get:t[u],enumerable:!0})},Ke=(e,t,u,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Xe(t))!Ue.call(e,r)&&r!==u&&Q(e,r,{get:()=>t[r],enumerable:!(i=qe(t,r))||i.enumerable});return e},Qe=e=>Ke(Q({},"__esModule",{value:!0}),e),ce={};We(ce,{AudioClip:()=>ve,Clip:()=>fe,DEFAULT_PLATFORM_TARGETS:()=>Y,DEG2RAD:()=>pe,EDITOR_MESSAGES:()=>te,FILTER_PRESETS:()=>de,IMAGE_PLATFORM_PRESETS:()=>Tt,IMAGE_RATIO_PRESETS:()=>wt,MIN_CLIP:()=>S,Overlay:()=>he,VIDEO_PLATFORM_RATIO_PRESETS:()=>Mt,VIDEO_RATIO_PRESETS:()=>St,VIDEO_SIZE_PRESETS:()=>Rt,VideoEditState:()=>at,buildFfmpegArgs:()=>iu,buildFilterCss:()=>tt,buildImagePlatformPresets:()=>ye,buildPosterArgs:()=>au,buildVideoPlatformRatioPresets:()=>Be,buildVideoSizePresets:()=>De,canRedo:()=>ge,canUndo:()=>Fe,centeredMaxRect:()=>J,clampAudioClip:()=>mt,clampRect:()=>Je,clipDuration:()=>G,clipStartsAt:()=>ot,compensateAnnotationRotation:()=>kt,contentDuration:()=>ht,createHistory:()=>xt,defaultVideoEditState:()=>rt,duplicateClip:()=>lt,evenize:()=>T,findFilterPreset:()=>H,fitRects:()=>et,locateOutput:()=>xe,normalizeDeg:()=>Z,outputSize:()=>ee,parseRatio:()=>L,pushHistory:()=>Ft,redo:()=>At,remapSrcIndices:()=>vt,removeClip:()=>st,reorderClips:()=>ct,replacePresent:()=>gt,rotatedSize:()=>me,splitAtOutput:()=>nt,tEditor:()=>$t,toHant:()=>Ae,totalDuration:()=>be,trimClipEdge:()=>pt,undo:()=>Et,usedVideoSrcIndices:()=>ft}),module.exports=Qe(ce);var pe=Math.PI/180;function me(e,t,u){const i=Z(u);if(i===0||i===180)return{w:e,h:t};if(i===90||i===270)return{w:t,h:e};const r=i*pe;return{w:Math.round(Math.abs(e*Math.cos(r))+Math.abs(t*Math.sin(r))),h:Math.round(Math.abs(e*Math.sin(r))+Math.abs(t*Math.cos(r)))}}function Z(e){return(e%360+360)%360}function T(e){const t=Math.round(e);return t-t%2}function Je(e,t,u=40){const i=Math.min(Math.max(u,e.width),t.w),r=Math.min(Math.max(u,e.height),t.h),o=Math.min(Math.max(0,e.x),t.w-i),n=Math.min(Math.max(0,e.y),t.h-r);return{x:Math.round(o),y:Math.round(n),width:Math.round(i),height:Math.round(r)}}function J(e,t){let u=e.w,i=u/t;return i>e.h&&(i=e.h,u=i*t),{x:Math.round((e.w-u)/2),y:Math.round((e.h-i)/2),width:Math.round(u),height:Math.round(i)}}function et(e,t,u){const i={x:0,y:0,width:e.width,height:e.height},r={x:0,y:0,width:t.w,height:t.h};return u==="cover"?{src:J({w:e.width,h:e.height},t.w/t.h),dst:r}:u==="contain"?{src:i,dst:J({w:t.w,h:t.h},e.width/e.height)}:{src:i,dst:r}}function ee(e,t){if(t.scale)return{w:T(t.scale.width),h:T(t.scale.height)};if(t.crop)return{w:T(t.crop.width),h:T(t.crop.height)};const u=me(e.w,e.h,t.rotation);return{w:T(u.w),h:T(u.h)}}var de=[{id:"bw",label:"\u9ED1\u767D",vf:"hue=s=0",css:"grayscale(1)"},{id:"sepia",label:"\u590D\u53E4",vf:"colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131",css:"sepia(0.85)"},{id:"warm",label:"\u6696\u9633",vf:"colorbalance=rs=.15:gs=.04:bs=-.15",css:"sepia(0.25) saturate(1.25) brightness(1.03)"},{id:"cool",label:"\u51B7\u8C03",vf:"colorbalance=rs=-.14:bs=.16",css:"hue-rotate(12deg) saturate(0.95) brightness(1.02)"},{id:"vivid",label:"\u9C9C\u8273",vf:"eq=saturation=1.45:contrast=1.08",css:"saturate(1.45) contrast(1.08)"}];function H(e){return e?de.find(t=>t.id===e):void 0}function tt(e,t){const u=H(t)?.css??"";return[`brightness(${1+e.brightness})`,`contrast(${1+e.contrast})`,`saturate(${1+e.saturation})`,u].filter(Boolean).join(" ")}var a=require("../zod/index.cjs"),j={color:a.z.string().max(32),width:a.z.number().positive().max(200)},w={rotation:a.z.number().min(-180).max(180).optional()},P={startAt:a.z.number().min(0).optional(),endAt:a.z.number().min(0).optional(),timelineTrack:a.z.number().int().min(0).max(99).optional()},he=a.z.discriminatedUnion("type",[a.z.object({type:a.z.literal("pen"),points:a.z.array(a.z.number()).min(4),...j,...P,...w}),a.z.object({type:a.z.literal("line"),x1:a.z.number(),y1:a.z.number(),x2:a.z.number(),y2:a.z.number(),...j,...P,...w}),a.z.object({type:a.z.literal("arrow"),x1:a.z.number(),y1:a.z.number(),x2:a.z.number(),y2:a.z.number(),...j,...P,...w}),a.z.object({type:a.z.literal("rect"),x:a.z.number(),y:a.z.number(),w:a.z.number(),h:a.z.number(),...j,...P,...w}),a.z.object({type:a.z.literal("ellipse"),x:a.z.number(),y:a.z.number(),w:a.z.number(),h:a.z.number(),...j,...P,...w}),a.z.object({type:a.z.literal("text"),x:a.z.number(),y:a.z.number(),text:a.z.string().max(500),color:a.z.string().max(32),fontSize:a.z.number().positive().max(512),startAt:a.z.number().min(0).optional(),endAt:a.z.number().min(0).optional(),timelineTrack:a.z.number().int().min(0).max(99).optional(),...w}),a.z.object({type:a.z.literal("sticker"),x:a.z.number().optional(),y:a.z.number().optional(),w:a.z.number().positive().optional(),h:a.z.number().positive().optional(),emoji:a.z.string().max(16).optional(),src:a.z.string().optional(),startAt:a.z.number().min(0).optional(),endAt:a.z.number().min(0).optional(),timelineTrack:a.z.number().int().min(0).max(99).optional(),...w}),a.z.object({type:a.z.literal("filter"),x:a.z.number().optional(),y:a.z.number().optional(),w:a.z.number().positive().optional(),h:a.z.number().positive().optional(),filterPreset:a.z.string().max(32).optional(),...P,...w}),a.z.object({type:a.z.literal("adjust"),x:a.z.number(),y:a.z.number(),w:a.z.number().positive(),h:a.z.number().positive(),brightness:a.z.number().min(-1).max(1).default(0),contrast:a.z.number().min(-1).max(1).default(0),saturation:a.z.number().min(-1).max(1).default(0),temperature:a.z.number().min(-1).max(1).default(0),tint:a.z.number().min(-1).max(1).default(0),vibrance:a.z.number().min(-1).max(1).default(0),gamma:a.z.number().min(-1).max(1).default(0),highlights:a.z.number().min(-1).max(1).default(0),shadows:a.z.number().min(-1).max(1).default(0),whites:a.z.number().min(-1).max(1).default(0),blacks:a.z.number().min(-1).max(1).default(0),lightSense:a.z.number().min(-1).max(1).default(0),sharpen:a.z.number().min(0).max(1).default(0),clarity:a.z.number().min(0).max(1).default(0),grain:a.z.number().min(0).max(1).default(0),fade:a.z.number().min(0).max(1).default(0),vignette:a.z.number().min(0).max(1).default(0),...P,...w})]),fe=a.z.object({srcIdx:a.z.number().int().min(0).max(7),in:a.z.number().min(0),out:a.z.number().min(0)}),ve=a.z.object({srcIdx:a.z.number().int().min(0).max(2),track:a.z.number().int().min(0).default(0),startAt:a.z.number().min(0),in:a.z.number().min(0),out:a.z.number().min(0),speed:a.z.number().min(.5).max(2).default(1),volume:a.z.number().min(0).max(2),fadeIn:a.z.number().min(0).default(0),fadeOut:a.z.number().min(0).default(0)}),ut=a.z.object({type:a.z.enum(["none","fade","slide","wipe","flip","clockWipe","star","circle","rectangle"]).default("none"),duration:a.z.number().min(0).max(2).default(.4)}),it=a.z.object({fileName:a.z.string().max(120).optional(),format:a.z.enum(["mp4","mov","mxf"]).default("mp4"),width:a.z.number().int().min(2).max(8192).optional(),height:a.z.number().int().min(2).max(8192).optional(),frameRate:a.z.number().int().min(12).max(120).default(30),videoBitrateKbps:a.z.number().int().min(100).max(5e4).optional(),audioBitrateKbps:a.z.number().int().min(32).max(1024).optional(),audioCodec:a.z.enum(["aac","mp3"]).default("aac")}).optional(),at=a.z.object({clips:a.z.array(fe).min(1).max(50),audioClips:a.z.array(ve).max(8).default([]),canvas:a.z.object({w:a.z.number().int().min(2).max(4096),h:a.z.number().int().min(2).max(4096)}),crop:a.z.object({x:a.z.number().min(0),y:a.z.number().min(0),width:a.z.number().positive(),height:a.z.number().positive()}).optional(),scale:a.z.object({width:a.z.number().positive(),height:a.z.number().positive(),fit:a.z.enum(["contain","cover","force"])}).optional(),rotation:a.z.number().min(-180).max(180).default(0),flipX:a.z.boolean().default(!1),flipY:a.z.boolean().default(!1),filters:a.z.object({brightness:a.z.number().min(-1).max(1).default(0),contrast:a.z.number().min(-1).max(1).default(0),saturation:a.z.number().min(-1).max(1).default(0),temperature:a.z.number().min(-1).max(1).default(0),tint:a.z.number().min(-1).max(1).default(0),vibrance:a.z.number().min(-1).max(1).default(0),gamma:a.z.number().min(-1).max(1).default(0),highlights:a.z.number().min(-1).max(1).default(0),shadows:a.z.number().min(-1).max(1).default(0),whites:a.z.number().min(-1).max(1).default(0),blacks:a.z.number().min(-1).max(1).default(0),lightSense:a.z.number().min(-1).max(1).default(0),sharpen:a.z.number().min(0).max(1).default(0),clarity:a.z.number().min(0).max(1).default(0),grain:a.z.number().min(0).max(1).default(0),fade:a.z.number().min(0).max(1).default(0),vignette:a.z.number().min(0).max(1).default(0)}).default({brightness:0,contrast:0,saturation:0,temperature:0,tint:0,vibrance:0,gamma:0,highlights:0,shadows:0,whites:0,blacks:0,lightSense:0,sharpen:0,clarity:0,grain:0,fade:0,vignette:0}),filterPreset:a.z.string().max(32).optional(),overlays:a.z.array(he).max(200).optional(),transitions:a.z.array(ut).max(49).default([]),keepAudio:a.z.boolean().default(!0),poster:a.z.object({time:a.z.number().min(0),useAsVideoCover:a.z.boolean().optional(),preview:a.z.string().optional()}).optional(),exportSettings:it}).superRefine((e,t)=>{e.clips.forEach((u,i)=>{u.out<=u.in&&t.addIssue({code:a.z.ZodIssueCode.custom,message:`clips[${i}].out \u5FC5\u987B\u5927\u4E8E in`,path:["clips",i,"out"]})}),e.audioClips?.forEach((u,i)=>{u.out<=u.in&&t.addIssue({code:a.z.ZodIssueCode.custom,message:`audioClips[${i}].out \u5FC5\u987B\u5927\u4E8E in`,path:["audioClips",i,"out"]})}),(e.canvas.w%2!==0||e.canvas.h%2!==0)&&t.addIssue({code:a.z.ZodIssueCode.custom,message:"canvas \u5BBD\u9AD8\u5FC5\u987B\u4E3A\u5076\u6570",path:["canvas"]}),e.exportSettings?.width!=null&&e.exportSettings.width%2!==0&&t.addIssue({code:a.z.ZodIssueCode.custom,message:"exportSettings.width \u5FC5\u987B\u4E3A\u5076\u6570",path:["exportSettings","width"]}),e.exportSettings?.height!=null&&e.exportSettings.height%2!==0&&t.addIssue({code:a.z.ZodIssueCode.custom,message:"exportSettings.height \u5FC5\u987B\u4E3A\u5076\u6570",path:["exportSettings","height"]})});function rt(){return{clips:[],audioClips:[],canvas:{w:2,h:2},rotation:0,flipX:!1,flipY:!1,filters:{brightness:0,contrast:0,saturation:0,temperature:0,tint:0,vibrance:0,gamma:0,highlights:0,shadows:0,whites:0,blacks:0,lightSense:0,sharpen:0,clarity:0,grain:0,fade:0,vignette:0},transitions:[],keepAudio:!0}}var S=.1;function G(e){return e.out-e.in}function be(e){return e.reduce((t,u)=>t+G(u),0)}function ot(e,t){let u=0;for(let i=0;i<t&&i<e.length;i++)u+=G(e[i]);return u}function xe(e,t){if(!e.length||t<0)return null;let u=0;for(let i=0;i<e.length;i++){const r=G(e[i]);if(t<u+r)return{idx:i,srcTime:e[i].in+(t-u)};u+=r}if(Math.abs(t-u)<1e-9||t<=u){const i=e.length-1;return{idx:i,srcTime:e[i].out}}return null}function nt(e,t){const u=xe(e,t);if(!u)return e;const i=e[u.idx];return u.srcTime<i.in+S||u.srcTime>i.out-S?e:[...e.slice(0,u.idx),{...i,out:u.srcTime},{...i,in:u.srcTime},...e.slice(u.idx+1)]}function st(e,t){return e.length<=1||!e[t]?e:e.filter((u,i)=>i!==t)}function lt(e,t){const u=e[t];return u?[...e.slice(0,t+1),{...u},...e.slice(t+1)]:e}function ct(e,t,u){if(t===u||!e[t]||u<0||u>=e.length)return e;const i=[...e],[r]=i.splice(t,1);return i.splice(u,0,r),i}function pt(e,t,u,i,r){if(!e[t])return e;const o=e.map(n=>({...n}));return u==="in"?o[t].in=Math.min(Math.max(i,0),o[t].out-S):o[t].out=Math.max(Math.min(i,r),o[t].in+S),o}function mt(e,t,u){const i=Math.max(Math.min(e.out,t),S),r=Math.min(Math.max(e.in,0),i-S),o=Math.min(Math.max(e.startAt,0),Math.max(0,u-S)),n=Math.max(S,i-r),s=Math.min(Math.max(Number(e.speed)||1,.5),2),l=Number.isInteger(e.track)&&e.track>=0?e.track:0,c=Math.min(Math.max(Number(e.fadeIn)||0,0),n),m=Math.min(Math.max(Number(e.fadeOut)||0,0),Math.max(0,n-c));return{...e,track:l,in:r,out:i,startAt:o,speed:s,fadeIn:c,fadeOut:m}}function dt(e=[]){return(e??[]).reduce((t,u)=>{if(u?.type!=="text"&&u?.type!=="sticker")return t;const i=Number.isFinite(u?.startAt)?Math.max(0,Number(u.startAt)):0,r=Number.isFinite(u?.endAt)?Math.max(i,Number(u.endAt)):i;return Math.max(t,r)},0)}function ht(e,t=[],u=[]){const i=be(e),r=t.reduce((n,s)=>Math.max(n,s.startAt+(s.out-s.in)),0),o=dt(u);return Math.max(i,r,o)}function ft(e){return[...new Set(e.map(t=>t.srcIdx))].sort((t,u)=>t-u)}function vt(e,t){const u=new Map(t.map((i,r)=>[i,r]));return e.map(i=>({...i,srcIdx:u.get(i.srcIdx)??0}))}var bt=100;function xt(e){return{past:[],present:e,future:[]}}function Ft(e,t){if(t===e.present)return e;const u=[...e.past,e.present];return u.length>bt&&u.shift(),{past:u,present:t,future:[]}}function gt(e,t){return t===e.present?e:{...e,present:t}}function Fe(e){return e.past.length>0}function ge(e){return e.future.length>0}function Et(e){return Fe(e)?{past:e.past.slice(0,-1),present:e.past[e.past.length-1],future:[e.present,...e.future]}:e}function At(e){if(!ge(e))return e;const[t,...u]=e.future;return{past:[...e.past,e.present],present:t,future:u}}var Ee={"tool.trim":"\u526A\u8F91","tool.crop":"\u88C1\u526A","tool.tune":"\u8C03\u8272","tool.filter":"\u6EE4\u955C","tool.annotate":"\u6807\u6CE8","tool.sticker":"\u8D34\u7EB8","tool.resize":"\u6BD4\u4F8B","tune.brightness":"\u4EAE\u5EA6","tune.contrast":"\u5BF9\u6BD4","tune.saturation":"\u9971\u548C","tune.gamma":"Gamma","overlay.select":"\u9009\u62E9","overlay.pen":"\u753B\u7B14","overlay.eraser":"\u6A61\u76AE","overlay.line":"\u76F4\u7EBF","overlay.arrow":"\u7BAD\u5934","overlay.rect":"\u77E9\u5F62","overlay.ellipse":"\u692D\u5706","overlay.text":"\u6587\u5B57","overlay.color":"\u7EBF\u8272","overlay.width":"\u7EBF\u5BBD","overlay.copySelected":"\u590D\u5236","overlay.delSelected":"\u5220\u9664\u9009\u4E2D","overlay.editSelected":"\u7F16\u8F91","overlay.pickImage":"\u9009\u62E9\u56FE\u7247","overlay.hint":"\u70B9 emoji/\u56FE\u7247\u6DFB\u52A0 \u2192 \u753B\u5E03\u4E0A\u62D6\u52A8\u6446\u4F4D,\u62D6\u53F3\u4E0B\u89D2\u7D2B\u8272\u628A\u624B\u7F29\u653E","overlay.textPlaceholder":"\u8F93\u5165\u6587\u5B57,\u56DE\u8F66\u786E\u8BA4","filter.none":"\u539F\u56FE","filter.bw":"\u9ED1\u767D","filter.sepia":"\u590D\u53E4","filter.warm":"\u6696\u9633","filter.cool":"\u51B7\u8C03","filter.vivid":"\u9C9C\u8273","ratio.orig":"\u539F\u59CB","ratio.free":"\u81EA\u7531\u6BD4\u4F8B","ratio.9:16":"\u7AD6\u5C4F 9:16","ratio.16:9":"\u6A2A\u5C4F 16:9","ratio.1:1":"\u65B9\u5F62 1:1","ratio.4:5":"\u7AD6\u56FE 4:5","act.fit":"\u9002\u5E94","act.zoomFit":"\u7F29\u653E\u81F3\u9002\u5F53\u5927\u5C0F","act.zoomTo":"\u7F29\u653E\u81F3 {value}%","act.split":"\u5206\u5272","act.copy":"\u590D\u5236","act.delete":"\u5220\u9664","act.restore":"\u8FD8\u539F","act.deleteMusic":"\u5220\u9664\u97F3\u4E50","act.cancel":"\u53D6\u6D88","act.exportPoster":"\u5BFC\u51FA\u5C01\u9762","act.exporting":"\u5BFC\u51FA\u4E2D\u2026","act.poster":"\u{1F5BC} \u5C01\u9762","act.again":"\u518D\u6B21\u4E0B\u8F7D","act.saveDrive":"\u5B58\u7F51\u76D8","act.changeImage":"\u2190 \u6362\u4E00\u5F20","act.changeVideo":"\u2190 \u6362\u4E00\u4E2A","crop.rotateLeft":"\u21BA \u5411\u5DE6\u65CB\u8F6C","crop.flipX":"\u21CB \u6C34\u5E73\u7FFB\u8F6C","crop.flipY":"\u21F5 \u5782\u76F4\u7FFB\u8F6C","crop.rotateLeftShort":"\u5DE6\u8F6C","crop.flipXShort":"\u6A2A\u7FFB","crop.flipYShort":"\u7AD6\u7FFB","tip.close":"\u5173\u95ED(\u6362\u6587\u4EF6)","tip.undo":"\u64A4\u9500","tip.redo":"\u91CD\u505A","tip.resetOpened":"\u91CD\u7F6E\u5230\u6253\u5F00\u6587\u4EF6\u65F6","tip.previewZoom":"\u9884\u89C8\u7F29\u653E\u6BD4\u4F8B","tip.previewZoomOut":"\u7F29\u5C0F\u9884\u89C8","tip.previewZoomIn":"\u653E\u5927\u9884\u89C8","tip.previewZoomFit":"\u9002\u5E94\u9884\u89C8","tip.previewPointer":"\u6307\u9488\u5DE5\u5177","tip.previewPan":"\u624B\u5DE5\u5177\uFF1A\u62D6\u52A8\u753B\u9762","tip.poster":"\u9884\u89C8\u5E76\u9009\u62E9\u5C01\u9762\u5E27","tip.keepAudio":"\u539F\u89C6\u9891\u58F0\u97F3\u5F00\u5173(\u4E0E\u97F3\u4E50\u6DF7\u97F3;\u9884\u89C8\u540C\u6B65)","tip.split":"\u5728\u64AD\u653E\u5934\u5904\u628A\u5F53\u524D\u7247\u6BB5\u4E00\u5206\u4E3A\u4E8C","tip.zoomOut":"\u7F29\u5C0F\u65F6\u95F4\u8F74(Ctrl+\u6EDA\u8F6E)","tip.zoomIn":"\u653E\u5927\u65F6\u95F4\u8F74(Ctrl+\u6EDA\u8F6E)","tip.fit":"\u7F29\u653E\u5230\u9002\u5E94\u5BBD\u5EA6","tip.addVideo":"\u6DFB\u52A0\u89C6\u9891\u7247\u6BB5","tip.addAudio":"\u6DFB\u52A0\u97F3\u4E50(\u97F3\u9891\u6587\u4EF6,\u6216\u9009\u542B\u58F0\u97F3\u7684\u89C6\u9891\u81EA\u52A8\u63D0\u53D6\u97F3\u8F68;\u4E0E\u539F\u58F0\u6DF7\u97F3)","tip.dupClip":"\u590D\u5236\u8BE5\u7247\u6BB5(\u63D2\u5230\u5176\u540E)","tip.delClip":"\u5220\u9664\u8BE5\u7247\u6BB5","tip.lockAspect":"\u9501\u5B9A\u7EB5\u6A2A\u6BD4","tip.dblConfirm":"\u53CC\u51FB\u786E\u8BA4\u88C1\u526A","err.notVideo":"\u8BF7\u9009\u62E9\u89C6\u9891\u6587\u4EF6","err.maxVideo":"\u6700\u591A {max} \u4E2A\u89C6\u9891\u7D20\u6750","err.videoLoad":"\u89C6\u9891\u52A0\u8F7D\u5931\u8D25,\u8BF7\u6362\u4E00\u4E2A\u6587\u4EF6","err.notAudio":"\u8BF7\u9009\u62E9\u97F3\u9891\u6587\u4EF6(mp3/wav/m4a),\u6216\u542B\u58F0\u97F3\u7684\u89C6\u9891(\u81EA\u52A8\u63D0\u53D6\u97F3\u8F68)","err.maxAudio":"\u6700\u591A {max} \u4E2A\u97F3\u9891\u7D20\u6750","err.audioLoad":"\u97F3\u9891\u52A0\u8F7D\u5931\u8D25,\u8BF7\u6362\u4E00\u4E2A\u6587\u4EF6","err.processFailed":"\u5904\u7406\u5931\u8D25","err.posterFailed":"\u5C01\u9762\u6E32\u67D3\u5931\u8D25","err.canvas":"canvas \u4E0D\u53EF\u7528","err.imageRead":"\u56FE\u7247\u8BFB\u53D6\u5931\u8D25,\u8BF7\u6362\u4E00\u5F20","err.notImage":"\u8BF7\u9009\u62E9\u56FE\u7247\u6587\u4EF6","err.fileType":"\u53EA\u652F\u6301\u56FE\u7247\u6216\u89C6\u9891\u6587\u4EF6","err.saveDrive":"\u5B58\u7F51\u76D8\u5931\u8D25","msg.processing":"\u6B63\u5728\u5BFC\u51FA\u4E2D\u2026","msg.exportingHint":"\u8BF7\u7A0D\u5019\uFF0C\u5BFC\u51FA\u5B8C\u6210\u540E\u4F1A\u81EA\u52A8\u8FD4\u56DE\u7ED3\u679C\u3002","msg.done":"\u5B8C\u6210 \u2713","msg.loading":"\u7D20\u6750\u52A0\u8F7D\u4E2D\u2026","msg.exported":"\u5DF2\u5BFC\u51FA\uFF1A","msg.saving":"\u5B58\u7F51\u76D8\u4E2D\u2026","msg.saved":"\u5DF2\u5B58\u5230\u7F51\u76D8 \u2713","lbl.ratioSection":"\u753B\u9762\u6BD4\u4F8B(\u88C1\u526A,\u4E0D\u53D8\u5F62)","lbl.dragToReposition":"\u2194 \u62D6\u52A8\u9884\u89C8\u53EF\u8C03\u6574\u88C1\u526A\u4F4D\u7F6E","lbl.sizeSection":"\u5BFC\u51FA\u5C3A\u5BF8(\u50CF\u7D20;\u6BD4\u4F8B\u4E0D\u7B26\u65F6 cover \u5C45\u4E2D\u88C1\u526A)","lbl.currentOut":"\u5F53\u524D\u8F93\u51FA","lbl.zoomSize":"\u5927\u5C0F","lbl.noScale":"(\u672A\u7F29\u653E)","lbl.coverNote":"\xB7 \u6BD4\u4F8B\u4E0D\u4E00\u81F4\u65F6\u5C45\u4E2D\u88C1\u526A(cover),\u4E0D\u53D8\u5F62","lbl.audioTrackHint":"\u266A \u97F3\u9891\u8F68(\u53F3\u4FA7 \uFF0B \u6DFB\u52A0\u97F3\u4E50,\u4E0E\u539F\u58F0\u6DF7\u97F3)","lbl.volume":"\u97F3\u91CF","lbl.volNote":"(\u9884\u89C8\u6700\u5927 100%,\u5BFC\u51FA\u6309\u8BBE\u5B9A\u503C)","lbl.music":"\u97F3\u4E50","kbd.fit":"\u21E7 F","poster.title":"\u9009\u62E9\u5C01\u9762\u5E27","panel.title":"\u5A92\u4F53\u7F16\u8F91\u5668","panel.subtitle":"\u4E0A\u4F20\u56FE\u7247 / \u89C6\u9891\uFF0C\u88C1\u526A \xB7 \u6EE4\u955C \xB7 \u6587\u5B57 \xB7 \u5BFC\u51FA","panel.pick":"\u70B9\u51FB\u9009\u62E9\u56FE\u7247\u6216\u89C6\u9891","panel.pickHint":"\u56FE\u7247\u7528 Filerobot \xB7 \u89C6\u9891\u53EF\u88C1\u526A/\u9759\u97F3/\u5C01\u9762"},zt={"tool.trim":"Trim","tool.crop":"Crop","tool.tune":"Tune","tool.filter":"Filters","tool.annotate":"Annotate","tool.sticker":"Stickers","tool.resize":"Ratio","tune.brightness":"Brightness","tune.contrast":"Contrast","tune.saturation":"Saturation","tune.gamma":"Gamma","overlay.select":"Select","overlay.pen":"Pen","overlay.eraser":"Eraser","overlay.line":"Line","overlay.arrow":"Arrow","overlay.rect":"Rect","overlay.ellipse":"Ellipse","overlay.text":"Text","overlay.color":"Color","overlay.width":"Width","overlay.copySelected":"Copy","overlay.delSelected":"Delete selected","overlay.editSelected":"Edit","overlay.pickImage":"Pick image","overlay.hint":"Tap emoji/image to add \u2192 drag to place, drag the purple corner handle to scale","overlay.textPlaceholder":"Type text, Enter to confirm","filter.none":"Original","filter.bw":"B&W","filter.sepia":"Sepia","filter.warm":"Warm","filter.cool":"Cool","filter.vivid":"Vivid","ratio.orig":"Original","ratio.free":"Free ratio","ratio.9:16":"Portrait 9:16","ratio.16:9":"Landscape 16:9","ratio.1:1":"Square 1:1","ratio.4:5":"Vertical 4:5","act.fit":"Fit","act.zoomFit":"Zoom to fit","act.zoomTo":"Zoom to {value}%","act.split":"Split","act.copy":"Copy","act.delete":"Delete","act.restore":"Reset","act.deleteMusic":"Remove music","act.cancel":"Cancel","act.exportPoster":"Export cover","act.exporting":"Exporting\u2026","act.poster":"\u{1F5BC} Cover","act.again":"Download again","act.saveDrive":"Save to drive","act.changeImage":"\u2190 Change image","act.changeVideo":"\u2190 Change file","crop.rotateLeft":"\u21BA Rotate left","crop.flipX":"\u21CB Flip horizontal","crop.flipY":"\u21F5 Flip vertical","crop.rotateLeftShort":"Rot","crop.flipXShort":"Flip","crop.flipYShort":"Flip","tip.close":"Close (change file)","tip.undo":"Undo","tip.redo":"Redo","tip.resetOpened":"Reset to opened file","tip.previewZoom":"Preview zoom","tip.previewZoomOut":"Zoom out preview","tip.previewZoomIn":"Zoom in preview","tip.previewZoomFit":"Fit preview","tip.previewPointer":"Pointer tool","tip.previewPan":"Hand tool: pan canvas","tip.poster":"Preview and pick a cover frame","tip.keepAudio":"Original audio on/off (mixed with music; preview follows)","tip.split":"Split the current clip at the playhead","tip.zoomOut":"Zoom out timeline (Ctrl+wheel)","tip.zoomIn":"Zoom in timeline (Ctrl+wheel)","tip.fit":"Fit to width","tip.addVideo":"Add video clip","tip.addAudio":"Add music (audio file, or a video with sound to extract its track; mixed with original)","tip.dupClip":"Duplicate clip (insert after)","tip.delClip":"Delete clip","tip.lockAspect":"Lock aspect ratio","tip.dblConfirm":"Double-click to confirm crop","err.notVideo":"Please choose a video file","err.maxVideo":"Up to {max} video sources","err.videoLoad":"Failed to load video, try another file","err.notAudio":"Choose an audio file (mp3/wav/m4a), or a video with sound (audio auto-extracted)","err.maxAudio":"Up to {max} audio sources","err.audioLoad":"Failed to load audio, try another file","err.processFailed":"Processing failed","err.posterFailed":"Failed to render cover","err.canvas":"Canvas unavailable","err.imageRead":"Failed to read image, try another","err.notImage":"Please choose an image file","err.fileType":"Only image or video files are supported","err.saveDrive":"Failed to save to drive","msg.processing":"Exporting\u2026","msg.exportingHint":"Please wait. The result will be returned automatically when export finishes.","msg.done":"Done \u2713","msg.loading":"Loading media\u2026","msg.exported":"Exported: ","msg.saving":"Saving\u2026","msg.saved":"Saved to drive \u2713","lbl.ratioSection":"Frame ratio (crop, no distortion)","lbl.dragToReposition":"\u2194 Drag the preview to reposition the crop","lbl.sizeSection":"Export size (px; cover center-crop when ratios differ)","lbl.currentOut":"Output","lbl.zoomSize":"Size","lbl.noScale":"(no scaling)","lbl.coverNote":"\xB7 center-cropped (cover) when ratios differ, no distortion","lbl.audioTrackHint":"\u266A Audio track (\uFF0B on the right to add music, mixed with original)","lbl.volume":"Volume","lbl.volNote":"(preview caps at 100%, export uses the set value)","lbl.music":"Music","kbd.fit":"\u21E7 F","poster.title":"Pick a cover frame","panel.title":"Media Editor","panel.subtitle":"Upload an image / video \u2014 crop \xB7 filters \xB7 text \xB7 export","panel.pick":"Click to choose an image or video","panel.pickHint":"Images via Filerobot \xB7 videos: trim/mute/cover"},Bt={"tool.trim":"Editar","tool.crop":"Recortar","tool.tune":"Ajustar color","tool.filter":"Filtros","tool.annotate":"Anotar","tool.sticker":"Stickers","tool.resize":"Proporci\xF3n","tune.brightness":"Brillo","tune.contrast":"Contraste","tune.saturation":"Saturaci\xF3n","tune.gamma":"Gamma","overlay.select":"Seleccionar","overlay.pen":"Pincel","overlay.eraser":"Borrador","overlay.line":"L\xEDnea","overlay.arrow":"Flecha","overlay.rect":"Rect\xE1ngulo","overlay.ellipse":"Elipse","overlay.text":"Texto","overlay.color":"Color","overlay.width":"Grosor","overlay.copySelected":"Copiar","overlay.delSelected":"Eliminar seleccionado","overlay.editSelected":"Editar","overlay.pickImage":"Elegir imagen","overlay.hint":"Toca un emoji/imagen para a\xF1adirlo \u2192 arrastra para colocarlo, arrastra el tirador morado para escalar","overlay.textPlaceholder":"Escribe texto, Enter para confirmar","filter.none":"Original","filter.bw":"Blanco y negro","filter.sepia":"Sepia","filter.warm":"C\xE1lido","filter.cool":"Fr\xEDo","filter.vivid":"Intenso","ratio.orig":"Original","ratio.free":"Libre","ratio.9:16":"Vertical 9:16","ratio.16:9":"Horizontal 16:9","ratio.1:1":"Cuadrado 1:1","ratio.4:5":"Vertical 4:5","act.fit":"Ajustar","act.zoomFit":"Ajustar a pantalla","act.zoomTo":"Zoom al {value}%","act.split":"Dividir","act.copy":"Copiar","act.delete":"Eliminar","act.restore":"Restablecer","act.deleteMusic":"Quitar m\xFAsica","act.cancel":"Cancelar","act.exportPoster":"Exportar portada","act.exporting":"Exportando\u2026","act.poster":"\u{1F5BC} Portada","act.again":"Descargar de nuevo","act.saveDrive":"Guardar en disco","act.changeImage":"\u2190 Cambiar imagen","act.changeVideo":"\u2190 Cambiar archivo","crop.rotateLeft":"\u21BA Girar a la izquierda","crop.flipX":"\u21CB Voltear horizontal","crop.flipY":"\u21F5 Voltear vertical","crop.rotateLeftShort":"Giro","crop.flipXShort":"Flip","crop.flipYShort":"Flip","tip.close":"Cerrar (cambiar archivo)","tip.undo":"Deshacer","tip.redo":"Rehacer","tip.resetOpened":"Restablecer al archivo abierto","tip.previewZoom":"Zoom de vista previa","tip.previewZoomOut":"Reducir vista previa","tip.previewZoomIn":"Ampliar vista previa","tip.previewZoomFit":"Ajustar vista previa","tip.previewPointer":"Herramienta de puntero","tip.previewPan":"Mano: desplazar lienzo","tip.poster":"Previsualizar y elegir portada","tip.keepAudio":"Activar/desactivar audio original (mezclado con m\xFAsica; la vista previa lo refleja)","tip.split":"Dividir el clip actual en el cursor","tip.zoomOut":"Reducir l\xEDnea de tiempo (Ctrl+rueda)","tip.zoomIn":"Ampliar l\xEDnea de tiempo (Ctrl+rueda)","tip.fit":"Ajustar al ancho","tip.addVideo":"A\xF1adir clip de v\xEDdeo","tip.addAudio":"A\xF1adir m\xFAsica (archivo de audio o v\xEDdeo con sonido para extraer la pista; se mezcla con el original)","tip.dupClip":"Duplicar clip (insertar despu\xE9s)","tip.delClip":"Eliminar clip","tip.lockAspect":"Bloquear proporci\xF3n","tip.dblConfirm":"Doble clic para confirmar recorte","err.notVideo":"Elige un archivo de v\xEDdeo","err.maxVideo":"M\xE1ximo {max} v\xEDdeos","err.videoLoad":"No se pudo cargar el v\xEDdeo, prueba con otro archivo","err.notAudio":"Elige un audio (mp3/wav/m4a) o un v\xEDdeo con sonido (se extrae autom\xE1ticamente)","err.maxAudio":"M\xE1ximo {max} audios","err.audioLoad":"No se pudo cargar el audio, prueba con otro archivo","err.processFailed":"Error de procesamiento","err.posterFailed":"No se pudo renderizar la portada","err.canvas":"Canvas no disponible","err.imageRead":"No se pudo leer la imagen, prueba con otra","err.notImage":"Elige un archivo de imagen","err.fileType":"Solo se admiten archivos de imagen o v\xEDdeo","err.saveDrive":"No se pudo guardar en disco","msg.processing":"Exportando\u2026","msg.exportingHint":"Espera un momento. El resultado se devolver\xE1 autom\xE1ticamente al finalizar.","msg.done":"Listo \u2713","msg.loading":"Cargando medios\u2026","msg.exported":"Exportado: ","msg.saving":"Guardando\u2026","msg.saved":"Guardado en disco \u2713","lbl.ratioSection":"Proporci\xF3n de imagen (recorte, sin deformar)","lbl.dragToReposition":"\u2194 Arrastra la vista previa para reposicionar el recorte","lbl.sizeSection":"Tama\xF1o de exportaci\xF3n (px; recorte cover centrado si la proporci\xF3n difiere)","lbl.currentOut":"Salida","lbl.zoomSize":"Tama\xF1o","lbl.noScale":"(sin escala)","lbl.coverNote":"\xB7 recorte centrado (cover) cuando la proporci\xF3n difiere, sin deformar","lbl.audioTrackHint":"\u266A Pista de audio (\uFF0B a la derecha para a\xF1adir m\xFAsica, mezclada con el original)","lbl.volume":"Volumen","lbl.volNote":"(la vista previa limita a 100%, la exportaci\xF3n usa el valor definido)","lbl.music":"M\xFAsica","kbd.fit":"\u21E7 F","poster.title":"Elegir portada","panel.title":"Editor multimedia","panel.subtitle":"Sube una imagen / v\xEDdeo \u2014 recorta \xB7 filtros \xB7 texto \xB7 exporta","panel.pick":"Haz clic para elegir una imagen o v\xEDdeo","panel.pickHint":"Im\xE1genes con Filerobot \xB7 v\xEDdeos: cortar/silenciar/portada"},yt={\u7B80:"\u7C21",\u4F53:"\u9AD4",\u56FE:"\u5716",\u9891:"\u983B",\u89C6:"\u8996",\u8F91:"\u8F2F",\u8C03:"\u8ABF",\u6EE4:"\u6FFE",\u6807:"\u6A19",\u6CE8:"\u8A3B",\u8D34:"\u8CBC",\u9009:"\u9078",\u62E9:"\u64C7",\u7EBF:"\u7DDA",\u7BAD:"\u7BAD",\u5934:"\u982D",\u590D:"\u8907",\u5220:"\u522A",\u9664:"\u9664",\u7F16:"\u7DE8",\u8FB9:"\u908A",\u8F93:"\u8F38",\u5165:"\u5165",\u786E:"\u78BA",\u8BA4:"\u8A8D",\u9971:"\u98FD",\u5BF9:"\u5C0D",\u6696:"\u6696",\u9633:"\u967D",\u51B7:"\u51B7",\u7EB5:"\u7E31",\u6A2A:"\u6A6B",\u9002:"\u9069",\u5E94:"\u61C9",\u7F29:"\u7E2E",\u5B9E:"\u5BE6",\u9645:"\u969B",\u5BFC:"\u5C0E",\u51FA:"\u51FA",\u5C01:"\u5C01",\u9762:"\u9762",\u6362:"\u63DB",\u5F20:"\u5F35",\u9884:"\u9810",\u89C8:"\u89BD",\u52A8:"\u52D5",\u58F0:"\u8072",\u5F00:"\u958B",\u5173:"\u95DC",\u4E0E:"\u8207",\u4E50:"\u6A02",\u6DF7:"\u6DF7",\u5904:"\u8655",\u8F7D:"\u8F09",\u9519:"\u932F",\u8BEF:"\u8AA4",\u8BFB:"\u8B80",\u4EC5:"\u50C5",\u7EC8:"\u7D42",\u7A0D:"\u7A0D",\u5019:"\u5019",\u8FD4\u56DE:"\u8FD4\u56DE",\u5F53\u524D:"\u76EE\u524D",\u8F93\u51FA:"\u8F38\u51FA",\u753B:"\u756B",\u53D8:"\u8B8A",\u97F3\u9891:"\u97F3\u8A0A",\u97F3\u8F68:"\u97F3\u8ECC",\u6DFB\u52A0:"\u65B0\u589E",\u5220\u9664:"\u522A\u9664",\u4FDD\u5B58:"\u5132\u5B58",\u52A0\u8F7D:"\u8F09\u5165",\u7F51\u76D8:"\u7DB2\u76E4"},Ae=e=>{let t=e;for(const[u,i]of Object.entries(yt).sort((r,o)=>o[0].length-r[0].length))t=t.replaceAll(u,i);return t},Dt=Object.fromEntries(Object.entries(Ee).map(([e,t])=>[e,Ae(t)])),te={zh:Ee,en:zt,es:Bt,"zh-Hant":Dt};function $t(e,t,u){let i=te[e]?.[t]??te.zh[t]??t;if(u)for(const[r,o]of Object.entries(u))i=i.replaceAll(`{${r}}`,String(o));return i}var Y=[{platform:"tiktok",postType:"video",label:"TikTok Video",shortLabel:"TT\xB7Video",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"instagram",postType:"post",label:"Instagram Post",shortLabel:"IG\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"instagram",postType:"reels",label:"Instagram Reels",shortLabel:"IG\xB7Reels",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"instagram",postType:"story",label:"Instagram Story",shortLabel:"IG\xB7Story",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"facebook",postType:"post",label:"Facebook Post",shortLabel:"FB\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"facebook",postType:"reels",label:"Facebook Reels",shortLabel:"FB\xB7Reels",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"youtube",postType:"video",label:"YouTube Video",shortLabel:"YT\xB7Video",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"1080p"},{platform:"youtube",postType:"shorts",label:"YouTube Shorts",shortLabel:"YT\xB7Shorts",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"pinterest",postType:"pin",label:"Pinterest Pin",shortLabel:"PIN",ratio:"2:3",imageSize:"1664x2496",videoRatio:"9:16",videoResolution:"720p"},{platform:"x",postType:"post",label:"X Post",shortLabel:"X\xB7Post",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"720p"},{platform:"linkedin",postType:"post",label:"LinkedIn Post",shortLabel:"LI\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"linkedin",postType:"video",label:"LinkedIn Video",shortLabel:"LI\xB7Video",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"1080p"},{platform:"threads",postType:"post",label:"Threads Post",shortLabel:"TH\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"telegram",postType:"post",label:"Telegram Post",shortLabel:"TG\xB7Post",ratio:"1:1",imageSize:"2048x2048",videoRatio:"9:16",videoResolution:"720p"},{platform:"reddit",postType:"post",label:"Reddit Post",shortLabel:"RD\xB7Post",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"720p"}],Ct={"1:1":"\u65B9\u5F62 1:1","4:5":"\u7AD6\u56FE 4:5","3:4":"\u7AD6\u56FE 3:4","9:16":"\u7AD6\u5C4F 9:16","16:9":"\u6A2A\u5C4F 16:9","2:3":"\u7AD6\u56FE 2:3","1.91:1":"\u6A2A\u5E45 1.91:1"};function L(e){const[t,u]=e.split(":").map(Number);return!t||!u?1:t/u}function ze(e){const t=new Set,u=[];for(const i of e)!i||t.has(i)||(t.add(i),u.push({ratio:i,value:L(i),label:Ct[i]??i}));return u}var wt=ze(["1:1","4:5","3:4","2:3","9:16","16:9","1.91:1"]),St=ze(["9:16","16:9","1:1","4:5"]);function Be(e=Y){const t=new Set,u=[];for(const i of e){if(!i.videoRatio)continue;const r=`${i.platform}:${i.postType}:${i.videoRatio}`;if(t.has(r))continue;t.add(r);const o=i.label.split(" ").slice(0,-1).join(" ")||i.label;u.push({platform:i.platform,postType:i.postType,label:`${o} ${i.videoRatio}`,ratio:i.videoRatio,value:L(i.videoRatio)})}return u}var Mt=Be();function ye(e=Y){const t=new Map;for(const u of e){const i=t.get(u.platform);(!i||i.postType!=="post"&&u.postType==="post")&&t.set(u.platform,u)}return Array.from(t.values()).map(u=>{const[i,r]=u.imageSize.split("x").map(Number),o=u.label.split(" ").slice(0,-1).join(" ")||u.label;return{platform:u.platform,label:`${o} ${u.ratio}`,ratio:u.ratio,value:L(u.ratio),w:i,h:r}})}var Tt=ye();function Pt(e,t){return e>=1?{w:Math.round(t*e/2)*2,h:t}:{w:t,h:Math.round(t/e/2)*2}}function De(e=Y){const t=new Set,u=[];for(const i of e){if(!i.videoRatio||!i.videoResolution)continue;const r=i.videoResolution==="1080p"?1080:720,{w:o,h:n}=Pt(L(i.videoRatio),r),s=`${o}x${n}`;t.has(s)||(t.add(s),u.push({label:`${i.shortLabel} ${o}\xD7${n}`,w:o,h:n}))}return u}var Rt=De();function kt(e,t){if(e.isDuplicated)return{};if((e.rotation??0)!==0)return{};const u=t.adjustments?.rotation??0;return u?{rotation:-u}:{}}function It(e){const t=Z(e);if(t===0)return[];if(t===90)return["transpose=1"];if(t===180)return["transpose=1","transpose=1"];if(t===270)return["transpose=2"];const u=`${t}*PI/180`;return[`rotate=${u}:ow=rotw(${u}):oh=roth(${u}):c=black`]}function x(e){return Math.max(-1,Math.min(1,Number(e)||0))}function N(e){return Math.max(0,Math.min(1,Number(e)||0))}function $e(e,t,u,i){const r=Math.round(Number(e));return Number.isFinite(r)?Math.min(u,Math.max(t,r)):i}function Ce(e){return Math.min(Math.max(Number(e)||1,.5),2)}function jt(e){const t=[];let u=Ce(e);for(;u<.5-1e-6||u>2+1e-6;)u<.5?(t.push("atempo=0.5"),u/=.5):(t.push("atempo=2"),u/=2);return Math.abs(u-1)>1e-4&&t.push(`atempo=${u.toFixed(4).replace(/0+$/,"").replace(/\.$/,"")}`),t}function R(e,t){const u=$e(e,2,8192,t);return u%2===0?u:u-1}function k(e){return e?.exportSettings??null}function Lt(e){const t=String(k(e)?.format??"mp4").toLowerCase();return t==="mov"||t==="mxf"?t:"mp4"}function we(e){return $e(k(e)?.frameRate,12,120,30)}function Nt(e){const t=ee(e.canvas,e),u=k(e);if(!u)return t;const i=Number.isFinite(Number(u.width))&&Number(u.width)>0,r=Number.isFinite(Number(u.height))&&Number(u.height)>0;if(!i&&!r)return t;const o=t.w>0&&t.h>0?t.w/t.h:1;if(i&&r)return{w:R(u.width,t.w),h:R(u.height,t.h)};if(i){const s=R(u.width,t.w);return{w:s,h:R(s/o,t.h)}}const n=R(u.height,t.h);return{w:R(n*o,t.w),h:n}}function Ot(e){const t=Number(k(e)?.videoBitrateKbps);return Number.isFinite(t)&&t>=100?Math.round(t):0}function Vt(e){const t=Number(k(e)?.audioBitrateKbps);return Number.isFinite(t)&&t>=32?Math.round(t):0}function _t(e){return k(e)?.audioCodec==="mp3"?"libmp3lame":"aac"}function ue(e){return ee(e.canvas,e)}function ie(e){const t=ue(e),u=Nt(e);return u.w===t.w&&u.h===t.h?[]:[`scale=${u.w}:${u.h}`]}function Se(e){const t=x(e?.brightness),u=x(e?.contrast),i=x(e?.saturation),r=x(e?.gamma);if(t===0&&u===0&&i===0&&r===0)return null;const o=[];if(t!==0||u!==0){const s=B(Math.max(0,1+t)),l=B(Math.max(0,1+u)),c=`clip(((val*${s})-128)*${l}+128,0,255)`;o.push(`lutrgb=r='${c}':g='${c}':b='${c}'`)}const n=[];return i!==0&&n.push(`saturation=${1+i}`),r!==0&&n.push(`gamma=${(1+r*(r>0?1:.5)).toFixed(3)}`),n.length&&o.push(`eq=${n.join(":")}`),o.join(",")}function B(e){return`${Math.round(e*1e3)/1e3}`}function Me(e){const t=x(e?.temperature),u=x(e?.tint);if(t===0&&u===0)return null;const i=x(t*.18+u*.08),r=x(t*.02-u*.12),o=x(-t*.18+u*.08);return`colorbalance=rs=${B(i)}:gs=${B(r)}:bs=${B(o)}`}function Te(e){const t=x(e?.vibrance);return t===0?null:`vibrance=intensity=${B(t)}`}function I(e,t,u){if(e===t)return u<e?0:1;const i=Math.max(0,Math.min(1,(u-e)/(t-e)));return i*i*(3-2*i)}function Zt(e){const t=I(.08,.4,e),u=1-I(.6,.92,e);return Math.max(0,Math.min(1,t*u*2.2))}function Ht(e,t){const u=1-I(.18,.62,e),i=1-I(.04,.32,e),r=I(.38,.84,e),o=I(.7,.98,e),n=Zt(e),s=t.shadows*u*.28+t.highlights*r*.24+t.blacks*i*.2+t.whites*o*.2+t.lightSense*n*.18+t.fade*(.12+u*.06);return Math.max(0,Math.min(1,e+s))}function Pe(e){const t={highlights:x(e?.highlights),shadows:x(e?.shadows),whites:x(e?.whites),blacks:x(e?.blacks),lightSense:x(e?.lightSense),fade:N(e?.fade)};return Object.values(t).some(u=>Math.abs(u)>1e-4)?`curves=master='${[0,.18,.36,.5,.68,.84,1].map(u=>`${B(u)}/${B(Ht(u,t))}`).join(" ")}'`:null}function Re(e){const t=[],u=N(e?.clarity),i=N(e?.sharpen);return u>1e-4&&t.push(`unsharp=lx=7:ly=7:la=${B(u*1.8)}:cx=7:cy=7:ca=0`),i>1e-4&&t.push(`unsharp=lx=3:ly=3:la=${B(.35+i*2.1)}:cx=3:cy=3:ca=${B(i*.55)}`),t}function ke(e){const t=N(e?.grain);return t<=1e-4?null:`noise=alls=${Math.round(6+t*26)}:allf=t`}function Ie(e){const t=N(e?.vignette);if(t<=1e-4)return null;const u=Math.max(.12,.42-t*.22);return`vignette=angle=${B(u)}*PI`}function ae(e,t={}){const u=[];if(e.flipX&&u.push("hflip"),e.flipY&&u.push("vflip"),u.push(...It(e.rotation)),e.crop){const{x:m,y:h,width:v,height:A}=e.crop;u.push(`crop=${v}:${A}:${m}:${h}`)}if(e.scale){const{width:m,height:h,fit:v}=e.scale;v==="force"?u.push(`scale=${m}:${h}`):v==="cover"?u.push(`scale=${m}:${h}:force_original_aspect_ratio=increase`,`crop=${m}:${h}`):u.push(`scale=${m}:${h}:force_original_aspect_ratio=decrease`,`pad=${m}:${h}:(ow-iw)/2:(oh-ih)/2`)}const i=Se(e.filters);i&&u.push(i);const r=Me(e.filters);r&&u.push(r);const o=Te(e.filters);o&&u.push(o);const n=Pe(e.filters);n&&u.push(n),u.push(...Re(e.filters));const s=ke(e.filters);s&&u.push(s);const l=Ie(e.filters);l&&u.push(l);const c=H(e.filterPreset);return c&&u.push(c.vf),t.includeExportScale!==!1&&u.push(...ie(e)),u.push(`fps=${we(e)}`),Z(e.rotation)%90!==0&&!e.scale&&u.push("scale=trunc(iw/2)*2:trunc(ih/2)*2"),u}var je={fade:"fade",slide:"slideleft",wipe:"wipeleft",flip:"horzopen",clockWipe:"radial",star:"pixelize",circle:"circleopen",rectangle:"rectcrop"},Gt={fade:"qsin",slide:"tri",wipe:"tri",flip:"exp",clockWipe:"qsin",star:"tri",circle:"qsin",rectangle:"qsin"};function O(e){return e.out-e.in}function Le(e,t,u){const i=e&&typeof e.type=="string"?e.type:"none",r=je[i]?i:"none",o=Math.max(0,Math.min(1.2,t-.05,u-.05));if(r==="none"||o<=.05)return{type:"none",duration:0,effect:"fade",curve:"tri"};const n=Number(e?.duration),s=Math.min(Math.max(Number.isFinite(n)?n:.4,.1),o);return{type:r,duration:s,effect:je[r],curve:Gt[r]??"tri"}}function Yt(e,t){if(!Array.isArray(t)||t.length<2)return!1;for(let u=0;u<t.length-1;u++){const i=Le(e?.[u],O(t[u]),O(t[u+1]));if(i.type!=="none"&&i.duration>0)return!0}return!1}function qt(e,t){const u=[];let i=0;for(let r=0;r<e.length-1;r++){const o=Le(t?.[r],O(e[r]),O(e[r+1]));o.type!=="none"&&o.duration>0&&(u.push({start:i,end:r,transition:o}),i=r+1)}return u.push({start:i,end:e.length-1,transition:null}),u}function Xt(e,t,u){let i=0;for(let r=t;r<=u;r++)i+=O(e[r]);return i}function Ut(e,t,u,i){const r=qt(t,u).map((l,c)=>{const m=Xt(t,l.start,l.end);if(l.start===l.end)return{vLabel:`[v${l.start}]`,aLabel:i?`[a${l.start}]`:"",duration:m,transition:l.transition};const h=[];for(let F=l.start;F<=l.end;F++)h.push(i?`[v${F}][a${F}]`:`[v${F}]`);const v=`[sgv${c}]`,A=i?`[sga${c}]`:"";return e.push(`${h.join("")}concat=n=${l.end-l.start+1}:v=1:a=${i?1:0}${i?`${v}${A}`:v}`),{vLabel:v,aLabel:A,duration:m,transition:l.transition}});let o=r[0].vLabel,n=i?r[0].aLabel:"",s=r[0].duration;for(let l=1;l<r.length;l++){const c=r[l-1].transition,m=r[l],h=`[vx${l}]`,v=Math.max(0,s-c.duration);if(e.push(`${o}${m.vLabel}xfade=transition=${c.effect}:duration=${c.duration}:offset=${v}${h}`),o=h,i){const A=`[ax${l}]`;e.push(`${n}${m.aLabel}acrossfade=d=${c.duration}:c1=${c.curve}:c2=${c.curve}${A}`),n=A}s=s+m.duration-c.duration}return{vLabel:o,aLabel:n,duration:s}}function re(e,t){const u=Lt(t),i=u==="mxf"?["-c:v","mpeg2video","-pix_fmt","yuv422p"]:["-c:v","libx264","-preset","veryfast","-pix_fmt","yuv420p","-movflags","+faststart"],r=Ot(t);if(r>0?i.push("-b:v",`${r}k`,"-maxrate",`${r}k`,"-bufsize",`${Math.max(r*2,512)}k`):u==="mxf"&&i.push("-q:v","2"),e)if(u==="mxf")i.push("-c:a","pcm_s16le");else{i.push("-c:a",_t(t));const o=Vt(t);o>0&&i.push("-b:a",`${o}k`)}return u==="mxf"&&i.push("-f","mxf"),i}var q="aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo",Ne="anullsrc=r=44100:cl=stereo";function Oe(e){return e>.02?`,afade=t=in:st=0:d=0.01,afade=t=out:st=${Math.round((e-.01)*1e3)/1e3}:d=0.01`:""}var Wt="alimiter=limit=0.95:level=disabled:latency=1",Kt=3,Qt=.5;function Ve(e,t=0){const u=Math.max(t,Math.floor(Number(e)||0));return u%2===0?u:u-1}function Jt(e){const t=Number.isFinite(e?.startAt)?Math.max(0,Number(e.startAt)):0,u=Number(e?.endAt);return Number.isFinite(u)?{startAt:t,endAt:Math.max(t+Qt,u)}:{startAt:t,endAt:t+Kt}}function eu(e,t){const u=Math.max(2,Ve(t.w,2)),i=Math.max(2,Ve(t.h,2));return!(u>1)||!(i>1)?null:{x:0,y:0,w:u,h:i}}function tu(e){if(e?.type==="filter"){const l=H(e.filterPreset);return l?[l.vf]:[]}if(e?.type!=="adjust")return[];const t=[],u=Se(e);u&&t.push(u);const i=Me(e);i&&t.push(i);const r=Te(e);r&&t.push(r);const o=Pe(e);o&&t.push(o),t.push(...Re(e));const n=ke(e);n&&t.push(n);const s=Ie(e);return s&&t.push(s),t}function _e(e,t){const u=[];for(const i of e??[]){if(i?.type!=="filter"&&i?.type!=="adjust")continue;const r=eu(i,t);if(!r)continue;const o=tu(i);o.length&&u.push({rect:r,filters:o,...Jt(i)})}return u}function Ze(e,t=1/0){const u=[];for(const i of e??[]){if(i?.type!=="pen"&&i?.type!=="line"&&i?.type!=="arrow"&&i?.type!=="rect"&&i?.type!=="ellipse"&&i?.type!=="text"&&i?.type!=="sticker")continue;const r=Number(i.startAt),o=Number(i.endAt);if(!(!Number.isFinite(r)||!Number.isFinite(o)||o<=r)&&(u.push({startAt:Math.max(0,r),endAt:Math.max(r+.01,o)}),u.length>=t))break}return u}function He(e,t,u,i){let r=t;return i.forEach((o,n)=>{const s=`[vtxt${u+n}]`;e.push(`${r}[${u+n}:v]overlay=0:0:enable='between(t,${o.startAt.toFixed(3)},${o.endAt.toFixed(3)})'${s}`),r=s}),r}function Ge(e,t,u){let i=t;return u.forEach((r,o)=>{const n=`[vfxsrc${o}]`,s=`[vfxbase${o}]`,l=`[vfxcrop${o}]`,c=`[vfx${o}]`,{rect:m}=r;e.push(`${i}split=2${n}${s}`),e.push(`${n}crop=${m.w}:${m.h}:${m.x}:${m.y},${r.filters.join(",")}${l}`),e.push(`${s}${l}overlay=${m.x}:${m.y}:enable='between(t,${r.startAt.toFixed(3)},${r.endAt.toFixed(3)})'${c}`),i=c}),i}function uu(e,t,u,i,r,o=[]){const n=ae(e,{includeExportScale:!1}),s=e.clips,l=e.keepAudio&&r,c=s.length>=2,m=_e(e.overlays,ue(e)),h=Ze(e.overlays,o.length),v=o.slice(0,h.length);if(c||i||v.length||m.length){const z=[];let d;if(c){s.forEach((E,C)=>{z.push(`[0:v]trim=start=${E.in}:end=${E.out},setpts=PTS-STARTPTS[v${C}]`),l&&z.push(`[0:a]atrim=start=${E.in}:end=${E.out},asetpts=PTS-STARTPTS${Oe(E.out-E.in)}[a${C}]`)});const f=s.map((E,C)=>l?`[v${C}][a${C}]`:`[v${C}]`).join(""),g=l?"[vcat][acat]":"[vcat]";z.push(`${f}concat=n=${s.length}:v=1:a=${l?1:0}${g}`),d="[vcat]"}else d="[0:v]";if(n.length&&(z.push(`${d}${n.join(",")}[vflt]`),d="[vflt]"),m.length&&(d=Ge(z,d,m)),i?(z.push(`${d}[1:v]overlay=0:0[vout]`),d="[vout]"):d==="[0:v]"&&(z.push("[0:v]null[vout]"),d="[vout]"),v.length){const f=1+(i?1:0);d=He(z,d,f,h)}const y=ie(e);y.length&&(z.push(`${d}${y.join(",")}[vscaled]`),d="[vscaled]");const V=[];!c&&s.length===1&&V.push("-ss",String(s[0].in),"-t",String(s[0].out-s[0].in));const $=["-y",...V,"-i",t];i&&$.push("-i",i);for(const f of v)$.push("-i",f);return $.push("-filter_complex",z.join(";"),"-map",d),l&&$.push("-map",c?"[acat]":"0:a?"),$.push(...re(l,e)),$.push(u),$}const A=ae(e),F=["-y","-ss",String(s[0].in),"-t",String(s[0].out-s[0].in),"-i",t];return A.length&&F.push("-vf",A.join(",")),l||F.push("-an"),F.push(...re(l,e)),F.push(u),F}function iu(e,t,u){const{videoPaths:i,videoHasAudio:r,audioPaths:o,overlayPath:n,textOverlayPaths:s=[]}=t,l=e.audioClips??[],c=Yt(e.transitions,e.clips),m=Ze(e.overlays,s.length),h=s.slice(0,m.length);if(i.length===1&&l.length===0&&!c)return uu(e,i[0],u,n,r[0]??!1,h);const v=i.length,A=o.length,F=e.canvas.w,z=e.canvas.h,d=e.clips,y=e.keepAudio&&d.some(p=>r[p.srcIdx]),V=we(e),$=d.reduce((p,b)=>p+(b.out-b.in),0),f=[];d.forEach((p,b)=>{f.push(`[${p.srcIdx}:v]trim=start=${p.in}:end=${p.out},setpts=PTS-STARTPTS,scale=${F}:${z}:force_original_aspect_ratio=increase,crop=${F}:${z},setsar=1,fps=${V},format=yuv420p[v${b}]`),y&&(r[p.srcIdx]?f.push(`[${p.srcIdx}:a]atrim=start=${p.in}:end=${p.out},asetpts=PTS-STARTPTS${Oe(p.out-p.in)},${q}[a${b}]`):f.push(`${Ne},atrim=start=0:end=${p.out-p.in},asetpts=PTS-STARTPTS,${q}[a${b}]`))});let g="[vcat]",E=y?"[acat]":"",C=$;if(c){const p=Ut(f,d,e.transitions??[],y);g=p.vLabel,E=y?p.aLabel:"",C=p.duration}else{const p=d.map((b,M)=>y?`[v${M}][a${M}]`:`[v${M}]`).join("");f.push(`${p}concat=n=${d.length}:v=1:a=${y?1:0}${y?"[vcat][acat]":"[vcat]"}`)}if(!y&&l.length&&(f.push(`${Ne},atrim=start=0:end=${C},asetpts=PTS-STARTPTS,${q}[acat]`),E="[acat]"),l.length){l.forEach((b,M)=>{const le=Math.max(0,Math.round(b.startAt*1e3)),U=Math.max(0,b.out-b.in),Ye=Ce(b.speed),W=Math.min(Math.max(Number(b.fadeIn)||0,0),U),K=Math.min(Math.max(Number(b.fadeOut)||0,0),Math.max(0,U-W)),_=[`atrim=start=${b.in}:end=${b.out}`,"asetpts=PTS-STARTPTS",...jt(Ye),`volume=${b.volume}`];W>1e-4&&_.push(`afade=t=in:st=0:d=${W}`),K>1e-4&&_.push(`afade=t=out:st=${Math.max(0,U-K)}:d=${K}`),_.push(q,`adelay=${le}|${le}`),f.push(`[${v+M}:a]${_.join(",")}[mu${M}]`)});const p=`${E}${l.map((b,M)=>`[mu${M}]`).join("")}`;f.push(`${p}amix=inputs=${1+l.length}:duration=first:dropout_transition=0:normalize=0,${Wt}[aout]`),E="[aout]"}const oe=ae(e,{includeExportScale:!1}),ne=_e(e.overlays,ue(e));if(oe.length&&(f.push(`${g}${oe.join(",")}[vflt]`),g="[vflt]"),ne.length&&(g=Ge(f,g,ne)),n&&(f.push(`${g}[${v+A}:v]overlay=0:0[vout]`),g="[vout]"),h.length){const p=v+A+(n?1:0);g=He(f,g,p,m)}const se=ie(e);se.length&&(f.push(`${g}${se.join(",")}[vscaled]`),g="[vscaled]");const D=["-y"];for(const p of i)D.push("-i",p);for(const p of o)D.push("-i",p);n&&D.push("-i",n);for(const p of h)D.push("-i",p);D.push("-filter_complex",f.join(";"),"-map",g);const X=!!E;return X&&D.push("-map",E),D.push(...re(X,e)),X&&D.push("-ar","44100","-ac","2"),D.push(u),D}function au(e,t,u){return["-y","-ss",String(t),"-i",e,"-frames:v","1","-q:v","2",u]}
|
|
1
|
+
var Q=Object.defineProperty,qt=Object.getOwnPropertyDescriptor,Xt=Object.getOwnPropertyNames,Ut=Object.prototype.hasOwnProperty,Wt=(t,e)=>{for(var u in e)Q(t,u,{get:e[u],enumerable:!0})},Kt=(t,e,u,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Xt(e))!Ut.call(t,r)&&r!==u&&Q(t,r,{get:()=>e[r],enumerable:!(i=qt(e,r))||i.enumerable});return t},Qt=t=>Kt(Q({},"__esModule",{value:!0}),t),ct={};Wt(ct,{AudioClip:()=>vt,Clip:()=>ft,DEFAULT_PLATFORM_TARGETS:()=>Y,DEG2RAD:()=>pt,EDITOR_MESSAGES:()=>et,FILTER_PRESETS:()=>dt,IMAGE_PLATFORM_PRESETS:()=>Te,IMAGE_RATIO_PRESETS:()=>we,MIN_CLIP:()=>S,Overlay:()=>ht,VIDEO_PLATFORM_RATIO_PRESETS:()=>Me,VIDEO_RATIO_PRESETS:()=>Se,VIDEO_SIZE_PRESETS:()=>Re,VideoEditState:()=>oe,buildFfmpegArgs:()=>iu,buildFilterCss:()=>ee,buildImagePlatformPresets:()=>yt,buildPosterArgs:()=>ou,buildVideoPlatformRatioPresets:()=>Bt,buildVideoSizePresets:()=>$t,canRedo:()=>gt,canUndo:()=>xt,centeredMaxRect:()=>J,clampAudioClip:()=>me,clampRect:()=>Jt,clipDuration:()=>G,clipStartsAt:()=>ae,compensateAnnotationRotation:()=>ke,contentDuration:()=>he,createHistory:()=>Fe,defaultVideoEditState:()=>re,duplicateClip:()=>le,evenize:()=>T,findFilterPreset:()=>H,fitRects:()=>te,locateOutput:()=>Ft,normalizeDeg:()=>Z,outputSize:()=>tt,parseRatio:()=>L,pushHistory:()=>xe,redo:()=>Ae,remapSrcIndices:()=>ve,removeClip:()=>se,reorderClips:()=>ce,replacePresent:()=>ge,rotatedSize:()=>mt,splitAtOutput:()=>ne,tEditor:()=>De,toHant:()=>At,totalDuration:()=>bt,trimClipEdge:()=>pe,undo:()=>Ee,usedVideoSrcIndices:()=>fe}),module.exports=Qt(ct);var pt=Math.PI/180;function mt(t,e,u){const i=Z(u);if(i===0||i===180)return{w:t,h:e};if(i===90||i===270)return{w:e,h:t};const r=i*pt;return{w:Math.round(Math.abs(t*Math.cos(r))+Math.abs(e*Math.sin(r))),h:Math.round(Math.abs(t*Math.sin(r))+Math.abs(e*Math.cos(r)))}}function Z(t){return(t%360+360)%360}function T(t){const e=Math.round(t);return e-e%2}function Jt(t,e,u=40){const i=Math.min(Math.max(u,t.width),e.w),r=Math.min(Math.max(u,t.height),e.h),a=Math.min(Math.max(0,t.x),e.w-i),n=Math.min(Math.max(0,t.y),e.h-r);return{x:Math.round(a),y:Math.round(n),width:Math.round(i),height:Math.round(r)}}function J(t,e){let u=t.w,i=u/e;return i>t.h&&(i=t.h,u=i*e),{x:Math.round((t.w-u)/2),y:Math.round((t.h-i)/2),width:Math.round(u),height:Math.round(i)}}function te(t,e,u){const i={x:0,y:0,width:t.width,height:t.height},r={x:0,y:0,width:e.w,height:e.h};return u==="cover"?{src:J({w:t.width,h:t.height},e.w/e.h),dst:r}:u==="contain"?{src:i,dst:J({w:e.w,h:e.h},t.width/t.height)}:{src:i,dst:r}}function tt(t,e){if(e.scale)return{w:T(e.scale.width),h:T(e.scale.height)};if(e.crop)return{w:T(e.crop.width),h:T(e.crop.height)};const u=mt(t.w,t.h,e.rotation);return{w:T(u.w),h:T(u.h)}}var dt=[{id:"bw",label:"\u9ED1\u767D",vf:"hue=s=0",css:"grayscale(1)"},{id:"sepia",label:"\u590D\u53E4",vf:"colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131",css:"sepia(0.85)"},{id:"warm",label:"\u6696\u9633",vf:"colorbalance=rs=.15:gs=.04:bs=-.15",css:"sepia(0.25) saturate(1.25) brightness(1.03)"},{id:"cool",label:"\u51B7\u8C03",vf:"colorbalance=rs=-.14:bs=.16",css:"hue-rotate(12deg) saturate(0.95) brightness(1.02)"},{id:"vivid",label:"\u9C9C\u8273",vf:"eq=saturation=1.45:contrast=1.08",css:"saturate(1.45) contrast(1.08)"}];function H(t){return t?dt.find(e=>e.id===t):void 0}function ee(t,e){const u=H(e)?.css??"";return[`brightness(${1+t.brightness})`,`contrast(${1+t.contrast})`,`saturate(${1+t.saturation})`,u].filter(Boolean).join(" ")}var o=require("../zod/index.cjs"),j={color:o.z.string().max(32),width:o.z.number().positive().max(200)},w={rotation:o.z.number().min(-180).max(180).optional()},P={startAt:o.z.number().min(0).optional(),endAt:o.z.number().min(0).optional(),timelineTrack:o.z.number().int().min(0).max(99).optional()},ht=o.z.discriminatedUnion("type",[o.z.object({type:o.z.literal("pen"),points:o.z.array(o.z.number()).min(4),...j,...P,...w}),o.z.object({type:o.z.literal("line"),x1:o.z.number(),y1:o.z.number(),x2:o.z.number(),y2:o.z.number(),...j,...P,...w}),o.z.object({type:o.z.literal("arrow"),x1:o.z.number(),y1:o.z.number(),x2:o.z.number(),y2:o.z.number(),...j,...P,...w}),o.z.object({type:o.z.literal("rect"),x:o.z.number(),y:o.z.number(),w:o.z.number(),h:o.z.number(),...j,...P,...w}),o.z.object({type:o.z.literal("ellipse"),x:o.z.number(),y:o.z.number(),w:o.z.number(),h:o.z.number(),...j,...P,...w}),o.z.object({type:o.z.literal("text"),x:o.z.number(),y:o.z.number(),text:o.z.string().max(500),color:o.z.string().max(32),fontSize:o.z.number().positive().max(512),startAt:o.z.number().min(0).optional(),endAt:o.z.number().min(0).optional(),timelineTrack:o.z.number().int().min(0).max(99).optional(),...w}),o.z.object({type:o.z.literal("sticker"),x:o.z.number().optional(),y:o.z.number().optional(),w:o.z.number().positive().optional(),h:o.z.number().positive().optional(),emoji:o.z.string().max(16).optional(),src:o.z.string().optional(),startAt:o.z.number().min(0).optional(),endAt:o.z.number().min(0).optional(),timelineTrack:o.z.number().int().min(0).max(99).optional(),...w}),o.z.object({type:o.z.literal("filter"),x:o.z.number().optional(),y:o.z.number().optional(),w:o.z.number().positive().optional(),h:o.z.number().positive().optional(),filterPreset:o.z.string().max(32).optional(),...P,...w}),o.z.object({type:o.z.literal("adjust"),x:o.z.number(),y:o.z.number(),w:o.z.number().positive(),h:o.z.number().positive(),brightness:o.z.number().min(-1).max(1).default(0),contrast:o.z.number().min(-1).max(1).default(0),saturation:o.z.number().min(-1).max(1).default(0),temperature:o.z.number().min(-1).max(1).default(0),tint:o.z.number().min(-1).max(1).default(0),vibrance:o.z.number().min(-1).max(1).default(0),gamma:o.z.number().min(-1).max(1).default(0),highlights:o.z.number().min(-1).max(1).default(0),shadows:o.z.number().min(-1).max(1).default(0),whites:o.z.number().min(-1).max(1).default(0),blacks:o.z.number().min(-1).max(1).default(0),lightSense:o.z.number().min(-1).max(1).default(0),sharpen:o.z.number().min(0).max(1).default(0),clarity:o.z.number().min(0).max(1).default(0),grain:o.z.number().min(0).max(1).default(0),fade:o.z.number().min(0).max(1).default(0),vignette:o.z.number().min(0).max(1).default(0),...P,...w})]),ft=o.z.object({srcIdx:o.z.number().int().min(0).max(7),in:o.z.number().min(0),out:o.z.number().min(0)}),vt=o.z.object({srcIdx:o.z.number().int().min(0).max(2),track:o.z.number().int().min(0).default(0),startAt:o.z.number().min(0),in:o.z.number().min(0),out:o.z.number().min(0),speed:o.z.number().min(.5).max(2).default(1),volume:o.z.number().min(0).max(2),fadeIn:o.z.number().min(0).default(0),fadeOut:o.z.number().min(0).default(0)}),ue=o.z.object({type:o.z.enum(["none","fade","slide","wipe","flip","clockWipe","star","circle","rectangle"]).default("none"),duration:o.z.number().min(0).max(2).default(.4)}),ie=o.z.object({fileName:o.z.string().max(120).optional(),format:o.z.enum(["mp4","mov","mxf"]).default("mp4"),width:o.z.number().int().min(2).max(8192).optional(),height:o.z.number().int().min(2).max(8192).optional(),frameRate:o.z.number().int().min(12).max(120).default(30),videoBitrateKbps:o.z.number().int().min(100).max(5e4).optional(),audioBitrateKbps:o.z.number().int().min(32).max(1024).optional(),audioCodec:o.z.enum(["aac","mp3"]).default("aac")}).optional(),oe=o.z.object({clips:o.z.array(ft).min(1).max(50),audioClips:o.z.array(vt).max(8).default([]),canvas:o.z.object({w:o.z.number().int().min(2).max(4096),h:o.z.number().int().min(2).max(4096)}),crop:o.z.object({x:o.z.number().min(0),y:o.z.number().min(0),width:o.z.number().positive(),height:o.z.number().positive()}).optional(),scale:o.z.object({width:o.z.number().positive(),height:o.z.number().positive(),fit:o.z.enum(["contain","cover","force"])}).optional(),rotation:o.z.number().min(-180).max(180).default(0),flipX:o.z.boolean().default(!1),flipY:o.z.boolean().default(!1),filters:o.z.object({brightness:o.z.number().min(-1).max(1).default(0),contrast:o.z.number().min(-1).max(1).default(0),saturation:o.z.number().min(-1).max(1).default(0),temperature:o.z.number().min(-1).max(1).default(0),tint:o.z.number().min(-1).max(1).default(0),vibrance:o.z.number().min(-1).max(1).default(0),gamma:o.z.number().min(-1).max(1).default(0),highlights:o.z.number().min(-1).max(1).default(0),shadows:o.z.number().min(-1).max(1).default(0),whites:o.z.number().min(-1).max(1).default(0),blacks:o.z.number().min(-1).max(1).default(0),lightSense:o.z.number().min(-1).max(1).default(0),sharpen:o.z.number().min(0).max(1).default(0),clarity:o.z.number().min(0).max(1).default(0),grain:o.z.number().min(0).max(1).default(0),fade:o.z.number().min(0).max(1).default(0),vignette:o.z.number().min(0).max(1).default(0)}).default({brightness:0,contrast:0,saturation:0,temperature:0,tint:0,vibrance:0,gamma:0,highlights:0,shadows:0,whites:0,blacks:0,lightSense:0,sharpen:0,clarity:0,grain:0,fade:0,vignette:0}),filterPreset:o.z.string().max(32).optional(),overlays:o.z.array(ht).max(200).optional(),transitions:o.z.array(ue).max(49).default([]),keepAudio:o.z.boolean().default(!0),poster:o.z.object({time:o.z.number().min(0),useAsVideoCover:o.z.boolean().optional(),preview:o.z.string().optional()}).optional(),exportSettings:ie}).superRefine((t,e)=>{t.clips.forEach((u,i)=>{u.out<=u.in&&e.addIssue({code:o.z.ZodIssueCode.custom,message:`clips[${i}].out \u5FC5\u987B\u5927\u4E8E in`,path:["clips",i,"out"]})}),t.audioClips?.forEach((u,i)=>{u.out<=u.in&&e.addIssue({code:o.z.ZodIssueCode.custom,message:`audioClips[${i}].out \u5FC5\u987B\u5927\u4E8E in`,path:["audioClips",i,"out"]})}),(t.canvas.w%2!==0||t.canvas.h%2!==0)&&e.addIssue({code:o.z.ZodIssueCode.custom,message:"canvas \u5BBD\u9AD8\u5FC5\u987B\u4E3A\u5076\u6570",path:["canvas"]}),t.exportSettings?.width!=null&&t.exportSettings.width%2!==0&&e.addIssue({code:o.z.ZodIssueCode.custom,message:"exportSettings.width \u5FC5\u987B\u4E3A\u5076\u6570",path:["exportSettings","width"]}),t.exportSettings?.height!=null&&t.exportSettings.height%2!==0&&e.addIssue({code:o.z.ZodIssueCode.custom,message:"exportSettings.height \u5FC5\u987B\u4E3A\u5076\u6570",path:["exportSettings","height"]})});function re(){return{clips:[],audioClips:[],canvas:{w:2,h:2},rotation:0,flipX:!1,flipY:!1,filters:{brightness:0,contrast:0,saturation:0,temperature:0,tint:0,vibrance:0,gamma:0,highlights:0,shadows:0,whites:0,blacks:0,lightSense:0,sharpen:0,clarity:0,grain:0,fade:0,vignette:0},transitions:[],keepAudio:!0}}var S=.1;function G(t){return t.out-t.in}function bt(t){return t.reduce((e,u)=>e+G(u),0)}function ae(t,e){let u=0;for(let i=0;i<e&&i<t.length;i++)u+=G(t[i]);return u}function Ft(t,e){if(!t.length||e<0)return null;let u=0;for(let i=0;i<t.length;i++){const r=G(t[i]);if(e<u+r)return{idx:i,srcTime:t[i].in+(e-u)};u+=r}if(Math.abs(e-u)<1e-9||e<=u){const i=t.length-1;return{idx:i,srcTime:t[i].out}}return null}function ne(t,e){const u=Ft(t,e);if(!u)return t;const i=t[u.idx];return u.srcTime<i.in+S||u.srcTime>i.out-S?t:[...t.slice(0,u.idx),{...i,out:u.srcTime},{...i,in:u.srcTime},...t.slice(u.idx+1)]}function se(t,e){return t.length<=1||!t[e]?t:t.filter((u,i)=>i!==e)}function le(t,e){const u=t[e];return u?[...t.slice(0,e+1),{...u},...t.slice(e+1)]:t}function ce(t,e,u){if(e===u||!t[e]||u<0||u>=t.length)return t;const i=[...t],[r]=i.splice(e,1);return i.splice(u,0,r),i}function pe(t,e,u,i,r){if(!t[e])return t;const a=t.map(n=>({...n}));return u==="in"?a[e].in=Math.min(Math.max(i,0),a[e].out-S):a[e].out=Math.max(Math.min(i,r),a[e].in+S),a}function me(t,e,u){const i=Math.max(Math.min(t.out,e),S),r=Math.min(Math.max(t.in,0),i-S),a=Math.min(Math.max(t.startAt,0),Math.max(0,u-S)),n=Math.max(S,i-r),s=Math.min(Math.max(Number(t.speed)||1,.5),2),l=Number.isInteger(t.track)&&t.track>=0?t.track:0,c=Math.min(Math.max(Number(t.fadeIn)||0,0),n),m=Math.min(Math.max(Number(t.fadeOut)||0,0),Math.max(0,n-c));return{...t,track:l,in:r,out:i,startAt:a,speed:s,fadeIn:c,fadeOut:m}}function de(t=[]){return(t??[]).reduce((e,u)=>{if(u?.type!=="text"&&u?.type!=="sticker")return e;const i=Number.isFinite(u?.startAt)?Math.max(0,Number(u.startAt)):0,r=Number.isFinite(u?.endAt)?Math.max(i,Number(u.endAt)):i;return Math.max(e,r)},0)}function he(t,e=[],u=[]){const i=bt(t),r=e.reduce((n,s)=>Math.max(n,s.startAt+(s.out-s.in)),0),a=de(u);return Math.max(i,r,a)}function fe(t){return[...new Set(t.map(e=>e.srcIdx))].sort((e,u)=>e-u)}function ve(t,e){const u=new Map(e.map((i,r)=>[i,r]));return t.map(i=>({...i,srcIdx:u.get(i.srcIdx)??0}))}var be=100;function Fe(t){return{past:[],present:t,future:[]}}function xe(t,e){if(e===t.present)return t;const u=[...t.past,t.present];return u.length>be&&u.shift(),{past:u,present:e,future:[]}}function ge(t,e){return e===t.present?t:{...t,present:e}}function xt(t){return t.past.length>0}function gt(t){return t.future.length>0}function Ee(t){return xt(t)?{past:t.past.slice(0,-1),present:t.past[t.past.length-1],future:[t.present,...t.future]}:t}function Ae(t){if(!gt(t))return t;const[e,...u]=t.future;return{past:[...t.past,t.present],present:e,future:u}}var Et={"tool.trim":"\u526A\u8F91","tool.crop":"\u88C1\u526A","tool.tune":"\u8C03\u8272","tool.filter":"\u6EE4\u955C","tool.annotate":"\u6807\u6CE8","tool.sticker":"\u8D34\u7EB8","tool.resize":"\u6BD4\u4F8B","tune.brightness":"\u4EAE\u5EA6","tune.contrast":"\u5BF9\u6BD4","tune.saturation":"\u9971\u548C","tune.gamma":"Gamma","overlay.select":"\u9009\u62E9","overlay.pen":"\u753B\u7B14","overlay.eraser":"\u6A61\u76AE","overlay.line":"\u76F4\u7EBF","overlay.arrow":"\u7BAD\u5934","overlay.rect":"\u77E9\u5F62","overlay.ellipse":"\u692D\u5706","overlay.text":"\u6587\u5B57","overlay.color":"\u7EBF\u8272","overlay.width":"\u7EBF\u5BBD","overlay.copySelected":"\u590D\u5236","overlay.delSelected":"\u5220\u9664\u9009\u4E2D","overlay.editSelected":"\u7F16\u8F91","overlay.pickImage":"\u9009\u62E9\u56FE\u7247","overlay.hint":"\u70B9 emoji/\u56FE\u7247\u6DFB\u52A0 \u2192 \u753B\u5E03\u4E0A\u62D6\u52A8\u6446\u4F4D,\u62D6\u53F3\u4E0B\u89D2\u7D2B\u8272\u628A\u624B\u7F29\u653E","overlay.textPlaceholder":"\u8F93\u5165\u6587\u5B57,\u56DE\u8F66\u786E\u8BA4","filter.none":"\u539F\u56FE","filter.bw":"\u9ED1\u767D","filter.sepia":"\u590D\u53E4","filter.warm":"\u6696\u9633","filter.cool":"\u51B7\u8C03","filter.vivid":"\u9C9C\u8273","ratio.orig":"\u539F\u59CB","ratio.free":"\u81EA\u7531\u6BD4\u4F8B","ratio.9:16":"\u7AD6\u5C4F 9:16","ratio.16:9":"\u6A2A\u5C4F 16:9","ratio.1:1":"\u65B9\u5F62 1:1","ratio.4:5":"\u7AD6\u56FE 4:5","act.fit":"\u9002\u5E94","act.zoomFit":"\u7F29\u653E\u81F3\u9002\u5F53\u5927\u5C0F","act.zoomTo":"\u7F29\u653E\u81F3 {value}%","act.split":"\u5206\u5272","act.copy":"\u590D\u5236","act.delete":"\u5220\u9664","act.restore":"\u8FD8\u539F","act.deleteMusic":"\u5220\u9664\u97F3\u4E50","act.cancel":"\u53D6\u6D88","act.exportPoster":"\u5BFC\u51FA\u5C01\u9762","act.exporting":"\u5BFC\u51FA\u4E2D\u2026","act.poster":"\u{1F5BC} \u5C01\u9762","act.again":"\u518D\u6B21\u4E0B\u8F7D","act.saveDrive":"\u5B58\u7F51\u76D8","act.changeImage":"\u2190 \u6362\u4E00\u5F20","act.changeVideo":"\u2190 \u6362\u4E00\u4E2A","crop.rotateLeft":"\u21BA \u5411\u5DE6\u65CB\u8F6C","crop.flipX":"\u21CB \u6C34\u5E73\u7FFB\u8F6C","crop.flipY":"\u21F5 \u5782\u76F4\u7FFB\u8F6C","crop.rotateLeftShort":"\u5DE6\u8F6C","crop.flipXShort":"\u6A2A\u7FFB","crop.flipYShort":"\u7AD6\u7FFB","tip.close":"\u5173\u95ED(\u6362\u6587\u4EF6)","tip.undo":"\u64A4\u9500","tip.redo":"\u91CD\u505A","tip.resetOpened":"\u91CD\u7F6E\u5230\u6253\u5F00\u6587\u4EF6\u65F6","tip.previewZoom":"\u9884\u89C8\u7F29\u653E\u6BD4\u4F8B","tip.previewZoomOut":"\u7F29\u5C0F\u9884\u89C8","tip.previewZoomIn":"\u653E\u5927\u9884\u89C8","tip.previewZoomFit":"\u9002\u5E94\u9884\u89C8","tip.previewPointer":"\u6307\u9488\u5DE5\u5177","tip.previewPan":"\u624B\u5DE5\u5177\uFF1A\u62D6\u52A8\u753B\u9762","tip.poster":"\u9884\u89C8\u5E76\u9009\u62E9\u5C01\u9762\u5E27","tip.keepAudio":"\u539F\u89C6\u9891\u58F0\u97F3\u5F00\u5173(\u4E0E\u97F3\u4E50\u6DF7\u97F3;\u9884\u89C8\u540C\u6B65)","tip.split":"\u5728\u64AD\u653E\u5934\u5904\u628A\u5F53\u524D\u7247\u6BB5\u4E00\u5206\u4E3A\u4E8C","tip.zoomOut":"\u7F29\u5C0F\u65F6\u95F4\u8F74(Ctrl+\u6EDA\u8F6E)","tip.zoomIn":"\u653E\u5927\u65F6\u95F4\u8F74(Ctrl+\u6EDA\u8F6E)","tip.fit":"\u7F29\u653E\u5230\u9002\u5E94\u5BBD\u5EA6","tip.addVideo":"\u6DFB\u52A0\u89C6\u9891\u7247\u6BB5","tip.addAudio":"\u6DFB\u52A0\u97F3\u4E50(\u97F3\u9891\u6587\u4EF6,\u6216\u9009\u542B\u58F0\u97F3\u7684\u89C6\u9891\u81EA\u52A8\u63D0\u53D6\u97F3\u8F68;\u4E0E\u539F\u58F0\u6DF7\u97F3)","tip.dupClip":"\u590D\u5236\u8BE5\u7247\u6BB5(\u63D2\u5230\u5176\u540E)","tip.delClip":"\u5220\u9664\u8BE5\u7247\u6BB5","tip.lockAspect":"\u9501\u5B9A\u7EB5\u6A2A\u6BD4","tip.dblConfirm":"\u53CC\u51FB\u786E\u8BA4\u88C1\u526A","err.notVideo":"\u8BF7\u9009\u62E9\u89C6\u9891\u6587\u4EF6","err.maxVideo":"\u6700\u591A {max} \u4E2A\u89C6\u9891\u7D20\u6750","err.videoLoad":"\u89C6\u9891\u52A0\u8F7D\u5931\u8D25,\u8BF7\u6362\u4E00\u4E2A\u6587\u4EF6","err.notAudio":"\u8BF7\u9009\u62E9\u97F3\u9891\u6587\u4EF6(mp3/wav/m4a),\u6216\u542B\u58F0\u97F3\u7684\u89C6\u9891(\u81EA\u52A8\u63D0\u53D6\u97F3\u8F68)","err.maxAudio":"\u6700\u591A {max} \u4E2A\u97F3\u9891\u7D20\u6750","err.audioLoad":"\u97F3\u9891\u52A0\u8F7D\u5931\u8D25,\u8BF7\u6362\u4E00\u4E2A\u6587\u4EF6","err.processFailed":"\u5904\u7406\u5931\u8D25","err.posterFailed":"\u5C01\u9762\u6E32\u67D3\u5931\u8D25","err.canvas":"canvas \u4E0D\u53EF\u7528","err.imageRead":"\u56FE\u7247\u8BFB\u53D6\u5931\u8D25,\u8BF7\u6362\u4E00\u5F20","err.notImage":"\u8BF7\u9009\u62E9\u56FE\u7247\u6587\u4EF6","err.fileType":"\u53EA\u652F\u6301\u56FE\u7247\u6216\u89C6\u9891\u6587\u4EF6","err.saveDrive":"\u5B58\u7F51\u76D8\u5931\u8D25","msg.processing":"\u6B63\u5728\u5BFC\u51FA\u4E2D\u2026","msg.exportingHint":"\u8BF7\u7A0D\u5019\uFF0C\u5BFC\u51FA\u5B8C\u6210\u540E\u4F1A\u81EA\u52A8\u8FD4\u56DE\u7ED3\u679C\u3002","msg.done":"\u5B8C\u6210 \u2713","msg.loading":"\u7D20\u6750\u52A0\u8F7D\u4E2D\u2026","msg.exported":"\u5DF2\u5BFC\u51FA\uFF1A","msg.saving":"\u5B58\u7F51\u76D8\u4E2D\u2026","msg.saved":"\u5DF2\u5B58\u5230\u7F51\u76D8 \u2713","lbl.ratioSection":"\u753B\u9762\u6BD4\u4F8B(\u88C1\u526A,\u4E0D\u53D8\u5F62)","lbl.dragToReposition":"\u2194 \u62D6\u52A8\u9884\u89C8\u53EF\u8C03\u6574\u88C1\u526A\u4F4D\u7F6E","lbl.sizeSection":"\u5BFC\u51FA\u5C3A\u5BF8(\u50CF\u7D20;\u6BD4\u4F8B\u4E0D\u7B26\u65F6 cover \u5C45\u4E2D\u88C1\u526A)","lbl.currentOut":"\u5F53\u524D\u8F93\u51FA","lbl.zoomSize":"\u5927\u5C0F","lbl.noScale":"(\u672A\u7F29\u653E)","lbl.coverNote":"\xB7 \u6BD4\u4F8B\u4E0D\u4E00\u81F4\u65F6\u5C45\u4E2D\u88C1\u526A(cover),\u4E0D\u53D8\u5F62","lbl.audioTrackHint":"\u266A \u97F3\u9891\u8F68(\u53F3\u4FA7 \uFF0B \u6DFB\u52A0\u97F3\u4E50,\u4E0E\u539F\u58F0\u6DF7\u97F3)","lbl.volume":"\u97F3\u91CF","lbl.volNote":"(\u9884\u89C8\u6700\u5927 100%,\u5BFC\u51FA\u6309\u8BBE\u5B9A\u503C)","lbl.music":"\u97F3\u4E50","kbd.fit":"\u21E7 F","poster.title":"\u9009\u62E9\u5C01\u9762\u5E27","panel.title":"\u5A92\u4F53\u7F16\u8F91\u5668","panel.subtitle":"\u4E0A\u4F20\u56FE\u7247 / \u89C6\u9891\uFF0C\u88C1\u526A \xB7 \u6EE4\u955C \xB7 \u6587\u5B57 \xB7 \u5BFC\u51FA","panel.pick":"\u70B9\u51FB\u9009\u62E9\u56FE\u7247\u6216\u89C6\u9891","panel.pickHint":"\u56FE\u7247\u7528 Filerobot \xB7 \u89C6\u9891\u53EF\u88C1\u526A/\u9759\u97F3/\u5C01\u9762"},ze={"tool.trim":"Trim","tool.crop":"Crop","tool.tune":"Tune","tool.filter":"Filters","tool.annotate":"Annotate","tool.sticker":"Stickers","tool.resize":"Ratio","tune.brightness":"Brightness","tune.contrast":"Contrast","tune.saturation":"Saturation","tune.gamma":"Gamma","overlay.select":"Select","overlay.pen":"Pen","overlay.eraser":"Eraser","overlay.line":"Line","overlay.arrow":"Arrow","overlay.rect":"Rect","overlay.ellipse":"Ellipse","overlay.text":"Text","overlay.color":"Color","overlay.width":"Width","overlay.copySelected":"Copy","overlay.delSelected":"Delete selected","overlay.editSelected":"Edit","overlay.pickImage":"Pick image","overlay.hint":"Tap emoji/image to add \u2192 drag to place, drag the purple corner handle to scale","overlay.textPlaceholder":"Type text, Enter to confirm","filter.none":"Original","filter.bw":"B&W","filter.sepia":"Sepia","filter.warm":"Warm","filter.cool":"Cool","filter.vivid":"Vivid","ratio.orig":"Original","ratio.free":"Free ratio","ratio.9:16":"Portrait 9:16","ratio.16:9":"Landscape 16:9","ratio.1:1":"Square 1:1","ratio.4:5":"Vertical 4:5","act.fit":"Fit","act.zoomFit":"Zoom to fit","act.zoomTo":"Zoom to {value}%","act.split":"Split","act.copy":"Copy","act.delete":"Delete","act.restore":"Reset","act.deleteMusic":"Remove music","act.cancel":"Cancel","act.exportPoster":"Export cover","act.exporting":"Exporting\u2026","act.poster":"\u{1F5BC} Cover","act.again":"Download again","act.saveDrive":"Save to drive","act.changeImage":"\u2190 Change image","act.changeVideo":"\u2190 Change file","crop.rotateLeft":"\u21BA Rotate left","crop.flipX":"\u21CB Flip horizontal","crop.flipY":"\u21F5 Flip vertical","crop.rotateLeftShort":"Rot","crop.flipXShort":"Flip","crop.flipYShort":"Flip","tip.close":"Close (change file)","tip.undo":"Undo","tip.redo":"Redo","tip.resetOpened":"Reset to opened file","tip.previewZoom":"Preview zoom","tip.previewZoomOut":"Zoom out preview","tip.previewZoomIn":"Zoom in preview","tip.previewZoomFit":"Fit preview","tip.previewPointer":"Pointer tool","tip.previewPan":"Hand tool: pan canvas","tip.poster":"Preview and pick a cover frame","tip.keepAudio":"Original audio on/off (mixed with music; preview follows)","tip.split":"Split the current clip at the playhead","tip.zoomOut":"Zoom out timeline (Ctrl+wheel)","tip.zoomIn":"Zoom in timeline (Ctrl+wheel)","tip.fit":"Fit to width","tip.addVideo":"Add video clip","tip.addAudio":"Add music (audio file, or a video with sound to extract its track; mixed with original)","tip.dupClip":"Duplicate clip (insert after)","tip.delClip":"Delete clip","tip.lockAspect":"Lock aspect ratio","tip.dblConfirm":"Double-click to confirm crop","err.notVideo":"Please choose a video file","err.maxVideo":"Up to {max} video sources","err.videoLoad":"Failed to load video, try another file","err.notAudio":"Choose an audio file (mp3/wav/m4a), or a video with sound (audio auto-extracted)","err.maxAudio":"Up to {max} audio sources","err.audioLoad":"Failed to load audio, try another file","err.processFailed":"Processing failed","err.posterFailed":"Failed to render cover","err.canvas":"Canvas unavailable","err.imageRead":"Failed to read image, try another","err.notImage":"Please choose an image file","err.fileType":"Only image or video files are supported","err.saveDrive":"Failed to save to drive","msg.processing":"Exporting\u2026","msg.exportingHint":"Please wait. The result will be returned automatically when export finishes.","msg.done":"Done \u2713","msg.loading":"Loading media\u2026","msg.exported":"Exported: ","msg.saving":"Saving\u2026","msg.saved":"Saved to drive \u2713","lbl.ratioSection":"Frame ratio (crop, no distortion)","lbl.dragToReposition":"\u2194 Drag the preview to reposition the crop","lbl.sizeSection":"Export size (px; cover center-crop when ratios differ)","lbl.currentOut":"Output","lbl.zoomSize":"Size","lbl.noScale":"(no scaling)","lbl.coverNote":"\xB7 center-cropped (cover) when ratios differ, no distortion","lbl.audioTrackHint":"\u266A Audio track (\uFF0B on the right to add music, mixed with original)","lbl.volume":"Volume","lbl.volNote":"(preview caps at 100%, export uses the set value)","lbl.music":"Music","kbd.fit":"\u21E7 F","poster.title":"Pick a cover frame","panel.title":"Media Editor","panel.subtitle":"Upload an image / video \u2014 crop \xB7 filters \xB7 text \xB7 export","panel.pick":"Click to choose an image or video","panel.pickHint":"Images via Filerobot \xB7 videos: trim/mute/cover"},Be={"tool.trim":"Editar","tool.crop":"Recortar","tool.tune":"Ajustar color","tool.filter":"Filtros","tool.annotate":"Anotar","tool.sticker":"Stickers","tool.resize":"Proporci\xF3n","tune.brightness":"Brillo","tune.contrast":"Contraste","tune.saturation":"Saturaci\xF3n","tune.gamma":"Gamma","overlay.select":"Seleccionar","overlay.pen":"Pincel","overlay.eraser":"Borrador","overlay.line":"L\xEDnea","overlay.arrow":"Flecha","overlay.rect":"Rect\xE1ngulo","overlay.ellipse":"Elipse","overlay.text":"Texto","overlay.color":"Color","overlay.width":"Grosor","overlay.copySelected":"Copiar","overlay.delSelected":"Eliminar seleccionado","overlay.editSelected":"Editar","overlay.pickImage":"Elegir imagen","overlay.hint":"Toca un emoji/imagen para a\xF1adirlo \u2192 arrastra para colocarlo, arrastra el tirador morado para escalar","overlay.textPlaceholder":"Escribe texto, Enter para confirmar","filter.none":"Original","filter.bw":"Blanco y negro","filter.sepia":"Sepia","filter.warm":"C\xE1lido","filter.cool":"Fr\xEDo","filter.vivid":"Intenso","ratio.orig":"Original","ratio.free":"Libre","ratio.9:16":"Vertical 9:16","ratio.16:9":"Horizontal 16:9","ratio.1:1":"Cuadrado 1:1","ratio.4:5":"Vertical 4:5","act.fit":"Ajustar","act.zoomFit":"Ajustar a pantalla","act.zoomTo":"Zoom al {value}%","act.split":"Dividir","act.copy":"Copiar","act.delete":"Eliminar","act.restore":"Restablecer","act.deleteMusic":"Quitar m\xFAsica","act.cancel":"Cancelar","act.exportPoster":"Exportar portada","act.exporting":"Exportando\u2026","act.poster":"\u{1F5BC} Portada","act.again":"Descargar de nuevo","act.saveDrive":"Guardar en disco","act.changeImage":"\u2190 Cambiar imagen","act.changeVideo":"\u2190 Cambiar archivo","crop.rotateLeft":"\u21BA Girar a la izquierda","crop.flipX":"\u21CB Voltear horizontal","crop.flipY":"\u21F5 Voltear vertical","crop.rotateLeftShort":"Giro","crop.flipXShort":"Flip","crop.flipYShort":"Flip","tip.close":"Cerrar (cambiar archivo)","tip.undo":"Deshacer","tip.redo":"Rehacer","tip.resetOpened":"Restablecer al archivo abierto","tip.previewZoom":"Zoom de vista previa","tip.previewZoomOut":"Reducir vista previa","tip.previewZoomIn":"Ampliar vista previa","tip.previewZoomFit":"Ajustar vista previa","tip.previewPointer":"Herramienta de puntero","tip.previewPan":"Mano: desplazar lienzo","tip.poster":"Previsualizar y elegir portada","tip.keepAudio":"Activar/desactivar audio original (mezclado con m\xFAsica; la vista previa lo refleja)","tip.split":"Dividir el clip actual en el cursor","tip.zoomOut":"Reducir l\xEDnea de tiempo (Ctrl+rueda)","tip.zoomIn":"Ampliar l\xEDnea de tiempo (Ctrl+rueda)","tip.fit":"Ajustar al ancho","tip.addVideo":"A\xF1adir clip de v\xEDdeo","tip.addAudio":"A\xF1adir m\xFAsica (archivo de audio o v\xEDdeo con sonido para extraer la pista; se mezcla con el original)","tip.dupClip":"Duplicar clip (insertar despu\xE9s)","tip.delClip":"Eliminar clip","tip.lockAspect":"Bloquear proporci\xF3n","tip.dblConfirm":"Doble clic para confirmar recorte","err.notVideo":"Elige un archivo de v\xEDdeo","err.maxVideo":"M\xE1ximo {max} v\xEDdeos","err.videoLoad":"No se pudo cargar el v\xEDdeo, prueba con otro archivo","err.notAudio":"Elige un audio (mp3/wav/m4a) o un v\xEDdeo con sonido (se extrae autom\xE1ticamente)","err.maxAudio":"M\xE1ximo {max} audios","err.audioLoad":"No se pudo cargar el audio, prueba con otro archivo","err.processFailed":"Error de procesamiento","err.posterFailed":"No se pudo renderizar la portada","err.canvas":"Canvas no disponible","err.imageRead":"No se pudo leer la imagen, prueba con otra","err.notImage":"Elige un archivo de imagen","err.fileType":"Solo se admiten archivos de imagen o v\xEDdeo","err.saveDrive":"No se pudo guardar en disco","msg.processing":"Exportando\u2026","msg.exportingHint":"Espera un momento. El resultado se devolver\xE1 autom\xE1ticamente al finalizar.","msg.done":"Listo \u2713","msg.loading":"Cargando medios\u2026","msg.exported":"Exportado: ","msg.saving":"Guardando\u2026","msg.saved":"Guardado en disco \u2713","lbl.ratioSection":"Proporci\xF3n de imagen (recorte, sin deformar)","lbl.dragToReposition":"\u2194 Arrastra la vista previa para reposicionar el recorte","lbl.sizeSection":"Tama\xF1o de exportaci\xF3n (px; recorte cover centrado si la proporci\xF3n difiere)","lbl.currentOut":"Salida","lbl.zoomSize":"Tama\xF1o","lbl.noScale":"(sin escala)","lbl.coverNote":"\xB7 recorte centrado (cover) cuando la proporci\xF3n difiere, sin deformar","lbl.audioTrackHint":"\u266A Pista de audio (\uFF0B a la derecha para a\xF1adir m\xFAsica, mezclada con el original)","lbl.volume":"Volumen","lbl.volNote":"(la vista previa limita a 100%, la exportaci\xF3n usa el valor definido)","lbl.music":"M\xFAsica","kbd.fit":"\u21E7 F","poster.title":"Elegir portada","panel.title":"Editor multimedia","panel.subtitle":"Sube una imagen / v\xEDdeo \u2014 recorta \xB7 filtros \xB7 texto \xB7 exporta","panel.pick":"Haz clic para elegir una imagen o v\xEDdeo","panel.pickHint":"Im\xE1genes con Filerobot \xB7 v\xEDdeos: cortar/silenciar/portada"},ye={\u7B80:"\u7C21",\u4F53:"\u9AD4",\u56FE:"\u5716",\u9891:"\u983B",\u89C6:"\u8996",\u8F91:"\u8F2F",\u8C03:"\u8ABF",\u6EE4:"\u6FFE",\u6807:"\u6A19",\u6CE8:"\u8A3B",\u8D34:"\u8CBC",\u9009:"\u9078",\u62E9:"\u64C7",\u7EBF:"\u7DDA",\u7BAD:"\u7BAD",\u5934:"\u982D",\u590D:"\u8907",\u5220:"\u522A",\u9664:"\u9664",\u7F16:"\u7DE8",\u8FB9:"\u908A",\u8F93:"\u8F38",\u5165:"\u5165",\u786E:"\u78BA",\u8BA4:"\u8A8D",\u9971:"\u98FD",\u5BF9:"\u5C0D",\u6696:"\u6696",\u9633:"\u967D",\u51B7:"\u51B7",\u7EB5:"\u7E31",\u6A2A:"\u6A6B",\u9002:"\u9069",\u5E94:"\u61C9",\u7F29:"\u7E2E",\u5B9E:"\u5BE6",\u9645:"\u969B",\u5BFC:"\u5C0E",\u51FA:"\u51FA",\u5C01:"\u5C01",\u9762:"\u9762",\u6362:"\u63DB",\u5F20:"\u5F35",\u9884:"\u9810",\u89C8:"\u89BD",\u52A8:"\u52D5",\u58F0:"\u8072",\u5F00:"\u958B",\u5173:"\u95DC",\u4E0E:"\u8207",\u4E50:"\u6A02",\u6DF7:"\u6DF7",\u5904:"\u8655",\u8F7D:"\u8F09",\u9519:"\u932F",\u8BEF:"\u8AA4",\u8BFB:"\u8B80",\u4EC5:"\u50C5",\u7EC8:"\u7D42",\u7A0D:"\u7A0D",\u5019:"\u5019",\u8FD4\u56DE:"\u8FD4\u56DE",\u5F53\u524D:"\u76EE\u524D",\u8F93\u51FA:"\u8F38\u51FA",\u753B:"\u756B",\u53D8:"\u8B8A",\u97F3\u9891:"\u97F3\u8A0A",\u97F3\u8F68:"\u97F3\u8ECC",\u6DFB\u52A0:"\u65B0\u589E",\u5220\u9664:"\u522A\u9664",\u4FDD\u5B58:"\u5132\u5B58",\u52A0\u8F7D:"\u8F09\u5165",\u7F51\u76D8:"\u7DB2\u76E4"},At=t=>{let e=t;for(const[u,i]of Object.entries(ye).sort((r,a)=>a[0].length-r[0].length))e=e.replaceAll(u,i);return e},$e=Object.fromEntries(Object.entries(Et).map(([t,e])=>[t,At(e)])),et={zh:Et,en:ze,es:Be,"zh-Hant":$e};function De(t,e,u){let i=et[t]?.[e]??et.zh[e]??e;if(u)for(const[r,a]of Object.entries(u))i=i.replaceAll(`{${r}}`,String(a));return i}var Y=[{platform:"tiktok",postType:"video",label:"TikTok Video",shortLabel:"TT\xB7Video",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"instagram",postType:"post",label:"Instagram Post",shortLabel:"IG\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"instagram",postType:"reels",label:"Instagram Reels",shortLabel:"IG\xB7Reels",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"instagram",postType:"story",label:"Instagram Story",shortLabel:"IG\xB7Story",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"facebook",postType:"post",label:"Facebook Post",shortLabel:"FB\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"facebook",postType:"reels",label:"Facebook Reels",shortLabel:"FB\xB7Reels",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"youtube",postType:"video",label:"YouTube Video",shortLabel:"YT\xB7Video",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"1080p"},{platform:"youtube",postType:"shorts",label:"YouTube Shorts",shortLabel:"YT\xB7Shorts",ratio:"9:16",imageSize:"1440x2560",videoRatio:"9:16",videoResolution:"720p"},{platform:"pinterest",postType:"pin",label:"Pinterest Pin",shortLabel:"PIN",ratio:"2:3",imageSize:"1664x2496",videoRatio:"9:16",videoResolution:"720p"},{platform:"x",postType:"post",label:"X Post",shortLabel:"X\xB7Post",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"720p"},{platform:"linkedin",postType:"post",label:"LinkedIn Post",shortLabel:"LI\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"linkedin",postType:"video",label:"LinkedIn Video",shortLabel:"LI\xB7Video",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"1080p"},{platform:"threads",postType:"post",label:"Threads Post",shortLabel:"TH\xB7Post",ratio:"1:1",imageSize:"2048x2048"},{platform:"telegram",postType:"post",label:"Telegram Post",shortLabel:"TG\xB7Post",ratio:"1:1",imageSize:"2048x2048",videoRatio:"9:16",videoResolution:"720p"},{platform:"reddit",postType:"post",label:"Reddit Post",shortLabel:"RD\xB7Post",ratio:"16:9",imageSize:"2560x1440",videoRatio:"16:9",videoResolution:"720p"}],Ce={"1:1":"\u65B9\u5F62 1:1","4:5":"\u7AD6\u56FE 4:5","3:4":"\u7AD6\u56FE 3:4","9:16":"\u7AD6\u5C4F 9:16","16:9":"\u6A2A\u5C4F 16:9","2:3":"\u7AD6\u56FE 2:3","1.91:1":"\u6A2A\u5E45 1.91:1"};function L(t){const[e,u]=t.split(":").map(Number);return!e||!u?1:e/u}function zt(t){const e=new Set,u=[];for(const i of t)!i||e.has(i)||(e.add(i),u.push({ratio:i,value:L(i),label:Ce[i]??i}));return u}var we=zt(["1:1","4:5","3:4","2:3","9:16","16:9","1.91:1"]),Se=zt(["9:16","16:9","1:1","4:5"]);function Bt(t=Y){const e=new Set,u=[];for(const i of t){if(!i.videoRatio)continue;const r=`${i.platform}:${i.postType}:${i.videoRatio}`;if(e.has(r))continue;e.add(r);const a=i.label.split(" ").slice(0,-1).join(" ")||i.label;u.push({platform:i.platform,postType:i.postType,label:`${a} ${i.videoRatio}`,ratio:i.videoRatio,value:L(i.videoRatio)})}return u}var Me=Bt();function yt(t=Y){const e=new Map;for(const u of t){const i=e.get(u.platform);(!i||i.postType!=="post"&&u.postType==="post")&&e.set(u.platform,u)}return Array.from(e.values()).map(u=>{const[i,r]=u.imageSize.split("x").map(Number),a=u.label.split(" ").slice(0,-1).join(" ")||u.label;return{platform:u.platform,label:`${a} ${u.ratio}`,ratio:u.ratio,value:L(u.ratio),w:i,h:r}})}var Te=yt();function Pe(t,e){return t>=1?{w:Math.round(e*t/2)*2,h:e}:{w:e,h:Math.round(e/t/2)*2}}function $t(t=Y){const e=new Set,u=[];for(const i of t){if(!i.videoRatio||!i.videoResolution)continue;const r=i.videoResolution==="1080p"?1080:720,{w:a,h:n}=Pe(L(i.videoRatio),r),s=`${a}x${n}`;e.has(s)||(e.add(s),u.push({label:`${i.shortLabel} ${a}\xD7${n}`,w:a,h:n}))}return u}var Re=$t();function ke(t,e){if(t.isDuplicated)return{};if((t.rotation??0)!==0)return{};const u=e.adjustments?.rotation??0;return u?{rotation:-u}:{}}function Ie(t){const e=Z(t);if(e===0)return[];if(e===90)return["transpose=1"];if(e===180)return["transpose=1","transpose=1"];if(e===270)return["transpose=2"];const u=`${e}*PI/180`;return[`rotate=${u}:ow=rotw(${u}):oh=roth(${u}):c=black`]}function F(t){return Math.max(-1,Math.min(1,Number(t)||0))}function N(t){return Math.max(0,Math.min(1,Number(t)||0))}function Dt(t,e,u,i){const r=Math.round(Number(t));return Number.isFinite(r)?Math.min(u,Math.max(e,r)):i}function Ct(t){return Math.min(Math.max(Number(t)||1,.5),2)}function je(t){const e=[];let u=Ct(t);for(;u<.5-1e-6||u>2+1e-6;)u<.5?(e.push("atempo=0.5"),u/=.5):(e.push("atempo=2"),u/=2);return Math.abs(u-1)>1e-4&&e.push(`atempo=${u.toFixed(4).replace(/0+$/,"").replace(/\.$/,"")}`),e}function R(t,e){const u=Dt(t,2,8192,e);return u%2===0?u:u-1}function k(t){return t?.exportSettings??null}function Le(t){const e=String(k(t)?.format??"mp4").toLowerCase();return e==="mov"||e==="mxf"?e:"mp4"}function wt(t){return Dt(k(t)?.frameRate,12,120,30)}function Ne(t){const e=tt(t.canvas,t),u=k(t);if(!u)return e;const i=Number.isFinite(Number(u.width))&&Number(u.width)>0,r=Number.isFinite(Number(u.height))&&Number(u.height)>0;if(!i&&!r)return e;const a=e.w>0&&e.h>0?e.w/e.h:1;if(i&&r)return{w:R(u.width,e.w),h:R(u.height,e.h)};if(i){const s=R(u.width,e.w);return{w:s,h:R(s/a,e.h)}}const n=R(u.height,e.h);return{w:R(n*a,e.w),h:n}}function Oe(t){const e=Number(k(t)?.videoBitrateKbps);return Number.isFinite(e)&&e>=100?Math.round(e):0}function Ve(t){const e=Number(k(t)?.audioBitrateKbps);return Number.isFinite(e)&&e>=32?Math.round(e):0}function _e(t){return k(t)?.audioCodec==="mp3"?"libmp3lame":"aac"}function ut(t){return tt(t.canvas,t)}function it(t){const e=ut(t),u=Ne(t);return u.w===e.w&&u.h===e.h?[]:[`scale=${u.w}:${u.h}`]}function St(t){const e=F(t?.brightness),u=F(t?.contrast),i=F(t?.saturation),r=F(t?.gamma);if(e===0&&u===0&&i===0&&r===0)return null;const a=[];if(e!==0||u!==0){const s=B(Math.max(0,1+e)),l=B(Math.max(0,1+u)),c=`clip(((val*${s})-128)*${l}+128,0,255)`;a.push(`lutrgb=r='${c}':g='${c}':b='${c}'`)}const n=[];return i!==0&&n.push(`saturation=${1+i}`),r!==0&&n.push(`gamma=${(1+r*(r>0?1:.5)).toFixed(3)}`),n.length&&a.push(`eq=${n.join(":")}`),a.join(",")}function B(t){return`${Math.round(t*1e3)/1e3}`}function Mt(t){const e=F(t?.temperature),u=F(t?.tint);if(e===0&&u===0)return null;const i=F(e*.18+u*.08),r=F(e*.02-u*.12),a=F(-e*.18+u*.08);return`colorbalance=rs=${B(i)}:gs=${B(r)}:bs=${B(a)}`}function Tt(t){const e=F(t?.vibrance);return e===0?null:`vibrance=intensity=${B(e)}`}function I(t,e,u){if(t===e)return u<t?0:1;const i=Math.max(0,Math.min(1,(u-t)/(e-t)));return i*i*(3-2*i)}function Ze(t){const e=I(.08,.4,t),u=1-I(.6,.92,t);return Math.max(0,Math.min(1,e*u*2.2))}function He(t,e){const u=1-I(.18,.62,t),i=1-I(.04,.32,t),r=I(.38,.84,t),a=I(.7,.98,t),n=Ze(t),s=e.shadows*u*.28+e.highlights*r*.24+e.blacks*i*.2+e.whites*a*.2+e.lightSense*n*.18+e.fade*(.12+u*.06);return Math.max(0,Math.min(1,t+s))}function Pt(t){const e={highlights:F(t?.highlights),shadows:F(t?.shadows),whites:F(t?.whites),blacks:F(t?.blacks),lightSense:F(t?.lightSense),fade:N(t?.fade)};return Object.values(e).some(u=>Math.abs(u)>1e-4)?`curves=master='${[0,.18,.36,.5,.68,.84,1].map(u=>`${B(u)}/${B(He(u,e))}`).join(" ")}'`:null}function Rt(t){const e=[],u=N(t?.clarity),i=N(t?.sharpen);return u>1e-4&&e.push(`unsharp=lx=7:ly=7:la=${B(u*1.8)}:cx=7:cy=7:ca=0`),i>1e-4&&e.push(`unsharp=lx=3:ly=3:la=${B(.35+i*2.1)}:cx=3:cy=3:ca=${B(i*.55)}`),e}function kt(t){const e=N(t?.grain);return e<=1e-4?null:`noise=alls=${Math.round(6+e*26)}:allf=t`}function It(t){const e=N(t?.vignette);if(e<=1e-4)return null;const u=Math.max(.12,.42-e*.22);return`vignette=angle=${B(u)}*PI`}function ot(t,e={}){const u=[];if(t.flipX&&u.push("hflip"),t.flipY&&u.push("vflip"),u.push(...Ie(t.rotation)),t.crop){const{x:m,y:h,width:v,height:A}=t.crop;u.push(`crop=${v}:${A}:${m}:${h}`)}if(t.scale){const{width:m,height:h,fit:v}=t.scale;v==="force"?u.push(`scale=${m}:${h}`):v==="cover"?u.push(`scale=${m}:${h}:force_original_aspect_ratio=increase`,`crop=${m}:${h}`):u.push(`scale=${m}:${h}:force_original_aspect_ratio=decrease`,`pad=${m}:${h}:(ow-iw)/2:(oh-ih)/2`)}const i=St(t.filters);i&&u.push(i);const r=Mt(t.filters);r&&u.push(r);const a=Tt(t.filters);a&&u.push(a);const n=Pt(t.filters);n&&u.push(n),u.push(...Rt(t.filters));const s=kt(t.filters);s&&u.push(s);const l=It(t.filters);l&&u.push(l);const c=H(t.filterPreset);return c&&u.push(c.vf),e.includeExportScale!==!1&&u.push(...it(t)),u.push(`fps=${wt(t)}`),Z(t.rotation)%90!==0&&!t.scale&&u.push("scale=trunc(iw/2)*2:trunc(ih/2)*2"),u}var jt={fade:"fade",slide:"slideleft",wipe:"wipeleft",flip:"horzopen",clockWipe:"radial",star:"pixelize",circle:"circleopen",rectangle:"rectcrop"},Ge={fade:"qsin",slide:"tri",wipe:"tri",flip:"exp",clockWipe:"qsin",star:"tri",circle:"qsin",rectangle:"qsin"};function O(t){return t.out-t.in}function Lt(t,e,u){const i=t&&typeof t.type=="string"?t.type:"none",r=jt[i]?i:"none",a=Math.max(0,Math.min(1.2,e-.05,u-.05));if(r==="none"||a<=.05)return{type:"none",duration:0,effect:"fade",curve:"tri"};const n=Number(t?.duration),s=Math.min(Math.max(Number.isFinite(n)?n:.4,.1),a);return{type:r,duration:s,effect:jt[r],curve:Ge[r]??"tri"}}function Ye(t,e){if(!Array.isArray(e)||e.length<2)return!1;for(let u=0;u<e.length-1;u++){const i=Lt(t?.[u],O(e[u]),O(e[u+1]));if(i.type!=="none"&&i.duration>0)return!0}return!1}function qe(t,e){const u=[];let i=0;for(let r=0;r<t.length-1;r++){const a=Lt(e?.[r],O(t[r]),O(t[r+1]));a.type!=="none"&&a.duration>0&&(u.push({start:i,end:r,transition:a}),i=r+1)}return u.push({start:i,end:t.length-1,transition:null}),u}function Xe(t,e,u){let i=0;for(let r=e;r<=u;r++)i+=O(t[r]);return i}function Ue(t,e,u,i){const r=qe(e,u).map((l,c)=>{const m=Xe(e,l.start,l.end);if(l.start===l.end)return{vLabel:`[v${l.start}]`,aLabel:i?`[a${l.start}]`:"",duration:m,transition:l.transition};const h=[];for(let x=l.start;x<=l.end;x++)h.push(i?`[v${x}][a${x}]`:`[v${x}]`);const v=`[sgv${c}]`,A=i?`[sga${c}]`:"";return t.push(`${h.join("")}concat=n=${l.end-l.start+1}:v=1:a=${i?1:0}${i?`${v}${A}`:v}`),{vLabel:v,aLabel:A,duration:m,transition:l.transition}});let a=r[0].vLabel,n=i?r[0].aLabel:"",s=r[0].duration;for(let l=1;l<r.length;l++){const c=r[l-1].transition,m=r[l],h=`[vx${l}]`,v=Math.max(0,s-c.duration);if(t.push(`${a}${m.vLabel}xfade=transition=${c.effect}:duration=${c.duration}:offset=${v}${h}`),a=h,i){const A=`[ax${l}]`;t.push(`${n}${m.aLabel}acrossfade=d=${c.duration}:c1=${c.curve}:c2=${c.curve}${A}`),n=A}s=s+m.duration-c.duration}return{vLabel:a,aLabel:n,duration:s}}function rt(t,e){const u=Le(e),i=u==="mxf"?["-c:v","mpeg2video","-pix_fmt","yuv422p"]:["-c:v","libx264","-preset","veryfast","-pix_fmt","yuv420p","-movflags","+faststart"],r=Oe(e);if(r>0?i.push("-b:v",`${r}k`,"-maxrate",`${r}k`,"-bufsize",`${Math.max(r*2,512)}k`):u==="mxf"&&i.push("-q:v","2"),t)if(u==="mxf")i.push("-c:a","pcm_s16le");else{i.push("-c:a",_e(e));const a=Ve(e);a>0&&i.push("-b:a",`${a}k`)}return u==="mxf"&&i.push("-f","mxf"),i}var q="aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo",Nt="anullsrc=r=44100:cl=stereo";function Ot(t){return t>.02?`,afade=t=in:st=0:d=0.01,afade=t=out:st=${Math.round((t-.01)*1e3)/1e3}:d=0.01`:""}var We="alimiter=limit=0.95:level=disabled:latency=1",Ke=3,Qe=.5;function Vt(t,e=0){const u=Math.max(e,Math.floor(Number(t)||0));return u%2===0?u:u-1}function Je(t){const e=Number.isFinite(t?.startAt)?Math.max(0,Number(t.startAt)):0,u=Number(t?.endAt);return Number.isFinite(u)?{startAt:e,endAt:Math.max(e+Qe,u)}:{startAt:e,endAt:e+Ke}}function tu(t,e){const u=Math.max(2,Vt(e.w,2)),i=Math.max(2,Vt(e.h,2));return!(u>1)||!(i>1)?null:{x:0,y:0,w:u,h:i}}function eu(t){if(t?.type==="filter"){const l=H(t.filterPreset);return l?[l.vf]:[]}if(t?.type!=="adjust")return[];const e=[],u=St(t);u&&e.push(u);const i=Mt(t);i&&e.push(i);const r=Tt(t);r&&e.push(r);const a=Pt(t);a&&e.push(a),e.push(...Rt(t));const n=kt(t);n&&e.push(n);const s=It(t);return s&&e.push(s),e}function _t(t,e){const u=[];for(const i of t??[]){if(i?.type!=="filter"&&i?.type!=="adjust")continue;const r=tu(i,e);if(!r)continue;const a=eu(i);a.length&&u.push({rect:r,filters:a,...Je(i)})}return u}function Zt(t,e=1/0){const u=[];for(const i of t??[]){if(i?.type!=="pen"&&i?.type!=="line"&&i?.type!=="arrow"&&i?.type!=="rect"&&i?.type!=="ellipse"&&i?.type!=="text"&&i?.type!=="sticker")continue;const r=Number(i.startAt),a=Number(i.endAt);if(!(!Number.isFinite(r)||!Number.isFinite(a)||a<=r)&&(u.push({startAt:Math.max(0,r),endAt:Math.max(r+.01,a)}),u.length>=e))break}return u}function Ht(t,e,u,i){let r=e;return i.forEach((a,n)=>{const s=`[vtxt${u+n}]`;t.push(`${r}[${u+n}:v]overlay=0:0:enable='between(t,${a.startAt.toFixed(3)},${a.endAt.toFixed(3)})'${s}`),r=s}),r}function Gt(t,e,u){let i=e;return u.forEach((r,a)=>{const n=`[vfxsrc${a}]`,s=`[vfxbase${a}]`,l=`[vfxcrop${a}]`,c=`[vfx${a}]`,{rect:m}=r;t.push(`${i}split=2${n}${s}`),t.push(`${n}crop=${m.w}:${m.h}:${m.x}:${m.y},${r.filters.join(",")}${l}`),t.push(`${s}${l}overlay=${m.x}:${m.y}:enable='between(t,${r.startAt.toFixed(3)},${r.endAt.toFixed(3)})'${c}`),i=c}),i}function uu(t,e,u,i,r,a=[]){const n=ot(t,{includeExportScale:!1}),s=t.clips,l=t.keepAudio&&r,c=s.length>=2,m=_t(t.overlays,ut(t)),h=Zt(t.overlays,a.length),v=a.slice(0,h.length);if(c||i||v.length||m.length){const z=[];let d;if(c){s.forEach((E,C)=>{z.push(`[0:v]trim=start=${E.in}:end=${E.out},setpts=PTS-STARTPTS[v${C}]`),l&&z.push(`[0:a]atrim=start=${E.in}:end=${E.out},asetpts=PTS-STARTPTS${Ot(E.out-E.in)}[a${C}]`)});const f=s.map((E,C)=>l?`[v${C}][a${C}]`:`[v${C}]`).join(""),g=l?"[vcat][acat]":"[vcat]";z.push(`${f}concat=n=${s.length}:v=1:a=${l?1:0}${g}`),d="[vcat]"}else d="[0:v]";if(n.length&&(z.push(`${d}${n.join(",")}[vflt]`),d="[vflt]"),m.length&&(d=Gt(z,d,m)),i?(z.push(`${d}[1:v]overlay=0:0[vout]`),d="[vout]"):d==="[0:v]"&&(z.push("[0:v]null[vout]"),d="[vout]"),v.length){const f=1+(i?1:0);d=Ht(z,d,f,h)}const y=it(t);y.length&&(z.push(`${d}${y.join(",")}[vscaled]`),d="[vscaled]");const V=[];!c&&s.length===1&&V.push("-ss",String(s[0].in),"-t",String(s[0].out-s[0].in));const D=["-y",...V,"-i",e];i&&D.push("-i",i);for(const f of v)D.push("-i",f);return D.push("-filter_complex",z.join(";"),"-map",d),l&&D.push("-map",c?"[acat]":"0:a?"),D.push(...rt(l,t)),D.push(u),D}const A=ot(t),x=["-y","-ss",String(s[0].in),"-t",String(s[0].out-s[0].in),"-i",e];return A.length&&x.push("-vf",A.join(",")),l||x.push("-an"),x.push(...rt(l,t)),x.push(u),x}function iu(t,e,u){const{videoPaths:i,videoHasAudio:r,audioPaths:a,overlayPath:n,textOverlayPaths:s=[]}=e,l=t.audioClips??[],c=Ye(t.transitions,t.clips),m=Zt(t.overlays,s.length),h=s.slice(0,m.length);if(i.length===1&&l.length===0&&!c)return uu(t,i[0],u,n,r[0]??!1,h);const v=i.length,A=a.length,x=t.canvas.w,z=t.canvas.h,d=t.clips,y=t.keepAudio&&d.some(p=>r[p.srcIdx]),V=wt(t),D=d.reduce((p,b)=>p+(b.out-b.in),0),f=[];d.forEach((p,b)=>{f.push(`[${p.srcIdx}:v]trim=start=${p.in}:end=${p.out},setpts=PTS-STARTPTS,scale=${x}:${z}:force_original_aspect_ratio=increase,crop=${x}:${z},setsar=1,fps=${V},format=yuv420p[v${b}]`),y&&(r[p.srcIdx]?f.push(`[${p.srcIdx}:a]atrim=start=${p.in}:end=${p.out},asetpts=PTS-STARTPTS${Ot(p.out-p.in)},${q}[a${b}]`):f.push(`${Nt},atrim=start=0:end=${p.out-p.in},asetpts=PTS-STARTPTS,${q}[a${b}]`))});let g="[vcat]",E=y?"[acat]":"",C=D;if(c){const p=Ue(f,d,t.transitions??[],y);g=p.vLabel,E=y?p.aLabel:"",C=p.duration}else{const p=d.map((b,M)=>y?`[v${M}][a${M}]`:`[v${M}]`).join("");f.push(`${p}concat=n=${d.length}:v=1:a=${y?1:0}${y?"[vcat][acat]":"[vcat]"}`)}if(!y&&l.length&&(f.push(`${Nt},atrim=start=0:end=${C},asetpts=PTS-STARTPTS,${q}[acat]`),E="[acat]"),l.length){l.forEach((b,M)=>{const lt=Math.max(0,Math.round(b.startAt*1e3)),U=Math.max(0,b.out-b.in),Yt=Ct(b.speed),W=Math.min(Math.max(Number(b.fadeIn)||0,0),U),K=Math.min(Math.max(Number(b.fadeOut)||0,0),Math.max(0,U-W)),_=[`atrim=start=${b.in}:end=${b.out}`,"asetpts=PTS-STARTPTS",...je(Yt),`volume=${b.volume}`];W>1e-4&&_.push(`afade=t=in:st=0:d=${W}`),K>1e-4&&_.push(`afade=t=out:st=${Math.max(0,U-K)}:d=${K}`),_.push(q,`adelay=${lt}|${lt}`),f.push(`[${v+M}:a]${_.join(",")}[mu${M}]`)});const p=`${E}${l.map((b,M)=>`[mu${M}]`).join("")}`;f.push(`${p}amix=inputs=${1+l.length}:duration=first:dropout_transition=0:normalize=0,${We}[aout]`),E="[aout]"}const at=ot(t,{includeExportScale:!1}),nt=_t(t.overlays,ut(t));if(at.length&&(f.push(`${g}${at.join(",")}[vflt]`),g="[vflt]"),nt.length&&(g=Gt(f,g,nt)),n&&(f.push(`${g}[${v+A}:v]overlay=0:0[vout]`),g="[vout]"),h.length){const p=v+A+(n?1:0);g=Ht(f,g,p,m)}const st=it(t);st.length&&(f.push(`${g}${st.join(",")}[vscaled]`),g="[vscaled]");const $=["-y"];for(const p of i)$.push("-i",p);for(const p of a)$.push("-i",p);n&&$.push("-i",n);for(const p of h)$.push("-i",p);$.push("-filter_complex",f.join(";"),"-map",g);const X=!!E;return X&&$.push("-map",E),$.push(...rt(X,t)),X&&$.push("-ar","44100","-ac","2"),$.push(u),$}function ou(t,e,u){return["-y","-ss",String(e),"-i",t,"-frames:v","1","-q:v","2",u]}
|