cerevox 0.2.0 → 0.2.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videokit.d.ts","sourceRoot":"","sources":["../../src/utils/videokit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,588 @@
1
+ "use strict";
2
+ // videokit-ts: A tiny TypeScript library for AI-driven video assembly via FFmpeg
3
+ // ---------------------------------------------------------------------------------
4
+ // Features
5
+ // - Strongly-typed project spec (tracks/assets/effects/subtitles)
6
+ // - Zod runtime validation
7
+ // - Subtitles rendering with 3 modes: SRT (basic), ASS+libass (rich), drawtext (no libass)
8
+ // - Optional music ducking (sidechaincompress)
9
+ // - Compiler that turns JSON spec into ffmpeg args (+ extra files to write)
10
+ // - Helper to auto-detect libass, write files, and spawn ffmpeg
11
+ //
12
+ // Install peer deps:
13
+ // npm i zod
14
+ // # ffmpeg must be installed in PATH
15
+ //
16
+ // Optional runtime helpers (Node only):
17
+ // npm i execa # if you prefer execa over child_process
18
+ //
19
+ // Usage (Node):
20
+ // import {
21
+ // validateProject, compileToFfmpeg, runFfmpeg,
22
+ // hasLibass, type VideoProject
23
+ // } from "videokit-ts";
24
+ //
25
+ // const spec: VideoProject = { ... };
26
+ // const validated = validateProject(spec);
27
+ // const compiled = compileToFfmpeg(validated, { subtitleStrategy: "auto", outFile: "out.mp4" });
28
+ // await runFfmpeg(compiled);
29
+ //
30
+ // ---------------------------------------------------------------------------------
31
+ var __importDefault = (this && this.__importDefault) || function (mod) {
32
+ return (mod && mod.__esModule) ? mod : { "default": mod };
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.zVideoProject = void 0;
36
+ exports.validateProject = validateProject;
37
+ exports.hasLibass = hasLibass;
38
+ exports.compileToFfmpeg = compileToFfmpeg;
39
+ exports.runFfmpeg = runFfmpeg;
40
+ exports.escapeDrawtextText = escapeDrawtextText;
41
+ const zod_1 = require("zod");
42
+ // Node helpers for writing files and spawning ffmpeg (guarded for browser builds)
43
+ const fs_1 = __importDefault(require("fs"));
44
+ const path_1 = __importDefault(require("path"));
45
+ const child_process_1 = require("child_process");
46
+ const shell_quote_1 = require("shell-quote");
47
+ // ---- Zod ----
48
+ const zResolution = zod_1.z.object({
49
+ width: zod_1.z.number().int().min(16),
50
+ height: zod_1.z.number().int().min(16),
51
+ });
52
+ const zSettings = zod_1.z.object({
53
+ fps: zod_1.z.number().positive(),
54
+ resolution: zResolution,
55
+ pixelFormat: zod_1.z.string(),
56
+ sampleRate: zod_1.z.number().int().positive(),
57
+ channels: zod_1.z.number().int().min(1),
58
+ timebase: zod_1.z.string(),
59
+ });
60
+ const zAsset = zod_1.z.object({
61
+ id: zod_1.z.string(),
62
+ type: zod_1.z.enum(['video', 'audio', 'image']),
63
+ uri: zod_1.z.string(),
64
+ durationMs: zod_1.z.number().int().optional(),
65
+ fps: zod_1.z.number().optional(),
66
+ });
67
+ const zEffect = zod_1.z.object({
68
+ name: zod_1.z.string(),
69
+ params: zod_1.z.record(zod_1.z.unknown()).optional(),
70
+ });
71
+ const zTransition = zod_1.z.object({
72
+ name: zod_1.z.string(),
73
+ durationMs: zod_1.z.number().int().min(1),
74
+ });
75
+ const zTransform = zod_1.z.object({
76
+ scale: zod_1.z.number().optional(),
77
+ rotate: zod_1.z.number().optional(),
78
+ anchor: zod_1.z
79
+ .enum(['center', 'topleft', 'topright', 'bottomleft', 'bottomright'])
80
+ .optional(),
81
+ position: zod_1.z.object({ x: zod_1.z.number(), y: zod_1.z.number() }).optional(),
82
+ fit: zod_1.z.enum(['contain', 'cover', 'stretch']).optional(),
83
+ });
84
+ const zClip = zod_1.z.object({
85
+ id: zod_1.z.string(),
86
+ assetId: zod_1.z.string(),
87
+ startMs: zod_1.z.number().int().min(0),
88
+ inMs: zod_1.z.number().int().min(0),
89
+ durationMs: zod_1.z.number().int().min(1),
90
+ transform: zTransform.optional(),
91
+ speed: zod_1.z.number().positive().optional(),
92
+ effects: zod_1.z.array(zEffect).optional(),
93
+ transitionIn: zTransition.optional(),
94
+ transitionOut: zTransition.optional(),
95
+ });
96
+ const zTrack = zod_1.z.object({
97
+ id: zod_1.z.string(),
98
+ type: zod_1.z.enum(['video', 'audio', 'subtitle']),
99
+ muted: zod_1.z.boolean().optional(),
100
+ opacity: zod_1.z.number().min(0).max(1).optional(),
101
+ clips: zod_1.z.array(zClip),
102
+ });
103
+ const zDucking = zod_1.z.object({
104
+ id: zod_1.z.string(),
105
+ musicTrackId: zod_1.z.string(),
106
+ dialogTrackId: zod_1.z.string(),
107
+ params: zod_1.z
108
+ .object({
109
+ threshold: zod_1.z.number().optional(),
110
+ ratio: zod_1.z.number().optional(),
111
+ attackMs: zod_1.z.number().optional(),
112
+ releaseMs: zod_1.z.number().optional(),
113
+ musicPreGain: zod_1.z.number().optional(),
114
+ })
115
+ .optional(),
116
+ });
117
+ const zMix = zod_1.z.object({ ducking: zod_1.z.array(zDucking).optional() });
118
+ const zSubtitle = zod_1.z.object({
119
+ id: zod_1.z.string(),
120
+ text: zod_1.z.string(),
121
+ startMs: zod_1.z.number().int().min(0),
122
+ endMs: zod_1.z.number().int().min(1),
123
+ audio: zod_1.z.string().optional(),
124
+ style: zod_1.z
125
+ .object({
126
+ fontFamily: zod_1.z.string().optional(),
127
+ fontSize: zod_1.z.number().optional(),
128
+ bold: zod_1.z.boolean().optional(),
129
+ color: zod_1.z.string().optional(),
130
+ outlineColor: zod_1.z.string().optional(),
131
+ outlineWidth: zod_1.z.number().optional(),
132
+ align: zod_1.z.enum(['left', 'center', 'right']).optional(),
133
+ position: zod_1.z.object({ x: zod_1.z.number(), y: zod_1.z.number() }).optional(),
134
+ })
135
+ .optional(),
136
+ });
137
+ const zExport = zod_1.z.object({
138
+ container: zod_1.z.string(),
139
+ videoCodec: zod_1.z.string(),
140
+ crf: zod_1.z.number().int().optional(),
141
+ preset: zod_1.z.string().optional(),
142
+ audioCodec: zod_1.z.string(),
143
+ audioBitrate: zod_1.z.string().optional(),
144
+ outFile: zod_1.z.string().optional(),
145
+ });
146
+ exports.zVideoProject = zod_1.z.object({
147
+ version: zod_1.z.string(),
148
+ project: zod_1.z.object({ name: zod_1.z.string(), id: zod_1.z.string() }),
149
+ settings: zSettings,
150
+ assets: zod_1.z.array(zAsset).min(1),
151
+ timeline: zod_1.z.object({ tracks: zod_1.z.array(zTrack).min(1), mix: zMix.optional() }),
152
+ subtitles: zod_1.z.array(zSubtitle).optional(),
153
+ export: zExport,
154
+ });
155
+ function validateProject(json) {
156
+ const parsed = exports.zVideoProject.parse(json);
157
+ // TODO: semantic checks for references, overlaps, bounds, etc.
158
+ return parsed;
159
+ }
160
+ // ======================================
161
+ // 2) Subtitles helpers (SRT/ASS/drawtext)
162
+ // ======================================
163
+ function pad2(n) {
164
+ return String(n).padStart(2, '0');
165
+ }
166
+ function pad3(n) {
167
+ return String(n).padStart(3, '0');
168
+ }
169
+ function msToSrtTime(ms) {
170
+ const h = Math.floor(ms / 3600000), m = Math.floor((ms % 3600000) / 60000), s = Math.floor((ms % 60000) / 1000), msRem = Math.floor(ms % 1000);
171
+ return `${pad2(h)}:${pad2(m)}:${pad2(s)},${pad3(msRem)}`;
172
+ }
173
+ function composeSrtFromItems(subs) {
174
+ const sorted = [...subs].sort((a, b) => a.startMs - b.startMs);
175
+ return sorted
176
+ .map((s, i) => `${i + 1}\n${msToSrtTime(Math.max(0, s.startMs))} --> ${msToSrtTime(Math.max(s.endMs, s.startMs + 1))}\n${s.text}\n`)
177
+ .join('\n');
178
+ }
179
+ function hexToAssColor(hex) {
180
+ if (!hex)
181
+ return undefined;
182
+ const m = /^#?([0-9a-fA-F]{6})$/.exec(hex);
183
+ if (!m)
184
+ return undefined;
185
+ const rr = m[1].slice(0, 2), gg = m[1].slice(2, 4), bb = m[1].slice(4, 6);
186
+ return `&H00${bb}${gg}${rr}`; // &HAABBGGRR
187
+ }
188
+ function composeAssFromItems(subs, defaultStyle) {
189
+ const s = defaultStyle || {};
190
+ const font = s.fontFamily ?? 'Arial';
191
+ const size = s.fontSize ?? 42;
192
+ const c = hexToAssColor(s.color ?? '#FFFFFF') ?? '&H00FFFFFF';
193
+ const oc = hexToAssColor(s.outlineColor ?? '#000000') ?? '&H00000000';
194
+ const ow = Math.max(0, s.outlineWidth ?? 2);
195
+ const align = s.align === 'left' ? 1 : s.align === 'right' ? 3 : 2; // bottom row
196
+ const header = `[Script Info]\nScriptType: v4.00+\nCollisions: Normal\nPlayResX: 1920\nPlayResY: 1080\n\n[V4+ Styles]\nFormat: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding\nStyle: Default,${font},${size},${c},&H000000FF,${oc},&H64000000,${s.bold ? -1 : 0},0,0,0,100,100,0,0,1,${ow},0,${align},60,60,120,0\n\n[Events]\nFormat: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text\n`;
197
+ const events = subs
198
+ .sort((a, b) => a.startMs - b.startMs)
199
+ .map(it => {
200
+ const sMs = Math.max(0, it.startMs), eMs = Math.max(it.endMs, it.startMs + 1);
201
+ const sH = pad2(Math.floor(sMs / 3600000)), sM = pad2(Math.floor((sMs % 3600000) / 60000)), sS = pad2(Math.floor((sMs % 60000) / 1000)), sC = pad2(Math.floor((sMs % 1000) / 10));
202
+ const eH = pad2(Math.floor(eMs / 3600000)), eM = pad2(Math.floor((eMs % 3600000) / 60000)), eS = pad2(Math.floor((eMs % 60000) / 1000)), eC = pad2(Math.floor((eMs % 1000) / 10));
203
+ const sAss = `${sH}:${sM}:${sS}.${sC}`;
204
+ const eAss = `${eH}:${eM}:${eS}.${eC}`;
205
+ const text = it.text.replace(/\n/g, '\\N');
206
+ return `Dialogue: 0,${sAss},${eAss},Default,,0,0,0,,${text}`;
207
+ })
208
+ .join('\n');
209
+ return header + events + '\n';
210
+ }
211
+ // Function moved to exports section at end of file
212
+ // ======================
213
+ // 3) libass detection
214
+ // ======================
215
+ function hasLibass(ffmpegBin = 'ffmpeg') {
216
+ try {
217
+ const out = (0, child_process_1.execSync)(`${ffmpegBin} -filters`, {
218
+ encoding: 'utf-8',
219
+ });
220
+ return /subtitles.*libass/i.test(out);
221
+ }
222
+ catch {
223
+ return false;
224
+ }
225
+ }
226
+ function compileToFfmpeg(project, opts = {}) {
227
+ const ffmpegBin = opts.ffmpegBin ?? 'ffmpeg';
228
+ const tmpDir = opts.workingDir ?? process.cwd();
229
+ // Collect used assets from tracks
230
+ const usedAssetIds = new Set(project.timeline.tracks.flatMap(t => t.clips.map(c => c.assetId)));
231
+ // Also collect assets referenced in subtitles
232
+ if (project.subtitles?.length) {
233
+ for (const subtitle of project.subtitles) {
234
+ if (subtitle.audio) {
235
+ usedAssetIds.add(subtitle.audio);
236
+ }
237
+ }
238
+ }
239
+ const assets = project.assets.filter(a => usedAssetIds.has(a.id));
240
+ // Inputs
241
+ const inputArgs = [];
242
+ const inputIndexByAsset = {};
243
+ assets.forEach((a, i) => {
244
+ inputArgs.push('-i', a.uri);
245
+ inputIndexByAsset[a.id] = i;
246
+ });
247
+ // Filter graph builders
248
+ const fg = [];
249
+ const extraFiles = [];
250
+ let labelId = 0;
251
+ const newLabel = () => `s${labelId++}`;
252
+ const videoTrackOuts = [];
253
+ const audioTrackOuts = [];
254
+ // Per-track clips -> branches
255
+ for (const track of project.timeline.tracks) {
256
+ const outs = [];
257
+ for (const clip of track.clips) {
258
+ const asset = project.assets.find(a => a.id === clip.assetId);
259
+ if (!asset)
260
+ throw new Error(`Missing asset: ${clip.assetId}`);
261
+ const idx = inputIndexByAsset[asset.id];
262
+ const sel = track.type === 'audio' ? `[${idx}:a]` : `[${idx}:v]`;
263
+ const start = clip.inMs / 1000;
264
+ const dur = clip.durationMs / 1000;
265
+ const tpadSec = clip.startMs / 1000;
266
+ const trim = track.type === 'audio'
267
+ ? `atrim=start=${start}:duration=${dur},asetpts=PTS-STARTPTS`
268
+ : `trim=start=${start}:duration=${dur},setpts=PTS-STARTPTS`;
269
+ const shift = track.type === 'audio'
270
+ ? `adelay=${Math.round(tpadSec * 1000)}|${Math.round(tpadSec * 1000)}`
271
+ : `tpad=start_duration=${tpadSec}`;
272
+ // Effects mapping (partial demo)
273
+ const effects = [];
274
+ if (clip.effects)
275
+ for (const ef of clip.effects) {
276
+ switch (ef.name) {
277
+ case 'fadeIn': {
278
+ const params = ef.params;
279
+ const d = Number(params?.durationMs ?? 500) / 1000;
280
+ effects.push(track.type === 'audio'
281
+ ? `afade=t=in:st=0:d=${d}`
282
+ : `fade=t=in:st=0:d=${d}`);
283
+ break;
284
+ }
285
+ case 'fadeOut': {
286
+ const params = ef.params;
287
+ const d = Number(params?.durationMs ?? 500) / 1000;
288
+ effects.push(track.type === 'audio'
289
+ ? `afade=t=out:st=${Math.max(0, dur - d)}:d=${d}`
290
+ : `fade=t=out:st=${Math.max(0, dur - d)}:d=${d}`);
291
+ break;
292
+ }
293
+ case 'gain': {
294
+ const params = ef.params;
295
+ const db = Number(params?.db ?? 0);
296
+ effects.push(`volume=${Math.pow(10, db / 20)}`);
297
+ break;
298
+ }
299
+ case 'color': {
300
+ if (track.type === 'video') {
301
+ const params = ef.params;
302
+ const p = params || {};
303
+ effects.push(`eq=saturation=${p.saturation ?? 1}:contrast=${p.contrast ?? 1}:brightness=${p.brightness ?? 0}`);
304
+ }
305
+ break;
306
+ }
307
+ case 'blur': {
308
+ if (track.type === 'video') {
309
+ const params = ef.params;
310
+ const s = Number(params?.strength ?? 10);
311
+ effects.push(`gblur=sigma=${s}`);
312
+ }
313
+ break;
314
+ }
315
+ case 'speed': {
316
+ const params = ef.params;
317
+ const rate = Number(params?.rate ?? 1);
318
+ if (rate !== 1) {
319
+ if (track.type === 'video')
320
+ effects.push(`setpts=${(1 / rate).toFixed(6)}*PTS`);
321
+ else
322
+ effects.push(`atempo=${rate.toFixed(3)}`);
323
+ }
324
+ break;
325
+ }
326
+ default:
327
+ break;
328
+ }
329
+ }
330
+ const lIn = newLabel();
331
+ const lOut = newLabel();
332
+ fg.push(`${sel}${trim}${effects.length ? ',' + effects.join(',') : ''}[${lIn}]`);
333
+ fg.push(`[${lIn}]${shift}[${lOut}]`);
334
+ outs.push(`[${lOut}]`);
335
+ }
336
+ // Simplified per-track combine (concat for video, amix for audio)
337
+ if (outs.length) {
338
+ if (track.type === 'audio') {
339
+ const l = newLabel();
340
+ fg.push(`${outs.join('')}amix=inputs=${outs.length}:normalize=0[${l}]`);
341
+ audioTrackOuts.push(`[${l}]`);
342
+ }
343
+ else if (track.type === 'video') {
344
+ if (outs.length === 1) {
345
+ videoTrackOuts.push(outs[0]);
346
+ }
347
+ else {
348
+ const l = newLabel();
349
+ fg.push(`${outs.join('')}concat=n=${outs.length}:v=1:a=0[${l}]`);
350
+ videoTrackOuts.push(`[${l}]`);
351
+ }
352
+ }
353
+ }
354
+ }
355
+ // Ducking (first rule for demo)
356
+ if (project.timeline.mix?.ducking?.length && audioTrackOuts.length >= 2) {
357
+ const rule = project.timeline.mix.ducking[0];
358
+ const music = audioTrackOuts[0];
359
+ const dialog = audioTrackOuts[1];
360
+ const pre = rule.params?.musicPreGain ?? -12;
361
+ const thr = rule.params?.threshold ?? 0.03;
362
+ const ratio = rule.params?.ratio ?? 8;
363
+ const atk = rule.params?.attackMs ?? 5;
364
+ const rel = rule.params?.releaseMs ?? 250;
365
+ const l1 = newLabel();
366
+ const l2 = newLabel();
367
+ fg.push(`${music}volume=${Math.pow(10, pre / 20)}[${l1}]`);
368
+ fg.push(`[${l1}]${dialog}sidechaincompress=threshold=${thr}:ratio=${ratio}:attack=${atk}:release=${rel}[${l2}]`);
369
+ audioTrackOuts[0] = `[${l2}]`;
370
+ }
371
+ // Calculate total video duration
372
+ let totalVideoDurationMs = 0;
373
+ for (const track of project.timeline.tracks) {
374
+ if (track.type === 'video') {
375
+ for (const clip of track.clips) {
376
+ const endTime = clip.startMs + clip.durationMs;
377
+ totalVideoDurationMs = Math.max(totalVideoDurationMs, endTime);
378
+ }
379
+ }
380
+ }
381
+ const totalVideoDurationSec = totalVideoDurationMs / 1000;
382
+ // Mixdown
383
+ const outV = videoTrackOuts.length > 1
384
+ ? (() => {
385
+ const l = newLabel();
386
+ fg.push(`${videoTrackOuts.join('')}concat=n=${videoTrackOuts.length}:v=1:a=0[${l}]`);
387
+ return `[${l}]`;
388
+ })()
389
+ : videoTrackOuts[0] || '';
390
+ // Process subtitle audio clips
391
+ const dialogAudioOuts = [];
392
+ if (project.subtitles?.length) {
393
+ for (const subtitle of project.subtitles) {
394
+ if (subtitle.audio) {
395
+ const asset = project.assets.find(a => a.id === subtitle.audio);
396
+ if (asset) {
397
+ const idx = inputIndexByAsset[asset.id];
398
+ const sel = `[${idx}:a]`;
399
+ const dur = (subtitle.endMs - subtitle.startMs) / 1000;
400
+ const tpadSec = subtitle.startMs / 1000;
401
+ const lIn = newLabel();
402
+ const lOut = newLabel();
403
+ fg.push(`${sel}atrim=start=0:duration=${dur},asetpts=PTS-STARTPTS[${lIn}]`);
404
+ fg.push(`[${lIn}]adelay=${Math.round(tpadSec * 1000)}|${Math.round(tpadSec * 1000)}[${lOut}]`);
405
+ dialogAudioOuts.push(`[${lOut}]`);
406
+ }
407
+ }
408
+ }
409
+ }
410
+ // Process audio with looping if needed
411
+ let outA = '';
412
+ if (audioTrackOuts.length > 0 || dialogAudioOuts.length > 0) {
413
+ let bgmAudio = '';
414
+ let dialogAudio = '';
415
+ // Mix background audio tracks
416
+ if (audioTrackOuts.length > 0) {
417
+ bgmAudio =
418
+ audioTrackOuts.length > 1
419
+ ? (() => {
420
+ const l = newLabel();
421
+ fg.push(`${audioTrackOuts.join('')}amix=inputs=${audioTrackOuts.length}:normalize=0[${l}]`);
422
+ return `[${l}]`;
423
+ })()
424
+ : audioTrackOuts[0];
425
+ // Add BGM looping to match video duration
426
+ if (totalVideoDurationSec > 0) {
427
+ const l = newLabel();
428
+ fg.push(`${bgmAudio}aloop=loop=-1:size=2e+09,atrim=duration=${totalVideoDurationSec}[${l}]`);
429
+ bgmAudio = `[${l}]`;
430
+ }
431
+ }
432
+ // Mix dialog audio clips
433
+ if (dialogAudioOuts.length > 0) {
434
+ dialogAudio =
435
+ dialogAudioOuts.length > 1
436
+ ? (() => {
437
+ const l = newLabel();
438
+ fg.push(`${dialogAudioOuts.join('')}amix=inputs=${dialogAudioOuts.length}:normalize=0[${l}]`);
439
+ return `[${l}]`;
440
+ })()
441
+ : dialogAudioOuts[0];
442
+ }
443
+ // Apply ducking: lower BGM when dialog is playing
444
+ if (bgmAudio && dialogAudio) {
445
+ // Simple approach: lower BGM volume and mix with dialog
446
+ const l1 = newLabel();
447
+ const l2 = newLabel();
448
+ fg.push(`${bgmAudio}volume=0.3[${l1}]`); // Lower BGM volume to 30%
449
+ fg.push(`[${l1}]${dialogAudio}amix=inputs=2:normalize=0[${l2}]`);
450
+ outA = `[${l2}]`;
451
+ }
452
+ else if (bgmAudio) {
453
+ outA = bgmAudio;
454
+ }
455
+ else if (dialogAudio) {
456
+ outA = dialogAudio;
457
+ }
458
+ }
459
+ // Subtitles strategy
460
+ const strat = opts.subtitleStrategy ?? 'auto';
461
+ let finalV = outV;
462
+ if (project.subtitles?.length && outV) {
463
+ const libassOk = strat === 'ass' || (strat === 'auto' && hasLibass(ffmpegBin));
464
+ if (libassOk) {
465
+ // ASS mode
466
+ const def = project.subtitles[0]?.style || {};
467
+ const ass = composeAssFromItems(project.subtitles, def);
468
+ const assName = opts.subtitlesFileName ?? 'subtitles.ass';
469
+ const assPath = path_1.default.join(tmpDir, assName);
470
+ extraFiles.push({ path: assPath, content: ass });
471
+ const l = newLabel();
472
+ const arg = assPath
473
+ .replace(/\\/g, '/')
474
+ .replace(/:/g, '\\:')
475
+ .replace(/'/g, "\\'");
476
+ fg.push(`${outV}subtitles='${arg}'[${l}]`);
477
+ finalV = `[${l}]`;
478
+ }
479
+ else if (strat === 'srt') {
480
+ // SRT mode
481
+ const srt = composeSrtFromItems(project.subtitles);
482
+ const srtName = opts.subtitlesFileName ?? 'subtitles.srt';
483
+ const srtPath = path_1.default.join(tmpDir, srtName);
484
+ extraFiles.push({ path: srtPath, content: srt });
485
+ const l = newLabel();
486
+ const arg = srtPath
487
+ .replace(/\\/g, '/')
488
+ .replace(/:/g, '\\:')
489
+ .replace(/'/g, "\\'");
490
+ fg.push(`${outV}subtitles='${arg}'[${l}]`);
491
+ finalV = `[${l}]`;
492
+ }
493
+ else {
494
+ // drawtext fallback
495
+ for (const sub of project.subtitles) {
496
+ const l = newLabel();
497
+ const ff = sub.style?.fontFamily
498
+ ? `:fontfile=${sub.style.fontFamily.replace(/\\/g, '/').replace(/:/g, '\\:').replace(/'/g, "\\'")}`
499
+ : '';
500
+ const txt = escapeDrawtextText(sub.text);
501
+ const fc = sub.style?.color && sub.style?.color.match(/^#?[0-9a-fA-F]{6}$/)
502
+ ? `0x${sub.style.color.replace('#', '')}`
503
+ : 'white';
504
+ const bo = sub.style?.bold ? 1 : 0;
505
+ const fs = sub.style?.fontSize ?? 42;
506
+ const oc = sub.style?.outlineColor &&
507
+ sub.style?.outlineColor.match(/^#?[0-9a-fA-F]{6}$/)
508
+ ? `0x${sub.style.outlineColor.replace('#', '')}`
509
+ : '0x000000';
510
+ const ow = Math.max(0, sub.style?.outlineWidth ?? 2);
511
+ const align = sub.style?.align ?? 'center';
512
+ const pos = sub.style?.position;
513
+ const exprX = pos
514
+ ? `w*${pos.x}`
515
+ : align === 'left'
516
+ ? '(0+60)'
517
+ : align === 'right'
518
+ ? '(w-tw-60)'
519
+ : '(w/2-tw/2)';
520
+ const exprY = pos ? `h*${pos.y}` : '(h-th-40)';
521
+ const st = (sub.startMs / 1000).toFixed(3);
522
+ const et = (sub.endMs / 1000).toFixed(3);
523
+ fg.push(`${finalV}drawtext=text='${txt}'${ff}:fontcolor=${fc}:fontsize=${fs}:fontcolor_outline=${oc}:outline=${ow}:bold=${bo}:x=${exprX}:y=${exprY}:enable='between(t,${st},${et})'[${l}]`);
524
+ finalV = `[${l}]`;
525
+ }
526
+ }
527
+ }
528
+ const filterGraph = fg.join(';');
529
+ const args = [
530
+ ...inputArgs,
531
+ '-filter_complex',
532
+ filterGraph,
533
+ '-map',
534
+ finalV || outV || '0:v:0',
535
+ '-map',
536
+ outA || '0:a:0',
537
+ '-c:v',
538
+ project.export.videoCodec,
539
+ ...(project.export.crf != null ? ['-crf', String(project.export.crf)] : []),
540
+ ...(project.export.preset ? ['-preset', project.export.preset] : []),
541
+ '-pix_fmt',
542
+ project.settings.pixelFormat,
543
+ '-c:a',
544
+ project.export.audioCodec,
545
+ ...(project.export.audioBitrate
546
+ ? ['-b:a', project.export.audioBitrate]
547
+ : []),
548
+ project.export.outFile ||
549
+ opts.outFile ||
550
+ `output.${project.export.container}`,
551
+ ];
552
+ const cmd = (0, shell_quote_1.quote)([ffmpegBin, ...args]);
553
+ return { cmd, args, filterGraph, extraFiles, ffmpegBin };
554
+ }
555
+ // ===========================
556
+ // 5) Run helper (Node only)
557
+ // ===========================
558
+ async function runFfmpeg(compiled, writeFiles = true) {
559
+ if (writeFiles && compiled.extraFiles?.length) {
560
+ for (const f of compiled.extraFiles) {
561
+ // Ensure dir exists
562
+ const dir = path_1.default.dirname(f.path);
563
+ if (!fs_1.default.existsSync(dir))
564
+ fs_1.default.mkdirSync(dir, { recursive: true });
565
+ fs_1.default.writeFileSync(f.path, f.content, 'utf-8');
566
+ }
567
+ }
568
+ return await new Promise((resolve, reject) => {
569
+ const child = (0, child_process_1.spawn)(compiled.ffmpegBin, compiled.args, {
570
+ stdio: 'inherit',
571
+ });
572
+ child.on('error', reject);
573
+ child.on('close', code => code === 0
574
+ ? resolve(0)
575
+ : reject(new Error(`ffmpeg exited with code ${code}`)));
576
+ });
577
+ }
578
+ // ===========================
579
+ // 6) Small utilities
580
+ // ===========================
581
+ function escapeDrawtextText(s) {
582
+ return s
583
+ .replace(/\\/g, '\\\\')
584
+ .replace(/:/g, '\\:')
585
+ .replace(/'/g, "\\'")
586
+ .replace(/%/g, '\\%');
587
+ }
588
+ //# sourceMappingURL=videokit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videokit.js","sourceRoot":"","sources":["../../src/utils/videokit.ts"],"names":[],"mappings":"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"}