@bylqwjc/media-editor-server 1.0.10
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/LICENSE +21 -0
- package/README.md +36 -0
- package/dist/adapters/express.cjs +1 -0
- package/dist/adapters/express.d.ts +30 -0
- package/dist/adapters/express.js +1 -0
- package/dist/adapters/web.cjs +1 -0
- package/dist/adapters/web.d.ts +15 -0
- package/dist/adapters/web.js +1 -0
- package/dist/handler-DL4Inp7o.d.ts +47 -0
- package/dist/index.cjs +4 -0
- package/dist/index.d.ts +59 -0
- package/dist/index.js +4 -0
- package/node_modules/@media-editor/core/LICENSE +21 -0
- package/node_modules/@media-editor/core/README.md +14 -0
- package/node_modules/@media-editor/core/dist/browser.cjs +1 -0
- package/node_modules/@media-editor/core/dist/browser.d.ts +100 -0
- package/node_modules/@media-editor/core/dist/browser.js +3 -0
- package/node_modules/@media-editor/core/dist/chunk-MGKYVYOH.js +1 -0
- package/node_modules/@media-editor/core/dist/chunk-USY6UDGL.js +1 -0
- package/node_modules/@media-editor/core/dist/chunk-XCBM7P7N.js +1 -0
- package/node_modules/@media-editor/core/dist/engine.cjs +1 -0
- package/node_modules/@media-editor/core/dist/engine.d.ts +359 -0
- package/node_modules/@media-editor/core/dist/engine.js +1 -0
- package/node_modules/@media-editor/core/dist/filerobot.cjs +1 -0
- package/node_modules/@media-editor/core/dist/filerobot.d.ts +88 -0
- package/node_modules/@media-editor/core/dist/filerobot.js +1 -0
- package/node_modules/@media-editor/core/dist/index.cjs +1 -0
- package/node_modules/@media-editor/core/dist/index.d.ts +264 -0
- package/node_modules/@media-editor/core/dist/index.js +1 -0
- package/node_modules/@media-editor/core/dist/platform-presets-B-o4C6uY.d.ts +80 -0
- package/node_modules/@media-editor/core/dist/state-B85vkf7_.d.ts +1027 -0
- package/node_modules/@media-editor/core/node_modules/zod/LICENSE +21 -0
- package/node_modules/@media-editor/core/node_modules/zod/README.md +208 -0
- package/node_modules/@media-editor/core/node_modules/zod/index.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/index.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/index.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/package.json +76 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.d.cts +164 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/ZodError.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/errors.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/errors.d.cts +5 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/errors.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/external.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/external.d.cts +6 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/external.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/enumUtil.js +0 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/errorUtil.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/parseUtil.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/partialUtil.js +0 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/typeAliases.js +0 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.d.cts +85 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/helpers/util.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/index.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/index.d.cts +4 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/index.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.d.cts +3 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/locales/en.js +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.d.cts +102 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/standard-schema.js +0 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/types.cjs +1 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/types.d.cts +1031 -0
- package/node_modules/@media-editor/core/node_modules/zod/v3/types.js +1 -0
- package/node_modules/@media-editor/core/package.json +42 -0
- package/package.json +43 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{toHant as B,IMAGE_PLATFORM_PRESETS as l,compensateAnnotationRotation as A}from"./chunk-XCBM7P7N.js";var m={"txt-primary":"#f1f1f4","txt-secondary":"#b6bac4","txt-secondary-invert":"#14141a","txt-placeholder":"#7c818c","txt-warning":"#fbbf24","txt-error":"#f87171","txt-info":"#7cc4f5","icon-primary":"#d6d8e0","icons-secondary":"#9aa0ac","icons-muted":"#7c818c","icons-placeholder":"#3a3a44","icons-invert":"#14141a","icons-primary-hover":"#ffffff","icons-secondary-hover":"#d6d8e0","bg-primary":"#14141a","bg-primary-light":"#1a1a22","bg-primary-hover":"#20202a","bg-primary-active":"#2a2a38","bg-primary-stateless":"#20202a","bg-secondary":"#1a1a22","bg-stateless":"#1a1a22","bg-active":"#262633","bg-hover":"#20202a","bg-grey":"#23232e","bg-base-light":"#23232e","bg-base-medium":"#2a2a38","bg-tooltip":"#2a2a33","accent-primary":"#7C7CF0","accent-primary-hover":"#8F8FF5","accent-primary-active":"#6A6AE8","accent-stateless":"#7C7CF0","btn-primary-text":"#ffffff","btn-secondary-text":"#f1f1f4","btn-disabled-text":"#6a6a72","link-primary":"#c4c4cc","link-stateless":"#c4c4cc","link-hover":"#ffffff","link-active":"#ffffff","borders-primary":"#2e2e3a","borders-primary-hover":"#4a4a58","borders-secondary":"#26262f","borders-strong":"#3a3a46","borders-invert":"#d6d8e0","borders-item":"#26262f","borders-button":"#3a3a46","active-secondary":"#1f1f29","active-secondary-hover":"rgba(124,124,240,0.16)",tag:"#9aa0ac","light-shadow":"rgba(0,0,0,0.4)","medium-shadow":"rgba(0,0,0,0.5)"},F={"txt-primary":"#0a0a0a","txt-secondary":"#52525b","txt-secondary-invert":"#ffffff","txt-placeholder":"#a1a1aa","txt-warning":"#b45309","txt-error":"#dc2626","txt-info":"#2563eb","icon-primary":"#3f3f46","icons-secondary":"#71717a","icons-muted":"#a1a1aa","icons-placeholder":"#d4d4d8","icons-invert":"#ffffff","icons-primary-hover":"#0a0a0a","icons-secondary-hover":"#3f3f46","bg-primary":"#ffffff","bg-primary-light":"#fafafa","bg-primary-hover":"#f4f4f5","bg-primary-active":"#e4e4e7","bg-primary-stateless":"#f4f4f5","bg-secondary":"#fafafa","bg-stateless":"#fafafa","bg-active":"#ededfb","bg-hover":"#f4f4f5","bg-grey":"#f1f1f3","bg-base-light":"#f4f4f5","bg-base-medium":"#e4e4e7","bg-tooltip":"#18181b","accent-primary":"#5B5BD6","accent-primary-hover":"#4F4FC9","accent-primary-active":"#4444B8","accent-stateless":"#5B5BD6","btn-primary-text":"#ffffff","btn-secondary-text":"#0a0a0a","btn-disabled-text":"#a1a1aa","link-primary":"#5B5BD6","link-stateless":"#5B5BD6","link-hover":"#4444B8","link-active":"#4444B8","borders-primary":"#e6e6e8","borders-primary-hover":"#d4d4d8","borders-secondary":"#ededf0","borders-strong":"#d4d4d8","borders-invert":"#3f3f46","borders-item":"#ededf0","borders-button":"#d4d4d8","active-secondary":"#ededfb","active-secondary-hover":"rgba(91,91,214,0.10)",tag:"#71717a","light-shadow":"rgba(0,0,0,0.06)","medium-shadow":"rgba(0,0,0,0.12)"},s={name:"\u540D\u79F0",save:"\u4FDD\u5B58",saveAs:"\u53E6\u5B58\u4E3A",back:"\u8FD4\u56DE",loading:"\u52A0\u8F7D\u4E2D\u2026",resetOperations:"\u91CD\u7F6E/\u6E05\u9664\u5168\u90E8\u64CD\u4F5C",changesLoseWarningHint:"\u6309\u4E0B\u300C\u91CD\u7F6E\u300D\u5C06\u4E22\u5931\u6240\u6709\u4FEE\u6539,\u786E\u5B9A\u7EE7\u7EED\u5417?",discardChangesWarningHint:"\u5173\u95ED\u5F39\u7A97\u540E,\u6700\u540E\u7684\u4FEE\u6539\u5C06\u4E0D\u4F1A\u4FDD\u5B58\u3002",cancel:"\u53D6\u6D88",apply:"\u5E94\u7528",warning:"\u8B66\u544A",confirm:"\u786E\u8BA4",discardChanges:"\u653E\u5F03\u4FEE\u6539",undoTitle:"\u64A4\u9500\u4E0A\u4E00\u6B65",redoTitle:"\u91CD\u505A\u4E0A\u4E00\u6B65",showImageTitle:"\u663E\u793A\u539F\u56FE",zoomInTitle:"\u653E\u5927",fitTitle:"\u9002\u5E94",zoomOutTitle:"\u7F29\u5C0F",toggleZoomMenuTitle:"\u7F29\u653E\u83DC\u5355",pointerToolTitle:"\u6307\u9488\u5DE5\u5177",panToolTitle:"\u624B\u5DE5\u5177\uFF1A\u62D6\u52A8\u753B\u9762",adjustTab:"\u8C03\u6574",finetuneTab:"\u5FAE\u8C03",filtersTab:"\u6EE4\u955C",watermarkTab:"\u6C34\u5370",annotateTabLabel:"\u753B\u753B",resize:"\u8C03\u6574\u5C3A\u5BF8",resizeTab:"\u5C3A\u5BF8",imageName:"\u56FE\u7247\u540D\u79F0",invalidImageError:"\u63D0\u4F9B\u7684\u56FE\u7247\u65E0\u6548\u3002",uploadImageError:"\u4E0A\u4F20\u56FE\u7247\u51FA\u9519\u3002",areNotImages:"\u4E0D\u662F\u56FE\u7247",isNotImage:"\u4E0D\u662F\u56FE\u7247",toBeUploaded:"\u5F85\u4E0A\u4F20",cropTool:"\u88C1\u526A",original:"\u539F\u59CB",custom:"\u81EA\u5B9A\u4E49",square:"\u65B9\u5F62",landscape:"\u6A2A\u5411",portrait:"\u7EB5\u5411",ellipse:"\u692D\u5706",classicTv:"\u7ECF\u5178\u7535\u89C6",cinemascope:"\u5BBD\u94F6\u5E55",arrowTool:"\u7BAD\u5934",blurTool:"\u6A21\u7CCA",brightnessTool:"\u4EAE\u5EA6",contrastTool:"\u5BF9\u6BD4\u5EA6",ellipseTool:"\u692D\u5706",unFlipX:"\u53D6\u6D88\u6C34\u5E73\u7FFB\u8F6C",flipX:"\u6C34\u5E73\u7FFB\u8F6C",unFlipY:"\u53D6\u6D88\u5782\u76F4\u7FFB\u8F6C",flipY:"\u5782\u76F4\u7FFB\u8F6C",hsvTool:"HSV",hue:"\u8272\u76F8",brightness:"\u4EAE\u5EA6",saturation:"\u9971\u548C\u5EA6",value:"\u660E\u5EA6",imageTool:"\u56FE\u7247",importing:"\u5BFC\u5165\u4E2D\u2026",addImage:"\u6DFB\u52A0\u56FE\u7247",uploadImage:"\u4E0A\u4F20\u56FE\u7247",fromGallery:"\u4ECE\u56FE\u5E93",lineTool:"\u76F4\u7EBF",penTool:"\u753B\u7B14",polygonTool:"\u591A\u8FB9\u5F62",sides:"\u8FB9\u6570",rectangleTool:"\u77E9\u5F62",cornerRadius:"\u5706\u89D2",resizeWidthTitle:"\u5BBD\u5EA6(\u50CF\u7D20)",resizeHeightTitle:"\u9AD8\u5EA6(\u50CF\u7D20)",toggleRatioLockTitle:"\u9501\u5B9A/\u89E3\u9501\u6BD4\u4F8B",resetSize:"\u91CD\u7F6E\u4E3A\u539F\u56FE\u5C3A\u5BF8",rotateTool:"\u65CB\u8F6C",textTool:"\u6587\u5B57",textSpacings:"\u6587\u5B57\u95F4\u8DDD",textAlignment:"\u6587\u5B57\u5BF9\u9F50",fontFamily:"\u5B57\u4F53",size:"\u5927\u5C0F",letterSpacing:"\u5B57\u95F4\u8DDD",lineHeight:"\u884C\u9AD8",warmthTool:"\u8272\u6E29",addWatermark:"\u6DFB\u52A0\u6C34\u5370",addTextWatermark:"\u6DFB\u52A0\u6587\u5B57\u6C34\u5370",addWatermarkTitle:"\u9009\u62E9\u6C34\u5370\u7C7B\u578B",uploadWatermark:"\u4E0A\u4F20\u6C34\u5370",addWatermarkAsText:"\u4EE5\u6587\u5B57\u6DFB\u52A0",padding:"\u5185\u8FB9\u8DDD",paddings:"\u5185\u8FB9\u8DDD",shadow:"\u9634\u5F71",horizontal:"\u6C34\u5E73",vertical:"\u5782\u76F4",blur:"\u6A21\u7CCA",opacity:"\u4E0D\u900F\u660E\u5EA6",transparency:"\u900F\u660E\u5EA6",position:"\u4F4D\u7F6E",stroke:"\u63CF\u8FB9",saveAsModalTitle:"\u53E6\u5B58\u4E3A",extension:"\u6269\u5C55\u540D",format:"\u683C\u5F0F",nameIsRequired:"\u540D\u79F0\u5FC5\u586B\u3002",quality:"\u8D28\u91CF",imageDimensionsHoverTitle:"\u4FDD\u5B58\u56FE\u7247\u5C3A\u5BF8(\u5BBD \xD7 \u9AD8)",cropSizeLowerThanResizedWarning:"\u6CE8\u610F:\u6240\u9009\u88C1\u526A\u533A\u57DF\u5C0F\u4E8E\u5DF2\u5E94\u7528\u7684\u8C03\u6574\u5C3A\u5BF8,\u53EF\u80FD\u5BFC\u81F4\u753B\u8D28\u4E0B\u964D",actualSize:"\u5B9E\u9645\u5927\u5C0F(100%)",fitSize:"\u9002\u5E94\u5927\u5C0F",addImageTitle:"\u9009\u62E9\u8981\u6DFB\u52A0\u7684\u56FE\u7247\u2026",mutualizedFailedToLoadImg:"\u56FE\u7247\u52A0\u8F7D\u5931\u8D25\u3002",tabsMenu:"\u83DC\u5355",download:"\u4E0B\u8F7D",width:"\u5BBD\u5EA6",height:"\u9AD8\u5EA6",cropItemNoEffect:"\u8BE5\u88C1\u526A\u9879\u65E0\u9884\u89C8",px:"px",invalidTextContent:"\u6587\u5B57\u5185\u5BB9\u65E0\u6548",baselineShift:"\u57FA\u7EBF\u504F\u79FB",aiTab:"AI \u5DE5\u5177",objectRemovalTool:"\u5BF9\u8C61\u79FB\u9664",objectRemovalBrushSize:"\u753B\u7B14\u5927\u5C0F(px)",objectRemovalApplyButton:"\u5E94\u7528",objectRemovalBrushMode:"\u753B\u7B14\u6A21\u5F0F",objectRemovalBrushCircleType:"\u5706\u5F62\u753B\u7B14",objectRemovalBrushSquareType:"\u65B9\u5F62\u753B\u7B14",objectRemovalApplyingText:"\u6B63\u5728\u79FB\u9664\u6240\u9009\u533A\u57DF",objectRemovalMarkModeTooltip:"\u6807\u8BB0\u6A21\u5F0F",objectRemovalUnMarkModeTooltip:"\u53D6\u6D88\u6807\u8BB0\u6A21\u5F0F",objectRemovalCancelConfirmationTitle:"\u53D6\u6D88\u5904\u7406",objectRemovalCancelConfirmationHint:"\u786E\u5B9A\u8981\u53D6\u6D88\u79FB\u9664\u4EE5\u4E0B\u7D20\u6750\u4E2D\u7684\u5BF9\u8C61:",objectRemovalCancelConfirmationHintCompletion:"?",theKeyword:"\u8BE5"},E={name:"Nombre",save:"Guardar",saveAs:"Guardar como",back:"Volver",loading:"Cargando\u2026",resetOperations:"Restablecer / borrar cambios",changesLoseWarningHint:"Al pulsar \u201CRestablecer\u201D se perder\xE1n todos los cambios. \xBFContinuar?",discardChangesWarningHint:"Al cerrar el cuadro, los \xFAltimos cambios no se guardar\xE1n.",cancel:"Cancelar",apply:"Aplicar",warning:"Advertencia",confirm:"Confirmar",discardChanges:"Descartar cambios",undoTitle:"Deshacer",redoTitle:"Rehacer",showImageTitle:"Mostrar original",zoomInTitle:"Ampliar",fitTitle:"Ajustar",zoomOutTitle:"Reducir",toggleZoomMenuTitle:"Men\xFA de zoom",pointerToolTitle:"Herramienta de puntero",panToolTitle:"Mano: desplazar lienzo",adjustTab:"Ajustar",finetuneTab:"Ajustes finos",filtersTab:"Filtros",watermarkTab:"Marca de agua",annotateTabLabel:"Dibujar",resize:"Redimensionar",resizeTab:"Tama\xF1o",imageName:"Nombre de imagen",invalidImageError:"La imagen proporcionada no es v\xE1lida.",uploadImageError:"Error al subir la imagen.",areNotImages:"No son im\xE1genes",isNotImage:"No es una imagen",toBeUploaded:"Pendiente de subir",cropTool:"Recortar",original:"Original",custom:"Personalizado",square:"Cuadrado",landscape:"Horizontal",portrait:"Vertical",ellipse:"Elipse",classicTv:"TV cl\xE1sica",cinemascope:"Cinemascope",arrowTool:"Flecha",blurTool:"Desenfoque",brightnessTool:"Brillo",contrastTool:"Contraste",ellipseTool:"Elipse",unFlipX:"Quitar volteo horizontal",flipX:"Voltear horizontal",unFlipY:"Quitar volteo vertical",flipY:"Voltear vertical",hsvTool:"HSV",hue:"Matiz",brightness:"Brillo",saturation:"Saturaci\xF3n",value:"Valor",imageTool:"Imagen",importing:"Importando\u2026",addImage:"A\xF1adir imagen",uploadImage:"Subir imagen",fromGallery:"Desde galer\xEDa",lineTool:"L\xEDnea",penTool:"Pincel",polygonTool:"Pol\xEDgono",sides:"Lados",rectangleTool:"Rect\xE1ngulo",cornerRadius:"Radio de esquina",resizeWidthTitle:"Ancho (px)",resizeHeightTitle:"Alto (px)",toggleRatioLockTitle:"Bloquear/desbloquear proporci\xF3n",resetSize:"Restablecer tama\xF1o original",rotateTool:"Rotar",textTool:"Texto",textSpacings:"Espaciado de texto",textAlignment:"Alineaci\xF3n de texto",fontFamily:"Fuente",size:"Tama\xF1o",letterSpacing:"Espaciado",lineHeight:"Altura de l\xEDnea",warmthTool:"Temperatura",addWatermark:"A\xF1adir marca de agua",addTextWatermark:"A\xF1adir marca de texto",addWatermarkTitle:"Elegir tipo de marca",uploadWatermark:"Subir marca de agua",addWatermarkAsText:"A\xF1adir como texto",padding:"Relleno",paddings:"Relleno",shadow:"Sombra",horizontal:"Horizontal",vertical:"Vertical",blur:"Desenfoque",opacity:"Opacidad",transparency:"Transparencia",position:"Posici\xF3n",stroke:"Trazo",saveAsModalTitle:"Guardar como",extension:"Extensi\xF3n",format:"Formato",nameIsRequired:"El nombre es obligatorio.",quality:"Calidad",imageDimensionsHoverTitle:"Tama\xF1o guardado (ancho \xD7 alto)",cropSizeLowerThanResizedWarning:"Nota: el \xE1rea recortada es menor que el tama\xF1o ajustado y puede reducir la calidad",actualSize:"Tama\xF1o real (100%)",fitSize:"Ajustar tama\xF1o",addImageTitle:"Elegir imagen para a\xF1adir\u2026",mutualizedFailedToLoadImg:"No se pudo cargar la imagen.",tabsMenu:"Men\xFA",download:"Descargar",width:"Ancho",height:"Alto",cropItemNoEffect:"Este recorte no tiene vista previa",px:"px",invalidTextContent:"Contenido de texto no v\xE1lido",baselineShift:"Desplazamiento de l\xEDnea base",aiTab:"Herramientas IA",objectRemovalTool:"Eliminar objeto",objectRemovalBrushSize:"Tama\xF1o de pincel (px)",objectRemovalApplyButton:"Aplicar",objectRemovalBrushMode:"Modo pincel",objectRemovalBrushCircleType:"Pincel circular",objectRemovalBrushSquareType:"Pincel cuadrado",objectRemovalApplyingText:"Eliminando el \xE1rea seleccionada",objectRemovalMarkModeTooltip:"Modo marcar",objectRemovalUnMarkModeTooltip:"Modo desmarcar",objectRemovalCancelConfirmationTitle:"Cancelar proceso",objectRemovalCancelConfirmationHint:"\xBFSeguro que quieres cancelar la eliminaci\xF3n del objeto en:",objectRemovalCancelConfirmationHintCompletion:"?",theKeyword:"este"},g=Object.fromEntries(Object.entries(s).map(([e,u])=>[e,B(u)])),D={zh:s,es:E,"zh-Hant":g},f=["Adjust","Annotate","Watermark","Filters","Finetune","Resize"];function p(e=l,u){return e.map((a,o)=>{const t={titleKey:a.label,descriptionKey:a.ratio,ratio:a.value+(o+1)*1e-6};return u&&(t.icon=u(a.value)),t})}function b(e,u=l,a={}){return{...a,...Object.fromEntries(u.flatMap(o=>[[o.label,o.label],[o.ratio,o.ratio]])),...D[e]??{}}}function C(e){const u=e.locale??"zh",a=e.platformPresets??l,o=b(u,a,e.baseTranslations),t=e.themeMode??"dark",d=t==="light"?F:m,c=d["accent-primary"],T=t==="light"?"#18181b":"#ffffff",i={fill:t==="light"?"rgba(91,91,214,0.28)":"rgba(124,124,240,0.35)",stroke:c,strokeWidth:2},n={stroke:c,strokeWidth:4},r={useBackendTranslations:!1,source:e.source,tabsIds:[...f],defaultTabId:"Adjust",defaultToolId:"Crop",Crop:{presetsItems:p(a,e.renderRatioIcon)},savingPixelRatio:e.savingPixelRatio??4,previewPixelRatio:e.previewPixelRatio??2,language:"en",translations:o,defaultSavedImageType:"jpeg",defaultSavedImageQuality:.92,defaultSavedImageName:"image",onBeforeSave:()=>!1,annotationsCommon:{fill:T},Rect:{...i},Ellipse:{...i},Polygon:{...i},Text:{fontSize:30},Line:{...n},Arrow:{...n},Pen:{...n},theme:{palette:{...d,...e.theme?.palette},typography:{fontFamily:'-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif',...e.theme?.typography}},onAnnotationAdd:A};return e.loadableDesignState!==void 0&&(r.loadableDesignState=e.loadableDesignState),e.onSave&&(r.onSave=e.onSave),e.onClose&&(r.onClose=e.onClose),r}export{E as FIE_ES,s as FIE_ZH,g as FIE_ZH_HANT,m as IMAGE_EDITOR_DARK_PALETTE,F as IMAGE_EDITOR_LIGHT_PALETTE,f as IMAGE_EDITOR_TABS,p as buildCropPresetItems,b as buildImageEditorTranslations,C as createImageEditorConfig};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var Q=Object.defineProperty,qt=Object.getOwnPropertyDescriptor,Wt=Object.getOwnPropertyNames,Yt=Object.prototype.hasOwnProperty,Xt=(t,e)=>{for(var i in e)Q(t,i,{get:e[i],enumerable:!0})},Kt=(t,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of Wt(e))!Yt.call(t,u)&&u!==i&&Q(t,u,{get:()=>e[u],enumerable:!(r=qt(e,u))||r.enumerable});return t},Jt=t=>Kt(Q({},"__esModule",{value:!0}),t),ct={};Xt(ct,{AudioClip:()=>vt,Clip:()=>ht,DEFAULT_PLATFORM_TARGETS:()=>q,DEG2RAD:()=>pt,EDITOR_MESSAGES:()=>it,FILTER_PRESETS:()=>dt,IMAGE_PLATFORM_PRESETS:()=>Me,IMAGE_RATIO_PRESETS:()=>$e,MIN_CLIP:()=>$,Overlay:()=>ft,VIDEO_PLATFORM_RATIO_PRESETS:()=>we,VIDEO_RATIO_PRESETS:()=>Te,VIDEO_SIZE_PRESETS:()=>Pe,VideoEditState:()=>oe,buildFfmpegArgs:()=>ri,buildFilterCss:()=>ee,buildImagePlatformPresets:()=>St,buildPosterArgs:()=>oi,buildVideoPlatformRatioPresets:()=>Dt,buildVideoSizePresets:()=>Ct,canRedo:()=>gt,canUndo:()=>xt,centeredMaxRect:()=>tt,clampAudioClip:()=>me,clampRect:()=>Qt,clipDuration:()=>U,clipStartsAt:()=>ae,compensateAnnotationRotation:()=>Ie,contentDuration:()=>fe,createHistory:()=>Fe,defaultVideoEditState:()=>ue,duplicateClip:()=>le,evenize:()=>M,findFilterPreset:()=>Z,fitRects:()=>te,locateOutput:()=>Ft,normalizeDeg:()=>G,outputSize:()=>et,parseRatio:()=>L,pushHistory:()=>xe,redo:()=>Ae,remapSrcIndices:()=>ve,removeClip:()=>se,reorderClips:()=>ce,replacePresent:()=>ge,rotatedSize:()=>mt,splitAtOutput:()=>ne,tEditor:()=>Be,toHant:()=>At,totalDuration:()=>bt,trimClipEdge:()=>pe,undo:()=>Ee,usedVideoSrcIndices:()=>he}),module.exports=Jt(ct);var pt=Math.PI/180;function mt(t,e,i){const r=G(i);if(r===0||r===180)return{w:t,h:e};if(r===90||r===270)return{w:e,h:t};const u=r*pt;return{w:Math.round(Math.abs(t*Math.cos(u))+Math.abs(e*Math.sin(u))),h:Math.round(Math.abs(t*Math.sin(u))+Math.abs(e*Math.cos(u)))}}function G(t){return(t%360+360)%360}function M(t){const e=Math.round(t);return e-e%2}function Qt(t,e,i=40){const r=Math.min(Math.max(i,t.width),e.w),u=Math.min(Math.max(i,t.height),e.h),a=Math.min(Math.max(0,t.x),e.w-r),n=Math.min(Math.max(0,t.y),e.h-u);return{x:Math.round(a),y:Math.round(n),width:Math.round(r),height:Math.round(u)}}function tt(t,e){let i=t.w,r=i/e;return r>t.h&&(r=t.h,i=r*e),{x:Math.round((t.w-i)/2),y:Math.round((t.h-r)/2),width:Math.round(i),height:Math.round(r)}}function te(t,e,i){const r={x:0,y:0,width:t.width,height:t.height},u={x:0,y:0,width:e.w,height:e.h};return i==="cover"?{src:tt({w:t.width,h:t.height},e.w/e.h),dst:u}:i==="contain"?{src:r,dst:tt({w:e.w,h:e.h},t.width/t.height)}:{src:r,dst:u}}function et(t,e){if(e.scale)return{w:M(e.scale.width),h:M(e.scale.height)};if(e.crop)return{w:M(e.crop.width),h:M(e.crop.height)};const i=mt(t.w,t.h,e.rotation);return{w:M(i.w),h:M(i.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 Z(t){return t?dt.find(e=>e.id===t):void 0}function ee(t,e){const i=Z(e)?.css??"";return[`brightness(${1+t.brightness})`,`contrast(${1+t.contrast})`,`saturate(${1+t.saturation})`,i].filter(Boolean).join(" ")}var o=require("zod"),_={color:o.z.string().max(32),width:o.z.number().positive().max(200)},y={rotation:o.z.number().min(-180).max(180).optional()},R={startAt:o.z.number().min(0).optional(),endAt:o.z.number().min(0).optional(),timelineTrack:o.z.number().int().min(0).max(99).optional()},ft=o.z.discriminatedUnion("type",[o.z.object({type:o.z.literal("pen"),points:o.z.array(o.z.number()).min(4),..._,...R,...y}),o.z.object({type:o.z.literal("line"),x1:o.z.number(),y1:o.z.number(),x2:o.z.number(),y2:o.z.number(),..._,...R,...y}),o.z.object({type:o.z.literal("arrow"),x1:o.z.number(),y1:o.z.number(),x2:o.z.number(),y2:o.z.number(),..._,...R,...y}),o.z.object({type:o.z.literal("rect"),x:o.z.number(),y:o.z.number(),w:o.z.number(),h:o.z.number(),..._,...R,...y}),o.z.object({type:o.z.literal("ellipse"),x:o.z.number(),y:o.z.number(),w:o.z.number(),h:o.z.number(),..._,...R,...y}),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(),...y}),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(),...y}),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(),...R,...y}),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),...R,...y})]),ht=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)}),ie=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)}),re=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(ht).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(ft).max(200).optional(),transitions:o.z.array(ie).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:re}).superRefine((t,e)=>{t.clips.forEach((i,r)=>{i.out<=i.in&&e.addIssue({code:o.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:o.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: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 ue(){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 $=.1;function U(t){return t.out-t.in}function bt(t){return t.reduce((e,i)=>e+U(i),0)}function ae(t,e){let i=0;for(let r=0;r<e&&r<t.length;r++)i+=U(t[r]);return i}function Ft(t,e){if(!t.length||e<0)return null;let i=0;for(let r=0;r<t.length;r++){const u=U(t[r]);if(e<i+u)return{idx:r,srcTime:t[r].in+(e-i)};i+=u}if(Math.abs(e-i)<1e-9||e<=i){const r=t.length-1;return{idx:r,srcTime:t[r].out}}return null}function ne(t,e){const i=Ft(t,e);if(!i)return t;const r=t[i.idx];return i.srcTime<r.in+$||i.srcTime>r.out-$?t:[...t.slice(0,i.idx),{...r,out:i.srcTime},{...r,in:i.srcTime},...t.slice(i.idx+1)]}function se(t,e){return t.length<=1||!t[e]?t:t.filter((i,r)=>r!==e)}function le(t,e){const i=t[e];return i?[...t.slice(0,e+1),{...i},...t.slice(e+1)]:t}function ce(t,e,i){if(e===i||!t[e]||i<0||i>=t.length)return t;const r=[...t],[u]=r.splice(e,1);return r.splice(i,0,u),r}function pe(t,e,i,r,u){if(!t[e])return t;const n=t.map(s=>({...s}));return i==="in"?n[e].in=Math.min(Math.max(r,0),n[e].out-$):n[e].out=Math.max(Math.min(r,u),n[e].in+$),n}function me(t,e,i){const r=Math.max(Math.min(t.out,e),$),u=Math.min(Math.max(t.in,0),r-$),a=Math.min(Math.max(t.startAt,0),Math.max(0,i-$)),n=Math.max($,r-u),s=Math.min(Math.max(Number(t.speed)||1,.5),2),c=Number.isInteger(t.track)&&t.track>=0?t.track:0,l=Math.min(Math.max(Number(t.fadeIn)||0,0),n),m=Math.min(Math.max(Number(t.fadeOut)||0,0),Math.max(0,n-l));return{...t,track:c,in:u,out:r,startAt:a,speed:s,fadeIn:l,fadeOut:m}}function de(t=[]){return(t??[]).reduce((e,i)=>{if(i?.type!=="text"&&i?.type!=="sticker")return e;const r=Number.isFinite(i?.startAt)?Math.max(0,Number(i.startAt)):0,u=Number.isFinite(i?.endAt)?Math.max(r,Number(i.endAt)):r;return Math.max(e,u)},0)}function fe(t,e=[],i=[]){const r=bt(t),u=e.reduce((n,s)=>Math.max(n,s.startAt+(s.out-s.in)),0),a=de(i);return Math.max(r,u,a)}function he(t){return[...new Set(t.map(e=>e.srcIdx))].sort((e,i)=>e-i)}function ve(t,e){const i=new Map(e.map((r,u)=>[r,u]));return t.map(r=>({...r,srcIdx:i.get(r.srcIdx)??0}))}var be=100;function Fe(t){return{past:[],present:t,future:[]}}function xe(t,e){if(e===t.present)return t;const i=[...t.past,t.present];return i.length>be&&i.shift(),{past:i,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,...i]=t.future;return{past:[...t.past,t.present],present:e,future:i}}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"},De={"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"},Se={\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[i,r]of Object.entries(Se).sort((u,a)=>a[0].length-u[0].length))e=e.replaceAll(i,r);return e},Ce=Object.fromEntries(Object.entries(Et).map(([t,e])=>[t,At(e)])),it={zh:Et,en:ze,es:De,"zh-Hant":Ce};function Be(t,e,i){let r=it[t]?.[e]??it.zh[e]??e;if(i)for(const[u,a]of Object.entries(i))r=r.replaceAll(`{${u}}`,String(a));return r}var q=[{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"}],ye={"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,i]=t.split(":").map(Number);return!e||!i?1:e/i}function zt(t){const e=new Set,i=[];for(const r of t)!r||e.has(r)||(e.add(r),i.push({ratio:r,value:L(r),label:ye[r]??r}));return i}var $e=zt(["1:1","4:5","3:4","2:3","9:16","16:9","1.91:1"]),Te=zt(["9:16","16:9","1:1","4:5"]);function Dt(t=q){const e=new Set,i=[];for(const r of t){if(!r.videoRatio)continue;const u=`${r.platform}:${r.postType}:${r.videoRatio}`;if(e.has(u))continue;e.add(u);const a=r.label.split(" ").slice(0,-1).join(" ")||r.label;i.push({platform:r.platform,postType:r.postType,label:`${a} ${r.videoRatio}`,ratio:r.videoRatio,value:L(r.videoRatio)})}return i}var we=Dt();function St(t=q){const e=new Map;for(const i of t){const r=e.get(i.platform);(!r||r.postType!=="post"&&i.postType==="post")&&e.set(i.platform,i)}return Array.from(e.values()).map(i=>{const[r,u]=i.imageSize.split("x").map(Number),a=i.label.split(" ").slice(0,-1).join(" ")||i.label;return{platform:i.platform,label:`${a} ${i.ratio}`,ratio:i.ratio,value:L(i.ratio),w:r,h:u}})}var Me=St();function Re(t,e){return t>=1?{w:Math.round(e*t/2)*2,h:e}:{w:e,h:Math.round(e/t/2)*2}}function Ct(t=q){const e=new Set,i=[];for(const r of t){if(!r.videoRatio||!r.videoResolution)continue;const u=r.videoResolution==="1080p"?1080:720,{w:a,h:n}=Re(L(r.videoRatio),u),s=`${a}x${n}`;e.has(s)||(e.add(s),i.push({label:`${r.shortLabel} ${a}\xD7${n}`,w:a,h:n}))}return i}var Pe=Ct();function Ie(t,e){if(t.isDuplicated)return{};if((t.rotation??0)!==0)return{};const i=e.adjustments?.rotation??0;return i?{rotation:-i}:{}}function Oe(t){const e=G(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 i=`${e}*PI/180`;return[`rotate=${i}:ow=rotw(${i}):oh=roth(${i}):c=black`]}function E(t){return Math.max(-1,Math.min(1,Number(t)||0))}function k(t){return Math.max(0,Math.min(1,Number(t)||0))}function Bt(t,e,i,r){const u=Math.round(Number(t));return Number.isFinite(u)?Math.min(i,Math.max(e,u)):r}function yt(t){return Math.min(Math.max(Number(t)||1,.5),2)}function _e(t){const e=[];let i=yt(t);for(;i<.5-1e-6||i>2+1e-6;)i<.5?(e.push("atempo=0.5"),i/=.5):(e.push("atempo=2"),i/=2);return Math.abs(i-1)>1e-4&&e.push(`atempo=${i.toFixed(4).replace(/0+$/,"").replace(/\.$/,"")}`),e}function P(t,e){const i=Bt(t,2,8192,e);return i%2===0?i:i-1}function I(t){return t?.exportSettings??null}function Le(t){const e=String(I(t)?.format??"mp4").toLowerCase();return e==="mov"||e==="mxf"?e:"mp4"}function $t(t){return Bt(I(t)?.frameRate,12,120,30)}function ke(t){const e=et(t.canvas,t),i=I(t);if(!i)return e;const r=Number.isFinite(Number(i.width))&&Number(i.width)>0,u=Number.isFinite(Number(i.height))&&Number(i.height)>0;if(!r&&!u)return e;const a=e.w>0&&e.h>0?e.w/e.h:1;if(r&&u)return{w:P(i.width,e.w),h:P(i.height,e.h)};if(r){const s=P(i.width,e.w);return{w:s,h:P(s/a,e.h)}}const n=P(i.height,e.h);return{w:P(n*a,e.w),h:n}}function Ne(t){const e=Number(I(t)?.videoBitrateKbps);return Number.isFinite(e)&&e>=100?Math.round(e):0}function je(t){const e=Number(I(t)?.audioBitrateKbps);return Number.isFinite(e)&&e>=32?Math.round(e):0}function Ve(t){return I(t)?.audioCodec==="mp3"?"libmp3lame":"aac"}function rt(t){return et(t.canvas,t)}function ot(t){const e=rt(t),i=ke(t);return i.w===e.w&&i.h===e.h?[]:[`scale=${i.w}:${i.h}`]}function Tt(t){const e=E(t?.brightness),i=E(t?.contrast),r=E(t?.saturation),u=E(t?.gamma);if(e===0&&i===0&&r===0&&u===0)return null;const a=[];if(e!==0||i!==0){const s=z(Math.max(0,1+e)),c=z(Math.max(0,1+i)),l=`clip(((val*${s})-128)*${c}+128,0,255)`;a.push(`lutrgb=r='${l}':g='${l}':b='${l}'`)}const n=[];return r!==0&&n.push(`saturation=${1+r}`),u!==0&&n.push(`gamma=${(1+u*(u>0?1:.5)).toFixed(3)}`),n.length&&a.push(`eq=${n.join(":")}`),a.join(",")}function z(t){return`${Math.round(t*1e3)/1e3}`}function wt(t){const e=E(t?.temperature),i=E(t?.tint);if(e===0&&i===0)return null;const r=E(e*.18+i*.08),u=E(e*.02-i*.12),a=E(-e*.18+i*.08);return`colorbalance=rs=${z(r)}:gs=${z(u)}:bs=${z(a)}`}function Mt(t){const e=E(t?.vibrance);return e===0?null:`vibrance=intensity=${z(e)}`}function O(t,e,i){if(t===e)return i<t?0:1;const r=Math.max(0,Math.min(1,(i-t)/(e-t)));return r*r*(3-2*r)}function He(t){const e=O(.08,.4,t),i=1-O(.6,.92,t);return Math.max(0,Math.min(1,e*i*2.2))}function Ge(t,e){const i=1-O(.18,.62,t),r=1-O(.04,.32,t),u=O(.38,.84,t),a=O(.7,.98,t),n=He(t),s=e.shadows*i*.28+e.highlights*u*.24+e.blacks*r*.2+e.whites*a*.2+e.lightSense*n*.18+e.fade*(.12+i*.06);return Math.max(0,Math.min(1,t+s))}function Rt(t){const e={highlights:E(t?.highlights),shadows:E(t?.shadows),whites:E(t?.whites),blacks:E(t?.blacks),lightSense:E(t?.lightSense),fade:k(t?.fade)};return Object.values(e).some(u=>Math.abs(u)>1e-4)?`curves=master='${[0,.18,.36,.5,.68,.84,1].map(u=>`${z(u)}/${z(Ge(u,e))}`).join(" ")}'`:null}function Pt(t){const e=[],i=k(t?.clarity),r=k(t?.sharpen);return i>1e-4&&e.push(`unsharp=lx=7:ly=7:la=${z(i*1.8)}:cx=7:cy=7:ca=0`),r>1e-4&&e.push(`unsharp=lx=3:ly=3:la=${z(.35+r*2.1)}:cx=3:cy=3:ca=${z(r*.55)}`),e}function It(t){const e=k(t?.grain);return e<=1e-4?null:`noise=alls=${Math.round(6+e*26)}:allf=t`}function Ot(t){const e=k(t?.vignette);if(e<=1e-4)return null;const i=Math.max(.12,.42-e*.22);return`vignette=angle=${z(i)}*PI`}function ut(t,e={}){const i=[];if(t.flipX&&i.push("hflip"),t.flipY&&i.push("vflip"),i.push(...Oe(t.rotation)),t.crop){const{x:h,y:v,width:g,height:D}=t.crop;i.push(`crop=${g}:${D}:${h}:${v}`)}if(t.scale){const{width:h,height:v,fit:g}=t.scale;g==="force"?i.push(`scale=${h}:${v}`):g==="cover"?i.push(`scale=${h}:${v}:force_original_aspect_ratio=increase`,`crop=${h}:${v}`):i.push(`scale=${h}:${v}:force_original_aspect_ratio=decrease`,`pad=${h}:${v}:(ow-iw)/2:(oh-ih)/2`)}const r=Tt(t.filters);r&&i.push(r);const u=wt(t.filters);u&&i.push(u);const a=Mt(t.filters);a&&i.push(a);const n=Rt(t.filters);n&&i.push(n),i.push(...Pt(t.filters));const s=It(t.filters);s&&i.push(s);const c=Ot(t.filters);c&&i.push(c);const l=Z(t.filterPreset);return l&&i.push(l.vf),e.includeExportScale!==!1&&i.push(...ot(t)),i.push(`fps=${$t(t)}`),G(t.rotation)%90!==0&&!t.scale&&i.push("scale=trunc(iw/2)*2:trunc(ih/2)*2"),i}var _t={fade:"fade",slide:"slideleft",wipe:"wipeleft",flip:"horzopen",clockWipe:"radial",star:"pixelize",circle:"circleopen",rectangle:"rectcrop"},Ze={fade:"qsin",slide:"tri",wipe:"tri",flip:"exp",clockWipe:"qsin",star:"tri",circle:"qsin",rectangle:"qsin"};function N(t){return t.out-t.in}function Lt(t,e,i){const r=t&&typeof t.type=="string"?t.type:"none",u=_t[r]?r:"none",a=Math.max(0,Math.min(1.2,e-.05,i-.05));if(u==="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:u,duration:s,effect:_t[u],curve:Ze[u]??"tri"}}function Ue(t,e){if(!Array.isArray(e)||e.length<2)return!1;for(let i=0;i<e.length-1;i++){const r=Lt(t?.[i],N(e[i]),N(e[i+1]));if(r.type!=="none"&&r.duration>0)return!0}return!1}function qe(t,e){const i=[];let r=0;for(let u=0;u<t.length-1;u++){const a=Lt(e?.[u],N(t[u]),N(t[u+1]));a.type!=="none"&&a.duration>0&&(i.push({start:r,end:u,transition:a}),r=u+1)}return i.push({start:r,end:t.length-1,transition:null}),i}function We(t,e,i){let r=0;for(let u=e;u<=i;u++)r+=N(t[u]);return r}function Ye(t,e,i,r){const a=qe(e,i).map((l,m)=>{const h=We(e,l.start,l.end);if(l.start===l.end)return{vLabel:`[v${l.start}]`,aLabel:r?`[a${l.start}]`:"",duration:h,transition:l.transition};const v=[];for(let A=l.start;A<=l.end;A++)v.push(r?`[v${A}][a${A}]`:`[v${A}]`);const g=`[sgv${m}]`,D=r?`[sga${m}]`:"";return t.push(`${v.join("")}concat=n=${l.end-l.start+1}:v=1:a=${r?1:0}${r?`${g}${D}`:g}`),{vLabel:g,aLabel:D,duration:h,transition:l.transition}});let n=a[0].vLabel,s=r?a[0].aLabel:"",c=a[0].duration;for(let l=1;l<a.length;l++){const m=a[l-1].transition,h=a[l],v=`[vx${l}]`,g=Math.max(0,c-m.duration);if(t.push(`${n}${h.vLabel}xfade=transition=${m.effect}:duration=${m.duration}:offset=${g}${v}`),n=v,r){const D=`[ax${l}]`;t.push(`${s}${h.aLabel}acrossfade=d=${m.duration}:c1=${m.curve}:c2=${m.curve}${D}`),s=D}c=c+h.duration-m.duration}return{vLabel:n,aLabel:s,duration:c}}function at(t,e){const i=Le(e),r=i==="mxf"?["-c:v","mpeg2video","-pix_fmt","yuv422p"]:["-c:v","libx264","-preset","veryfast","-pix_fmt","yuv420p","-movflags","+faststart"],u=Ne(e);if(u>0?r.push("-b:v",`${u}k`,"-maxrate",`${u}k`,"-bufsize",`${Math.max(u*2,512)}k`):i==="mxf"&&r.push("-q:v","2"),t)if(i==="mxf")r.push("-c:a","pcm_s16le");else{r.push("-c:a",Ve(e));const a=je(e);a>0&&r.push("-b:a",`${a}k`)}return i==="mxf"&&r.push("-f","mxf"),r}var W="aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo",kt="anullsrc=r=44100:cl=stereo";function Nt(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 Xe="alimiter=limit=0.95:level=disabled:latency=1",Ke=3,Je=.5;function jt(t,e=0){const i=Math.max(e,Math.floor(Number(t)||0));return i%2===0?i:i-1}function Qe(t){const e=Number.isFinite(t?.startAt)?Math.max(0,Number(t.startAt)):0,i=Number(t?.endAt);return Number.isFinite(i)?{startAt:e,endAt:Math.max(e+Je,i)}:{startAt:e,endAt:e+Ke}}function ti(t,e){const i=Math.max(2,jt(e.w,2)),r=Math.max(2,jt(e.h,2));return!(i>1)||!(r>1)?null:{x:0,y:0,w:i,h:r}}function ei(t){if(t?.type==="filter"){const c=Z(t.filterPreset);return c?[c.vf]:[]}if(t?.type!=="adjust")return[];const e=[],i=Tt(t);i&&e.push(i);const r=wt(t);r&&e.push(r);const u=Mt(t);u&&e.push(u);const a=Rt(t);a&&e.push(a),e.push(...Pt(t));const n=It(t);n&&e.push(n);const s=Ot(t);return s&&e.push(s),e}function Vt(t,e){const i=[];for(const r of t??[]){if(r?.type!=="filter"&&r?.type!=="adjust")continue;const u=ti(r,e);if(!u)continue;const a=ei(r);a.length&&i.push({rect:u,filters:a,...Qe(r)})}return i}function Ht(t,e=1/0){const i=[];for(const r of t??[]){if(r?.type!=="pen"&&r?.type!=="line"&&r?.type!=="arrow"&&r?.type!=="rect"&&r?.type!=="ellipse"&&r?.type!=="text"&&r?.type!=="sticker")continue;const u=Number(r.startAt),a=Number(r.endAt);if(!(!Number.isFinite(u)||!Number.isFinite(a)||a<=u)&&(i.push({startAt:Math.max(0,u),endAt:Math.max(u+.01,a)}),i.length>=e))break}return i}function Gt(t,e,i,r){let u=e;return r.forEach((a,n)=>{const s=`[vtxt${i+n}]`;t.push(`${u}[${i+n}:v]overlay=0:0:enable='between(t,${a.startAt.toFixed(3)},${a.endAt.toFixed(3)})'${s}`),u=s}),u}function Zt(t,e,i){let r=e;return i.forEach((u,a)=>{const n=`[vfxsrc${a}]`,s=`[vfxbase${a}]`,c=`[vfxcrop${a}]`,l=`[vfx${a}]`,{rect:m}=u;t.push(`${r}split=2${n}${s}`),t.push(`${n}crop=${m.w}:${m.h}:${m.x}:${m.y},${u.filters.join(",")}${c}`),t.push(`${s}${c}overlay=${m.x}:${m.y}:enable='between(t,${u.startAt.toFixed(3)},${u.endAt.toFixed(3)})'${l}`),r=l}),r}function ii(t,e,i,r,u,a=[]){const n=ut(t,{includeExportScale:!1}),s=t.clips,c=t.keepAudio&&u,l=s.length>=2,m=Vt(t.overlays,rt(t)),h=Ht(t.overlays,a.length),v=a.slice(0,h.length);if(l||r||v.length||m.length){const x=[];let d;if(l){s.forEach((S,B)=>{x.push(`[0:v]trim=start=${S.in}:end=${S.out},setpts=PTS-STARTPTS[v${B}]`),c&&x.push(`[0:a]atrim=start=${S.in}:end=${S.out},asetpts=PTS-STARTPTS${Nt(S.out-S.in)}[a${B}]`)});const b=s.map((S,B)=>c?`[v${B}][a${B}]`:`[v${B}]`).join(""),T=c?"[vcat][acat]":"[vcat]";x.push(`${b}concat=n=${s.length}:v=1:a=${c?1:0}${T}`),d="[vcat]"}else d="[0:v]";if(n.length&&(x.push(`${d}${n.join(",")}[vflt]`),d="[vflt]"),m.length&&(d=Zt(x,d,m)),r?(x.push(`${d}[1:v]overlay=0:0[vout]`),d="[vout]"):d==="[0:v]"&&(x.push("[0:v]null[vout]"),d="[vout]"),v.length){const b=1+(r?1:0);d=Gt(x,d,b,h)}const j=ot(t);j.length&&(x.push(`${d}${j.join(",")}[vscaled]`),d="[vscaled]");const V=[];!l&&s.length===1&&V.push("-ss",String(s[0].in),"-t",String(s[0].out-s[0].in));const f=["-y",...V,"-i",e];r&&f.push("-i",r);for(const b of v)f.push("-i",b);return f.push("-filter_complex",x.join(";"),"-map",d),c&&f.push("-map",l?"[acat]":"0:a?"),f.push(...at(c,t)),f.push(i),f}const g=ut(t),A=["-y",...["-ss",String(s[0].in),"-t",String(s[0].out-s[0].in)],"-i",e];return g.length&&A.push("-vf",g.join(",")),c||A.push("-an"),A.push(...at(c,t)),A.push(i),A}function ri(t,e,i){const{videoPaths:r,videoHasAudio:u,audioPaths:a,overlayPath:n,textOverlayPaths:s=[]}=e,c=t.audioClips??[],l=Ue(t.transitions,t.clips),m=Ht(t.overlays,s.length),h=s.slice(0,m.length);if(r.length===1&&c.length===0&&!l)return ii(t,r[0],i,n,u[0]??!1,h);const v=r.length,g=a.length,D=t.canvas.w,A=t.canvas.h,x=t.clips,d=t.keepAudio&&x.some(p=>u[p.srcIdx]),j=$t(t),V=x.reduce((p,F)=>p+(F.out-F.in),0),f=[];x.forEach((p,F)=>{f.push(`[${p.srcIdx}:v]trim=start=${p.in}:end=${p.out},setpts=PTS-STARTPTS,scale=${D}:${A}:force_original_aspect_ratio=increase,crop=${D}:${A},setsar=1,fps=${j},format=yuv420p[v${F}]`),d&&(u[p.srcIdx]?f.push(`[${p.srcIdx}:a]atrim=start=${p.in}:end=${p.out},asetpts=PTS-STARTPTS${Nt(p.out-p.in)},${W}[a${F}]`):f.push(`${kt},atrim=start=0:end=${p.out-p.in},asetpts=PTS-STARTPTS,${W}[a${F}]`))});let b="[vcat]",T=d?"[acat]":"",S=V;if(l){const p=Ye(f,x,t.transitions??[],d);b=p.vLabel,T=d?p.aLabel:"",S=p.duration}else{const p=x.map((F,w)=>d?`[v${w}][a${w}]`:`[v${w}]`).join("");f.push(`${p}concat=n=${x.length}:v=1:a=${d?1:0}${d?"[vcat][acat]":"[vcat]"}`)}if(!d&&c.length&&(f.push(`${kt},atrim=start=0:end=${S},asetpts=PTS-STARTPTS,${W}[acat]`),T="[acat]"),c.length){c.forEach((F,w)=>{const lt=Math.max(0,Math.round(F.startAt*1e3)),X=Math.max(0,F.out-F.in),Ut=yt(F.speed),K=Math.min(Math.max(Number(F.fadeIn)||0,0),X),J=Math.min(Math.max(Number(F.fadeOut)||0,0),Math.max(0,X-K)),H=[`atrim=start=${F.in}:end=${F.out}`,"asetpts=PTS-STARTPTS",..._e(Ut),`volume=${F.volume}`];K>1e-4&&H.push(`afade=t=in:st=0:d=${K}`),J>1e-4&&H.push(`afade=t=out:st=${Math.max(0,X-J)}:d=${J}`),H.push(W,`adelay=${lt}|${lt}`),f.push(`[${v+w}:a]${H.join(",")}[mu${w}]`)});const p=`${T}${c.map((F,w)=>`[mu${w}]`).join("")}`;f.push(`${p}amix=inputs=${1+c.length}:duration=first:dropout_transition=0:normalize=0,${Xe}[aout]`),T="[aout]"}const B=ut(t,{includeExportScale:!1}),nt=Vt(t.overlays,rt(t));if(B.length&&(f.push(`${b}${B.join(",")}[vflt]`),b="[vflt]"),nt.length&&(b=Zt(f,b,nt)),n&&(f.push(`${b}[${v+g}:v]overlay=0:0[vout]`),b="[vout]"),h.length){const p=v+g+(n?1:0);b=Gt(f,b,p,m)}const st=ot(t);st.length&&(f.push(`${b}${st.join(",")}[vscaled]`),b="[vscaled]");const C=["-y"];for(const p of r)C.push("-i",p);for(const p of a)C.push("-i",p);n&&C.push("-i",n);for(const p of h)C.push("-i",p);C.push("-filter_complex",f.join(";"),"-map",b);const Y=!!T;return Y&&C.push("-map",T),C.push(...at(Y,t)),Y&&C.push("-ar","44100","-ac","2"),C.push(i),C}function oi(t,e,i){return["-y","-ss",String(e),"-i",t,"-frames:v","1","-q:v","2",i]}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { A as AudioClipT, C as ClipT, V as VideoEditStateT } from './state-B85vkf7_.js';
|
|
2
|
+
export { a as AudioClip, b as Clip, c as Overlay, O as OverlayT, d as VideoEditState, e as defaultVideoEditState } from './state-B85vkf7_.js';
|
|
3
|
+
export { D as DEFAULT_PLATFORM_TARGETS, a as EDITOR_MESSAGES, E as EditorLocale, I as IMAGE_PLATFORM_PRESETS, b as IMAGE_RATIO_PRESETS, P as PlatformPreset, c as PlatformTarget, R as RatioPreset, S as SizePreset, V as VIDEO_PLATFORM_RATIO_PRESETS, d as VIDEO_RATIO_PRESETS, e as VIDEO_SIZE_PRESETS, f as VideoPlatformRatioPreset, g as buildImagePlatformPresets, h as buildVideoPlatformRatioPresets, i as buildVideoSizePresets, p as parseRatio, t as tEditor, j as toHant } from './platform-presets-B-o4C6uY.js';
|
|
4
|
+
import 'zod';
|
|
5
|
+
|
|
6
|
+
type TransitionT = {
|
|
7
|
+
type: 'none' | 'fade' | 'slide' | 'wipe' | 'flip' | 'clockWipe' | 'star' | 'circle' | 'rectangle';
|
|
8
|
+
duration: number;
|
|
9
|
+
};
|
|
10
|
+
type VideoEditStateWithTransitions = VideoEditStateT & {
|
|
11
|
+
transitions?: TransitionT[];
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* editor-core/timeline v2 —— 输出时间轴纯函数(多素材 clips/audioClips 操作)。
|
|
16
|
+
* 从 UI 抽出,Vue/React 壳共用;全部不可变(返回新数组)。
|
|
17
|
+
*
|
|
18
|
+
* 模型:clips 数组顺序 = 输出拼接顺序;输出时间轴 x = Σ前序片段时长。
|
|
19
|
+
* 所有 "t" 参数除特别说明外都是**输出时间**;trimClipEdge 的 srcT 是源时间。
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
declare const MIN_CLIP = 0.1;
|
|
23
|
+
/** 片段时长 */
|
|
24
|
+
declare function clipDuration(c: ClipT): number;
|
|
25
|
+
/** 输出总时长 */
|
|
26
|
+
declare function totalDuration(clips: ClipT[]): number;
|
|
27
|
+
/** 第 idx 个片段在输出时间轴上的起点(前缀和) */
|
|
28
|
+
declare function clipStartsAt(clips: ClipT[], idx: number): number;
|
|
29
|
+
/**
|
|
30
|
+
* 输出时间 t → 所属片段与源内时刻。
|
|
31
|
+
* 交界时刻归后段(前段已播完);t === total 归末段(srcTime = out);
|
|
32
|
+
* t 越界或 clips 为空返回 null。
|
|
33
|
+
*/
|
|
34
|
+
declare function locateOutput(clips: ClipT[], t: number): {
|
|
35
|
+
idx: number;
|
|
36
|
+
srcTime: number;
|
|
37
|
+
} | null;
|
|
38
|
+
/** 在输出时刻 t 处把所属片段一分为二;距两端 <MIN_CLIP 返回原数组 */
|
|
39
|
+
declare function splitAtOutput(clips: ClipT[], t: number): ClipT[];
|
|
40
|
+
/** 删除第 idx 个片段;只剩一段时不可删,返回原数组 */
|
|
41
|
+
declare function removeClip(clips: ClipT[], idx: number): ClipT[];
|
|
42
|
+
/** 复制第 idx 个片段,插到原段之后 */
|
|
43
|
+
declare function duplicateClip(clips: ClipT[], idx: number): ClipT[];
|
|
44
|
+
/** 拖拽重排:把第 from 段移动到第 to 位 */
|
|
45
|
+
declare function reorderClips(clips: ClipT[], from: number, to: number): ClipT[];
|
|
46
|
+
/**
|
|
47
|
+
* 拖片段把手:把第 idx 段的 in/out 改到源时刻 srcT。
|
|
48
|
+
* in 钳 [0, out-MIN_CLIP];out 钳 [in+MIN_CLIP, srcDuration]。
|
|
49
|
+
*/
|
|
50
|
+
declare function trimClipEdge(clips: ClipT[], idx: number, edge: 'in' | 'out', srcT: number, srcDuration: number): ClipT[];
|
|
51
|
+
/**
|
|
52
|
+
* 音乐片段钳制:in/out 在源时长内且 out-in≥MIN_CLIP;
|
|
53
|
+
* startAt ∈ [0, max(0, total-MIN_CLIP)] —— 允许尾部悬出输出末尾(导出 amix duration=first 截断)。
|
|
54
|
+
*/
|
|
55
|
+
declare function clampAudioClip(a: AudioClipT, srcDuration: number, total: number): AudioClipT;
|
|
56
|
+
/**
|
|
57
|
+
* 时间轴内容时长 = max(视频总长, 音乐悬出末端)。
|
|
58
|
+
* 用于内容宽度/适应缩放/标尺——音乐尾部悬出视频末尾时也要看得见;
|
|
59
|
+
* 播放头/seek 仍以视频总长为界(导出 amix duration=first 同语义)。
|
|
60
|
+
*/
|
|
61
|
+
declare function contentDuration(clips: ClipT[], audioClips?: AudioClipT[]): number;
|
|
62
|
+
/** clips 实际引用到的视频源序号(升序去重)——导出前压缩上传用 */
|
|
63
|
+
declare function usedVideoSrcIndices(clips: ClipT[]): number[];
|
|
64
|
+
/** 把 clips 的 srcIdx 重映射为 used 中的序号(与压缩后的上传文件序对齐) */
|
|
65
|
+
declare function remapSrcIndices(clips: ClipT[], used: number[]): ClipT[];
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* editor-core/ffmpeg-args v2 —— VideoEditState → FFmpeg 参数(纯函数,服务端执行)。
|
|
69
|
+
* 安全:只接受结构化 state + 服务端落盘的文件路径数组;文件内容不进命令行。
|
|
70
|
+
*
|
|
71
|
+
* 多素材模型:clips 数组序 = 输出拼接序;每片段先归一到画布
|
|
72
|
+
* (cover 居中裁剪 + setsar=1 + fps=30 + format=yuv420p,防 concat 流参数不齐),
|
|
73
|
+
* concat 后过全局画面链(flips → rotate → crop → scale → eq → 预设滤镜),最后 overlay。
|
|
74
|
+
* 音频:原声(keepAudio,无音轨源用 anullsrc 补齐) concat → 与音乐(atrim+volume+adelay)
|
|
75
|
+
* amix=duration=first(锚定视频长):normalize=0(不自动衰减)。
|
|
76
|
+
*
|
|
77
|
+
* 单视频源且无音乐时走 v1 快路径(-ss/-t 或单输入 filter_complex),隔离回归面。
|
|
78
|
+
*/
|
|
79
|
+
|
|
80
|
+
/** 服务端按 srcIdx 顺序落盘后的路径与探测结果 */
|
|
81
|
+
interface FfmpegIo {
|
|
82
|
+
/** index 与 clip.srcIdx 对齐(客户端导出前已压缩重映射) */
|
|
83
|
+
videoPaths: string[];
|
|
84
|
+
/** 与 videoPaths 等长,probeHasAudio 结果 */
|
|
85
|
+
videoHasAudio: boolean[];
|
|
86
|
+
/** index 与 audioClip.srcIdx 对齐 */
|
|
87
|
+
audioPaths: string[];
|
|
88
|
+
overlayPath?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* v2 主入口:多视频源 concat + 音乐 amix + 全局链 + overlay。
|
|
92
|
+
* 输入序:视频 0..N-1 → 音乐 N..N+M-1 → overlay N+M。
|
|
93
|
+
*/
|
|
94
|
+
declare function buildFfmpegArgs(state: VideoEditStateWithTransitions, io: FfmpegIo, output: string): string[];
|
|
95
|
+
/** 封面帧:在 time 处抽 1 帧 jpg */
|
|
96
|
+
declare function buildPosterArgs(input: string, time: number, output: string): string[];
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* editor-core/transform —— 旋转/坐标换算纯函数。
|
|
100
|
+
* 与 ffmpeg 的 rotw/roth 同公式,保证预览画布与导出尺寸一致。
|
|
101
|
+
*/
|
|
102
|
+
declare const DEG2RAD: number;
|
|
103
|
+
/** 旋转 deg 度后的外接框尺寸(= ffmpeg rotate 滤镜 ow=rotw/oh=roth) */
|
|
104
|
+
declare function rotatedSize(w: number, h: number, deg: number): {
|
|
105
|
+
w: number;
|
|
106
|
+
h: number;
|
|
107
|
+
};
|
|
108
|
+
/** 角度归一化到 [0,360) */
|
|
109
|
+
declare function normalizeDeg(deg: number): number;
|
|
110
|
+
/** h264 偶数像素对齐 */
|
|
111
|
+
declare function evenize(n: number): number;
|
|
112
|
+
/** 把 rect 钳制在 bounds 内(裁剪框拖拽用) */
|
|
113
|
+
declare function clampRect(rect: {
|
|
114
|
+
x: number;
|
|
115
|
+
y: number;
|
|
116
|
+
width: number;
|
|
117
|
+
height: number;
|
|
118
|
+
}, bounds: {
|
|
119
|
+
w: number;
|
|
120
|
+
h: number;
|
|
121
|
+
}, minSize?: number): {
|
|
122
|
+
x: number;
|
|
123
|
+
y: number;
|
|
124
|
+
width: number;
|
|
125
|
+
height: number;
|
|
126
|
+
};
|
|
127
|
+
/** 给定纵横比,在 bounds 内求居中最大 rect(比例预设落框用) */
|
|
128
|
+
declare function centeredMaxRect(bounds: {
|
|
129
|
+
w: number;
|
|
130
|
+
h: number;
|
|
131
|
+
}, aspect: number): {
|
|
132
|
+
x: number;
|
|
133
|
+
y: number;
|
|
134
|
+
width: number;
|
|
135
|
+
height: number;
|
|
136
|
+
};
|
|
137
|
+
type FitMode = 'cover' | 'contain' | 'force';
|
|
138
|
+
/**
|
|
139
|
+
* scale 的 fit 语义 → 源/目标矩形对(预览画布与 ffmpeg 严格同语义):
|
|
140
|
+
* - cover:源侧取目标比例的居中最大区(= ffmpeg scale:force_original_aspect_ratio=increase + 居中 crop),不变形
|
|
141
|
+
* - contain:目标侧居中留黑边(= ffmpeg scale:decrease + pad)
|
|
142
|
+
* - force:双全幅拉伸(= ffmpeg scale=W:H)
|
|
143
|
+
* src 坐标相对 crop 区原点;dst 坐标相对输出原点。
|
|
144
|
+
*/
|
|
145
|
+
declare function fitRects(crop: {
|
|
146
|
+
width: number;
|
|
147
|
+
height: number;
|
|
148
|
+
}, out: {
|
|
149
|
+
w: number;
|
|
150
|
+
h: number;
|
|
151
|
+
}, fit: FitMode): {
|
|
152
|
+
src: {
|
|
153
|
+
x: number;
|
|
154
|
+
y: number;
|
|
155
|
+
width: number;
|
|
156
|
+
height: number;
|
|
157
|
+
};
|
|
158
|
+
dst: {
|
|
159
|
+
x: number;
|
|
160
|
+
y: number;
|
|
161
|
+
width: number;
|
|
162
|
+
height: number;
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
/** 导出产物的最终输出尺寸(决定 overlay PNG 的分辨率) */
|
|
166
|
+
declare function outputSize(source: {
|
|
167
|
+
w: number;
|
|
168
|
+
h: number;
|
|
169
|
+
}, state: {
|
|
170
|
+
rotation: number;
|
|
171
|
+
crop?: {
|
|
172
|
+
width: number;
|
|
173
|
+
height: number;
|
|
174
|
+
} | undefined;
|
|
175
|
+
scale?: {
|
|
176
|
+
width: number;
|
|
177
|
+
height: number;
|
|
178
|
+
} | undefined;
|
|
179
|
+
}): {
|
|
180
|
+
w: number;
|
|
181
|
+
h: number;
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* editor-core/filters —— 预设滤镜表(数据驱动)。
|
|
186
|
+
* vf = ffmpeg 滤镜片段(导出真值);css = 浏览器预览近似。
|
|
187
|
+
* 全部使用 ffmpeg-static 6.x 标配滤镜(hue/eq/colorbalance/colorchannelmixer)。
|
|
188
|
+
*/
|
|
189
|
+
interface FilterPreset {
|
|
190
|
+
id: string;
|
|
191
|
+
label: string;
|
|
192
|
+
vf: string;
|
|
193
|
+
css: string;
|
|
194
|
+
}
|
|
195
|
+
declare const FILTER_PRESETS: FilterPreset[];
|
|
196
|
+
declare function findFilterPreset(id: string | undefined): FilterPreset | undefined;
|
|
197
|
+
/**
|
|
198
|
+
* 拼出 canvas/CSS 用的 filter 字符串(预览与帧合成共用)。
|
|
199
|
+
* brightness/contrast/saturation 来自手调 [-1,1] → 1+v;叠加预设 css。
|
|
200
|
+
* gamma 无 CSS 等价(仅 ffmpeg 导出生效),此处不含。
|
|
201
|
+
*/
|
|
202
|
+
declare function buildFilterCss(filters: {
|
|
203
|
+
brightness: number;
|
|
204
|
+
contrast: number;
|
|
205
|
+
saturation: number;
|
|
206
|
+
temperature: number;
|
|
207
|
+
tint: number;
|
|
208
|
+
vibrance: number;
|
|
209
|
+
gamma: number;
|
|
210
|
+
highlights: number;
|
|
211
|
+
shadows: number;
|
|
212
|
+
whites: number;
|
|
213
|
+
blacks: number;
|
|
214
|
+
lightSense: number;
|
|
215
|
+
sharpen: number;
|
|
216
|
+
clarity: number;
|
|
217
|
+
grain: number;
|
|
218
|
+
fade: number;
|
|
219
|
+
vignette: number;
|
|
220
|
+
}, presetId?: string): string;
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* editor-core/history —— 不可变快照 undo/redo 栈(纯函数)。
|
|
224
|
+
* 泛型,对 EditState 的 JSON 快照工作;壳层(React/Vue)只持有 History<T> 并 set 回去。
|
|
225
|
+
*/
|
|
226
|
+
interface History<T> {
|
|
227
|
+
past: T[];
|
|
228
|
+
present: T;
|
|
229
|
+
future: T[];
|
|
230
|
+
}
|
|
231
|
+
declare function createHistory<T>(initial: T): History<T>;
|
|
232
|
+
/** 写入新状态(清空 redo 栈);浅比较相同引用则原样返回 */
|
|
233
|
+
declare function pushHistory<T>(h: History<T>, next: T): History<T>;
|
|
234
|
+
/**
|
|
235
|
+
* 替换当前态但不入栈(高频拖拽的中间帧用):
|
|
236
|
+
* 拖动过程 replacePresent 持续刷新,pointerup 时再 pushHistory 定格一步。
|
|
237
|
+
*/
|
|
238
|
+
declare function replacePresent<T>(h: History<T>, next: T): History<T>;
|
|
239
|
+
declare function canUndo<T>(h: History<T>): boolean;
|
|
240
|
+
declare function canRedo<T>(h: History<T>): boolean;
|
|
241
|
+
declare function undo<T>(h: History<T>): History<T>;
|
|
242
|
+
declare function redo<T>(h: History<T>): History<T>;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Filerobot 图片编辑器的标注旋转补偿(纯函数,供 ImageEditor 注入 config.onAnnotationAdd)。
|
|
246
|
+
*
|
|
247
|
+
* 背景:Filerobot 把 rotation 加在整个 Konva DesignLayer 上(DesignLayerWrapper),
|
|
248
|
+
* 新标注挂进同一层会继承父层旋转 → 旋转图片后再贴文字,文字方向跟着转。
|
|
249
|
+
* onAnnotationAdd 是 5.0.0-beta.159 真实存在但未写进 index.d.ts 的 config 钩子:
|
|
250
|
+
* 源码 lib/actions/setAnnotation.js 在「新建标注」时调用 (annotation, 全量state),
|
|
251
|
+
* 把返回的 partial 合并进标注 —— 这里给新标注反向初始 rotation,与父层旋转叠加后视觉正向。
|
|
252
|
+
*/
|
|
253
|
+
declare function compensateAnnotationRotation(ann: {
|
|
254
|
+
rotation?: number;
|
|
255
|
+
isDuplicated?: boolean;
|
|
256
|
+
}, state: {
|
|
257
|
+
adjustments?: {
|
|
258
|
+
rotation?: number;
|
|
259
|
+
};
|
|
260
|
+
}): {
|
|
261
|
+
rotation?: number;
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
export { AudioClipT, ClipT, DEG2RAD, FILTER_PRESETS, type FfmpegIo, type FilterPreset, type FitMode, type History, MIN_CLIP, TransitionT, VideoEditStateT, VideoEditStateWithTransitions, buildFfmpegArgs, buildFilterCss, buildPosterArgs, canRedo, canUndo, centeredMaxRect, clampAudioClip, clampRect, clipDuration, clipStartsAt, compensateAnnotationRotation, contentDuration, createHistory, duplicateClip, evenize, findFilterPreset, fitRects, locateOutput, normalizeDeg, outputSize, pushHistory, redo, remapSrcIndices, removeClip, reorderClips, replacePresent, rotatedSize, splitAtOutput, totalDuration, trimClipEdge, undo, usedVideoSrcIndices };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{findFilterPreset as X,normalizeDeg as Y,outputSize as Z}from"./chunk-USY6UDGL.js";import{DEG2RAD as Bt,FILTER_PRESETS as Ut,buildFilterCss as Gt,centeredMaxRect as Kt,clampRect as Ht,evenize as Xt,findFilterPreset as Yt,fitRects as Zt,normalizeDeg as Jt,outputSize as Qt,rotatedSize as te}from"./chunk-USY6UDGL.js";import{AudioClip as ne,Clip as ie,MIN_CLIP as re,Overlay as se,VideoEditState as oe,canRedo as ae,canUndo as ce,clampAudioClip as ue,clipDuration as le,clipStartsAt as fe,contentDuration as he,createHistory as pe,defaultVideoEditState as me,duplicateClip as $e,locateOutput as de,pushHistory as ve,redo as ge,remapSrcIndices as be,removeClip as xe,reorderClips as Se,replacePresent as Te,splitAtOutput as Ae,totalDuration as Me,trimClipEdge as Ee,undo as Fe,usedVideoSrcIndices as ye}from"./chunk-MGKYVYOH.js";import{DEFAULT_PLATFORM_TARGETS as _e,EDITOR_MESSAGES as we,IMAGE_PLATFORM_PRESETS as Oe,IMAGE_RATIO_PRESETS as Re,VIDEO_PLATFORM_RATIO_PRESETS as Ne,VIDEO_RATIO_PRESETS as Ie,VIDEO_SIZE_PRESETS as Le,buildImagePlatformPresets as De,buildVideoPlatformRatioPresets as Ce,buildVideoSizePresets as je,compensateAnnotationRotation as ze,parseRatio as Ve,tEditor as ke,toHant as qe}from"./chunk-XCBM7P7N.js";function gt(t){const e=Y(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 n=`${e}*PI/180`;return[`rotate=${n}:ow=rotw(${n}):oh=roth(${n}):c=black`]}function x(t){return Math.max(-1,Math.min(1,Number(t)||0))}function R(t){return Math.max(0,Math.min(1,Number(t)||0))}function J(t,e,n,i){const r=Math.round(Number(t));return Number.isFinite(r)?Math.min(n,Math.max(e,r)):i}function Q(t){return Math.min(Math.max(Number(t)||1,.5),2)}function bt(t){const e=[];let n=Q(t);for(;n<.5-1e-6||n>2+1e-6;)n<.5?(e.push("atempo=0.5"),n/=.5):(e.push("atempo=2"),n/=2);return Math.abs(n-1)>1e-4&&e.push(`atempo=${n.toFixed(4).replace(/0+$/,"").replace(/\.$/,"")}`),e}function _(t,e){const n=J(t,2,8192,e);return n%2===0?n:n-1}function w(t){return t?.exportSettings??null}function xt(t){const e=String(w(t)?.format??"mp4").toLowerCase();return e==="mov"||e==="mxf"?e:"mp4"}function tt(t){return J(w(t)?.frameRate,12,120,30)}function St(t){const e=Z(t.canvas,t),n=w(t);if(!n)return e;const i=Number.isFinite(Number(n.width))&&Number(n.width)>0,r=Number.isFinite(Number(n.height))&&Number(n.height)>0;if(!i&&!r)return e;const s=e.w>0&&e.h>0?e.w/e.h:1;if(i&&r)return{w:_(n.width,e.w),h:_(n.height,e.h)};if(i){const o=_(n.width,e.w);return{w:o,h:_(o/s,e.h)}}const a=_(n.height,e.h);return{w:_(a*s,e.w),h:a}}function Tt(t){const e=Number(w(t)?.videoBitrateKbps);return Number.isFinite(e)&&e>=100?Math.round(e):0}function At(t){const e=Number(w(t)?.audioBitrateKbps);return Number.isFinite(e)&&e>=32?Math.round(e):0}function Mt(t){return w(t)?.audioCodec==="mp3"?"libmp3lame":"aac"}function q(t){return Z(t.canvas,t)}function W(t){const e=q(t),n=St(t);return n.w===e.w&&n.h===e.h?[]:[`scale=${n.w}:${n.h}`]}function et(t){const e=x(t?.brightness),n=x(t?.contrast),i=x(t?.saturation),r=x(t?.gamma);if(e===0&&n===0&&i===0&&r===0)return null;const s=[];if(e!==0||n!==0){const o=T(Math.max(0,1+e)),u=T(Math.max(0,1+n)),c=`clip(((val*${o})-128)*${u}+128,0,255)`;s.push(`lutrgb=r='${c}':g='${c}':b='${c}'`)}const a=[];return i!==0&&a.push(`saturation=${1+i}`),r!==0&&a.push(`gamma=${(1+r*(r>0?1:.5)).toFixed(3)}`),a.length&&s.push(`eq=${a.join(":")}`),s.join(",")}function T(t){return`${Math.round(t*1e3)/1e3}`}function nt(t){const e=x(t?.temperature),n=x(t?.tint);if(e===0&&n===0)return null;const i=x(e*.18+n*.08),r=x(e*.02-n*.12),s=x(-e*.18+n*.08);return`colorbalance=rs=${T(i)}:gs=${T(r)}:bs=${T(s)}`}function it(t){const e=x(t?.vibrance);return e===0?null:`vibrance=intensity=${T(e)}`}function O(t,e,n){if(t===e)return n<t?0:1;const i=Math.max(0,Math.min(1,(n-t)/(e-t)));return i*i*(3-2*i)}function Et(t){const e=O(.08,.4,t),n=1-O(.6,.92,t);return Math.max(0,Math.min(1,e*n*2.2))}function Ft(t,e){const n=1-O(.18,.62,t),i=1-O(.04,.32,t),r=O(.38,.84,t),s=O(.7,.98,t),a=Et(t),o=e.shadows*n*.28+e.highlights*r*.24+e.blacks*i*.2+e.whites*s*.2+e.lightSense*a*.18+e.fade*(.12+n*.06);return Math.max(0,Math.min(1,t+o))}function rt(t){const e={highlights:x(t?.highlights),shadows:x(t?.shadows),whites:x(t?.whites),blacks:x(t?.blacks),lightSense:x(t?.lightSense),fade:R(t?.fade)};return Object.values(e).some(r=>Math.abs(r)>1e-4)?`curves=master='${[0,.18,.36,.5,.68,.84,1].map(r=>`${T(r)}/${T(Ft(r,e))}`).join(" ")}'`:null}function st(t){const e=[],n=R(t?.clarity),i=R(t?.sharpen);return n>1e-4&&e.push(`unsharp=lx=7:ly=7:la=${T(n*1.8)}:cx=7:cy=7:ca=0`),i>1e-4&&e.push(`unsharp=lx=3:ly=3:la=${T(.35+i*2.1)}:cx=3:cy=3:ca=${T(i*.55)}`),e}function ot(t){const e=R(t?.grain);return e<=1e-4?null:`noise=alls=${Math.round(6+e*26)}:allf=t`}function at(t){const e=R(t?.vignette);if(e<=1e-4)return null;const n=Math.max(.12,.42-e*.22);return`vignette=angle=${T(n)}*PI`}function B(t,e={}){const n=[];if(t.flipX&&n.push("hflip"),t.flipY&&n.push("vflip"),n.push(...gt(t.rotation)),t.crop){const{x:m,y:$,width:b,height:A}=t.crop;n.push(`crop=${b}:${A}:${m}:${$}`)}if(t.scale){const{width:m,height:$,fit:b}=t.scale;b==="force"?n.push(`scale=${m}:${$}`):b==="cover"?n.push(`scale=${m}:${$}:force_original_aspect_ratio=increase`,`crop=${m}:${$}`):n.push(`scale=${m}:${$}:force_original_aspect_ratio=decrease`,`pad=${m}:${$}:(ow-iw)/2:(oh-ih)/2`)}const i=et(t.filters);i&&n.push(i);const r=nt(t.filters);r&&n.push(r);const s=it(t.filters);s&&n.push(s);const a=rt(t.filters);a&&n.push(a),n.push(...st(t.filters));const o=ot(t.filters);o&&n.push(o);const u=at(t.filters);u&&n.push(u);const c=X(t.filterPreset);return c&&n.push(c.vf),e.includeExportScale!==!1&&n.push(...W(t)),n.push(`fps=${tt(t)}`),Y(t.rotation)%90!==0&&!t.scale&&n.push("scale=trunc(iw/2)*2:trunc(ih/2)*2"),n}var ct={fade:"fade",slide:"slideleft",wipe:"wipeleft",flip:"horzopen",clockWipe:"radial",star:"pixelize",circle:"circleopen",rectangle:"rectcrop"},yt={fade:"qsin",slide:"tri",wipe:"tri",flip:"exp",clockWipe:"qsin",star:"tri",circle:"qsin",rectangle:"qsin"};function N(t){return t.out-t.in}function ut(t,e,n){const i=t&&typeof t.type=="string"?t.type:"none",r=ct[i]?i:"none",s=Math.max(0,Math.min(1.2,e-.05,n-.05));if(r==="none"||s<=.05)return{type:"none",duration:0,effect:"fade",curve:"tri"};const a=Number(t?.duration),o=Math.min(Math.max(Number.isFinite(a)?a:.4,.1),s);return{type:r,duration:o,effect:ct[r],curve:yt[r]??"tri"}}function Pt(t,e){if(!Array.isArray(e)||e.length<2)return!1;for(let n=0;n<e.length-1;n++){const i=ut(t?.[n],N(e[n]),N(e[n+1]));if(i.type!=="none"&&i.duration>0)return!0}return!1}function _t(t,e){const n=[];let i=0;for(let r=0;r<t.length-1;r++){const s=ut(e?.[r],N(t[r]),N(t[r+1]));s.type!=="none"&&s.duration>0&&(n.push({start:i,end:r,transition:s}),i=r+1)}return n.push({start:i,end:t.length-1,transition:null}),n}function wt(t,e,n){let i=0;for(let r=e;r<=n;r++)i+=N(t[r]);return i}function Ot(t,e,n,i){const s=_t(e,n).map((c,f)=>{const m=wt(e,c.start,c.end);if(c.start===c.end)return{vLabel:`[v${c.start}]`,aLabel:i?`[a${c.start}]`:"",duration:m,transition:c.transition};const $=[];for(let S=c.start;S<=c.end;S++)$.push(i?`[v${S}][a${S}]`:`[v${S}]`);const b=`[sgv${f}]`,A=i?`[sga${f}]`:"";return t.push(`${$.join("")}concat=n=${c.end-c.start+1}:v=1:a=${i?1:0}${i?`${b}${A}`:b}`),{vLabel:b,aLabel:A,duration:m,transition:c.transition}});let a=s[0].vLabel,o=i?s[0].aLabel:"",u=s[0].duration;for(let c=1;c<s.length;c++){const f=s[c-1].transition,m=s[c],$=`[vx${c}]`,b=Math.max(0,u-f.duration);if(t.push(`${a}${m.vLabel}xfade=transition=${f.effect}:duration=${f.duration}:offset=${b}${$}`),a=$,i){const A=`[ax${c}]`;t.push(`${o}${m.aLabel}acrossfade=d=${f.duration}:c1=${f.curve}:c2=${f.curve}${A}`),o=A}u=u+m.duration-f.duration}return{vLabel:a,aLabel:o,duration:u}}function U(t,e){const n=xt(e),i=n==="mxf"?["-c:v","mpeg2video","-pix_fmt","yuv422p"]:["-c:v","libx264","-preset","veryfast","-pix_fmt","yuv420p","-movflags","+faststart"],r=Tt(e);if(r>0?i.push("-b:v",`${r}k`,"-maxrate",`${r}k`,"-bufsize",`${Math.max(r*2,512)}k`):n==="mxf"&&i.push("-q:v","2"),t)if(n==="mxf")i.push("-c:a","pcm_s16le");else{i.push("-c:a",Mt(e));const s=At(e);s>0&&i.push("-b:a",`${s}k`)}return n==="mxf"&&i.push("-f","mxf"),i}var C="aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo",lt="anullsrc=r=44100:cl=stereo";function ft(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 Rt="alimiter=limit=0.95:level=disabled:latency=1",Nt=3,It=.5;function ht(t,e=0){const n=Math.max(e,Math.floor(Number(t)||0));return n%2===0?n:n-1}function Lt(t){const e=Number.isFinite(t?.startAt)?Math.max(0,Number(t.startAt)):0,n=Number(t?.endAt);return Number.isFinite(n)?{startAt:e,endAt:Math.max(e+It,n)}:{startAt:e,endAt:e+Nt}}function Dt(t,e){const n=Math.max(2,ht(e.w,2)),i=Math.max(2,ht(e.h,2));return!(n>1)||!(i>1)?null:{x:0,y:0,w:n,h:i}}function Ct(t){if(t?.type==="filter"){const u=X(t.filterPreset);return u?[u.vf]:[]}if(t?.type!=="adjust")return[];const e=[],n=et(t);n&&e.push(n);const i=nt(t);i&&e.push(i);const r=it(t);r&&e.push(r);const s=rt(t);s&&e.push(s),e.push(...st(t));const a=ot(t);a&&e.push(a);const o=at(t);return o&&e.push(o),e}function pt(t,e){const n=[];for(const i of t??[]){if(i?.type!=="filter"&&i?.type!=="adjust")continue;const r=Dt(i,e);if(!r)continue;const s=Ct(i);s.length&&n.push({rect:r,filters:s,...Lt(i)})}return n}function mt(t,e=1/0){const n=[];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),s=Number(i.endAt);if(!(!Number.isFinite(r)||!Number.isFinite(s)||s<=r)&&(n.push({startAt:Math.max(0,r),endAt:Math.max(r+.01,s)}),n.length>=e))break}return n}function $t(t,e,n,i){let r=e;return i.forEach((s,a)=>{const o=`[vtxt${n+a}]`;t.push(`${r}[${n+a}:v]overlay=0:0:enable='between(t,${s.startAt.toFixed(3)},${s.endAt.toFixed(3)})'${o}`),r=o}),r}function dt(t,e,n){let i=e;return n.forEach((r,s)=>{const a=`[vfxsrc${s}]`,o=`[vfxbase${s}]`,u=`[vfxcrop${s}]`,c=`[vfx${s}]`,{rect:f}=r;t.push(`${i}split=2${a}${o}`),t.push(`${a}crop=${f.w}:${f.h}:${f.x}:${f.y},${r.filters.join(",")}${u}`),t.push(`${o}${u}overlay=${f.x}:${f.y}:enable='between(t,${r.startAt.toFixed(3)},${r.endAt.toFixed(3)})'${c}`),i=c}),i}function jt(t,e,n,i,r,s=[]){const a=B(t,{includeExportScale:!1}),o=t.clips,u=t.keepAudio&&r,c=o.length>=2,f=pt(t.overlays,q(t)),m=mt(t.overlays,s.length),$=s.slice(0,m.length);if(c||i||$.length||f.length){const g=[];let h;if(c){o.forEach((M,F)=>{g.push(`[0:v]trim=start=${M.in}:end=${M.out},setpts=PTS-STARTPTS[v${F}]`),u&&g.push(`[0:a]atrim=start=${M.in}:end=${M.out},asetpts=PTS-STARTPTS${ft(M.out-M.in)}[a${F}]`)});const d=o.map((M,F)=>u?`[v${F}][a${F}]`:`[v${F}]`).join(""),y=u?"[vcat][acat]":"[vcat]";g.push(`${d}concat=n=${o.length}:v=1:a=${u?1:0}${y}`),h="[vcat]"}else h="[0:v]";if(a.length&&(g.push(`${h}${a.join(",")}[vflt]`),h="[vflt]"),f.length&&(h=dt(g,h,f)),i?(g.push(`${h}[1:v]overlay=0:0[vout]`),h="[vout]"):h==="[0:v]"&&(g.push("[0:v]null[vout]"),h="[vout]"),$.length){const d=1+(i?1:0);h=$t(g,h,d,m)}const I=W(t);I.length&&(g.push(`${h}${I.join(",")}[vscaled]`),h="[vscaled]");const L=[];!c&&o.length===1&&L.push("-ss",String(o[0].in),"-t",String(o[0].out-o[0].in));const p=["-y",...L,"-i",e];i&&p.push("-i",i);for(const d of $)p.push("-i",d);return p.push("-filter_complex",g.join(";"),"-map",h),u&&p.push("-map",c?"[acat]":"0:a?"),p.push(...U(u,t)),p.push(n),p}const b=B(t),S=["-y",...["-ss",String(o[0].in),"-t",String(o[0].out-o[0].in)],"-i",e];return b.length&&S.push("-vf",b.join(",")),u||S.push("-an"),S.push(...U(u,t)),S.push(n),S}function zt(t,e,n){const{videoPaths:i,videoHasAudio:r,audioPaths:s,overlayPath:a,textOverlayPaths:o=[]}=e,u=t.audioClips??[],c=Pt(t.transitions,t.clips),f=mt(t.overlays,o.length),m=o.slice(0,f.length);if(i.length===1&&u.length===0&&!c)return jt(t,i[0],n,a,r[0]??!1,m);const $=i.length,b=s.length,A=t.canvas.w,S=t.canvas.h,g=t.clips,h=t.keepAudio&&g.some(l=>r[l.srcIdx]),I=tt(t),L=g.reduce((l,v)=>l+(v.out-v.in),0),p=[];g.forEach((l,v)=>{p.push(`[${l.srcIdx}:v]trim=start=${l.in}:end=${l.out},setpts=PTS-STARTPTS,scale=${A}:${S}:force_original_aspect_ratio=increase,crop=${A}:${S},setsar=1,fps=${I},format=yuv420p[v${v}]`),h&&(r[l.srcIdx]?p.push(`[${l.srcIdx}:a]atrim=start=${l.in}:end=${l.out},asetpts=PTS-STARTPTS${ft(l.out-l.in)},${C}[a${v}]`):p.push(`${lt},atrim=start=0:end=${l.out-l.in},asetpts=PTS-STARTPTS,${C}[a${v}]`))});let d="[vcat]",y=h?"[acat]":"",M=L;if(c){const l=Ot(p,g,t.transitions??[],h);d=l.vLabel,y=h?l.aLabel:"",M=l.duration}else{const l=g.map((v,P)=>h?`[v${P}][a${P}]`:`[v${P}]`).join("");p.push(`${l}concat=n=${g.length}:v=1:a=${h?1:0}${h?"[vcat][acat]":"[vcat]"}`)}if(!h&&u.length&&(p.push(`${lt},atrim=start=0:end=${M},asetpts=PTS-STARTPTS,${C}[acat]`),y="[acat]"),u.length){u.forEach((v,P)=>{const H=Math.max(0,Math.round(v.startAt*1e3)),z=Math.max(0,v.out-v.in),vt=Q(v.speed),V=Math.min(Math.max(Number(v.fadeIn)||0,0),z),k=Math.min(Math.max(Number(v.fadeOut)||0,0),Math.max(0,z-V)),D=[`atrim=start=${v.in}:end=${v.out}`,"asetpts=PTS-STARTPTS",...bt(vt),`volume=${v.volume}`];V>1e-4&&D.push(`afade=t=in:st=0:d=${V}`),k>1e-4&&D.push(`afade=t=out:st=${Math.max(0,z-k)}:d=${k}`),D.push(C,`adelay=${H}|${H}`),p.push(`[${$+P}:a]${D.join(",")}[mu${P}]`)});const l=`${y}${u.map((v,P)=>`[mu${P}]`).join("")}`;p.push(`${l}amix=inputs=${1+u.length}:duration=first:dropout_transition=0:normalize=0,${Rt}[aout]`),y="[aout]"}const F=B(t,{includeExportScale:!1}),G=pt(t.overlays,q(t));if(F.length&&(p.push(`${d}${F.join(",")}[vflt]`),d="[vflt]"),G.length&&(d=dt(p,d,G)),a&&(p.push(`${d}[${$+b}:v]overlay=0:0[vout]`),d="[vout]"),m.length){const l=$+b+(a?1:0);d=$t(p,d,l,f)}const K=W(t);K.length&&(p.push(`${d}${K.join(",")}[vscaled]`),d="[vscaled]");const E=["-y"];for(const l of i)E.push("-i",l);for(const l of s)E.push("-i",l);a&&E.push("-i",a);for(const l of m)E.push("-i",l);E.push("-filter_complex",p.join(";"),"-map",d);const j=!!y;return j&&E.push("-map",y),E.push(...U(j,t)),j&&E.push("-ar","44100","-ac","2"),E.push(n),E}function Vt(t,e,n){return["-y","-ss",String(e),"-i",t,"-frames:v","1","-q:v","2",n]}export{ne as AudioClip,ie as Clip,_e as DEFAULT_PLATFORM_TARGETS,Bt as DEG2RAD,we as EDITOR_MESSAGES,Ut as FILTER_PRESETS,Oe as IMAGE_PLATFORM_PRESETS,Re as IMAGE_RATIO_PRESETS,re as MIN_CLIP,se as Overlay,Ne as VIDEO_PLATFORM_RATIO_PRESETS,Ie as VIDEO_RATIO_PRESETS,Le as VIDEO_SIZE_PRESETS,oe as VideoEditState,zt as buildFfmpegArgs,Gt as buildFilterCss,De as buildImagePlatformPresets,Vt as buildPosterArgs,Ce as buildVideoPlatformRatioPresets,je as buildVideoSizePresets,ae as canRedo,ce as canUndo,Kt as centeredMaxRect,ue as clampAudioClip,Ht as clampRect,le as clipDuration,fe as clipStartsAt,ze as compensateAnnotationRotation,he as contentDuration,pe as createHistory,me as defaultVideoEditState,$e as duplicateClip,Xt as evenize,Yt as findFilterPreset,Zt as fitRects,de as locateOutput,Jt as normalizeDeg,Qt as outputSize,Ve as parseRatio,ve as pushHistory,ge as redo,be as remapSrcIndices,xe as removeClip,Se as reorderClips,Te as replacePresent,te as rotatedSize,Ae as splitAtOutput,ke as tEditor,qe as toHant,Me as totalDuration,Ee as trimClipEdge,Fe as undo,ye as usedVideoSrcIndices};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* editor-core/i18n —— 编辑器文案字典(纯 TS,零框架依赖,Vue/React 壳共用)。
|
|
3
|
+
* key 规约(domain 扁平):tool.* tune.* overlay.* filter.* ratio.* act.* err.* tip.* msg.* lbl.* panel.* poster.* crop.*
|
|
4
|
+
* 插值:{name} 形式,tEditor 第三参传值。
|
|
5
|
+
* 单测保证所有 locale key 集合一致(Filerobot 内核覆盖键不在此,见 ImageEditor 的 FIE_* translations)。
|
|
6
|
+
*/
|
|
7
|
+
type EditorLocale = 'zh' | 'en' | 'es' | 'zh-Hant';
|
|
8
|
+
declare const toHant: (value: string) => string;
|
|
9
|
+
declare const EDITOR_MESSAGES: Record<EditorLocale, Record<string, string>>;
|
|
10
|
+
/** 取文案;缺 key 兜底显示 key 本身;{name} 插值 */
|
|
11
|
+
declare function tEditor(locale: EditorLocale, key: string, vars?: Record<string, string | number>): string;
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* 内置平台发布目标表(SDK 自带默认值)。
|
|
15
|
+
* 原 SocialEcho 仓从 lib/ark-config.ts 的 PUBLISH_TARGETS 派生预设;为让 SDK 自包含、
|
|
16
|
+
* 去掉对宿主 ark-config 的硬依赖,这里内置编辑器预设真正用到的字段子集(15 行)。
|
|
17
|
+
* 宿主仍可调 buildPlatformPresets(自己的 targets) 注入,保持单一真值源。
|
|
18
|
+
*/
|
|
19
|
+
interface PlatformTarget {
|
|
20
|
+
platform: string;
|
|
21
|
+
postType: string;
|
|
22
|
+
label: string;
|
|
23
|
+
shortLabel: string;
|
|
24
|
+
ratio: string;
|
|
25
|
+
imageSize: string;
|
|
26
|
+
videoRatio?: string;
|
|
27
|
+
videoResolution?: '720p' | '1080p';
|
|
28
|
+
}
|
|
29
|
+
/** 默认平台表(与原仓 PUBLISH_TARGETS 同步;升级宿主数据时复核) */
|
|
30
|
+
declare const DEFAULT_PLATFORM_TARGETS: PlatformTarget[];
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 编辑器「平台 → 可选裁剪比例 / 输出尺寸」预设。
|
|
34
|
+
* 默认从内置 DEFAULT_PLATFORM_TARGETS 派生(SDK 自包含);
|
|
35
|
+
* 宿主可调 buildImagePlatformPresets/buildVideoSizePresets 传入自己的目标表保持单一真值源。
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
interface RatioPreset {
|
|
39
|
+
ratio: string;
|
|
40
|
+
value: number;
|
|
41
|
+
label: string;
|
|
42
|
+
}
|
|
43
|
+
declare function parseRatio(r: string): number;
|
|
44
|
+
/** 图片比例预设:精确 7 项(顺序即 UI 顺序) */
|
|
45
|
+
declare const IMAGE_RATIO_PRESETS: RatioPreset[];
|
|
46
|
+
/** 视频比例预设:精确 4 项(顺序即 UI 顺序) */
|
|
47
|
+
declare const VIDEO_RATIO_PRESETS: RatioPreset[];
|
|
48
|
+
interface VideoPlatformRatioPreset {
|
|
49
|
+
platform: string;
|
|
50
|
+
postType: string;
|
|
51
|
+
label: string;
|
|
52
|
+
ratio: string;
|
|
53
|
+
value: number;
|
|
54
|
+
}
|
|
55
|
+
/** 视频平台比例快捷入口:从目标表 videoRatio 派生,保留平台/类型,按 platform+type+ratio 去重 */
|
|
56
|
+
declare function buildVideoPlatformRatioPresets(targets?: PlatformTarget[]): VideoPlatformRatioPreset[];
|
|
57
|
+
declare const VIDEO_PLATFORM_RATIO_PRESETS: VideoPlatformRatioPreset[];
|
|
58
|
+
interface PlatformPreset {
|
|
59
|
+
platform: string;
|
|
60
|
+
label: string;
|
|
61
|
+
ratio: string;
|
|
62
|
+
value: number;
|
|
63
|
+
w: number;
|
|
64
|
+
h: number;
|
|
65
|
+
}
|
|
66
|
+
/** 每平台一条(优先 postType='post',否则取该平台首条);w/h 来自 imageSize */
|
|
67
|
+
declare function buildImagePlatformPresets(targets?: PlatformTarget[]): PlatformPreset[];
|
|
68
|
+
/** 默认图片平台预设(内置表派生) */
|
|
69
|
+
declare const IMAGE_PLATFORM_PRESETS: PlatformPreset[];
|
|
70
|
+
interface SizePreset {
|
|
71
|
+
label: string;
|
|
72
|
+
w: number;
|
|
73
|
+
h: number;
|
|
74
|
+
}
|
|
75
|
+
/** 视频输出尺寸预设:从目标表派生(平台标签 + 实际像素),按 w×h 去重 */
|
|
76
|
+
declare function buildVideoSizePresets(targets?: PlatformTarget[]): SizePreset[];
|
|
77
|
+
/** 默认视频尺寸预设(内置表派生) */
|
|
78
|
+
declare const VIDEO_SIZE_PRESETS: SizePreset[];
|
|
79
|
+
|
|
80
|
+
export { DEFAULT_PLATFORM_TARGETS as D, type EditorLocale as E, IMAGE_PLATFORM_PRESETS as I, type PlatformPreset as P, type RatioPreset as R, type SizePreset as S, VIDEO_PLATFORM_RATIO_PRESETS as V, EDITOR_MESSAGES as a, IMAGE_RATIO_PRESETS as b, type PlatformTarget as c, VIDEO_RATIO_PRESETS as d, VIDEO_SIZE_PRESETS as e, type VideoPlatformRatioPreset as f, buildImagePlatformPresets as g, buildVideoPlatformRatioPresets as h, buildVideoSizePresets as i, toHant as j, parseRatio as p, tEditor as t };
|