@omnimedia/omnitool 1.0.0

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.
Files changed (40) hide show
  1. package/README.md +2 -0
  2. package/package.json +29 -0
  3. package/s/index.ts +41 -0
  4. package/s/parts/compositor.ts +5 -0
  5. package/s/parts/export.ts +5 -0
  6. package/s/parts/video-decoder.ts +27 -0
  7. package/s/parts/video-encoder.ts +15 -0
  8. package/s/tools/generate-id.ts +7 -0
  9. package/s/tools/mp4boxjs/LICENSE.md +24 -0
  10. package/s/tools/mp4boxjs/demuxer.ts +106 -0
  11. package/s/tools/mp4boxjs/mp4box.adapter.ts +148 -0
  12. package/s/tools/mp4boxjs/mp4box.js +8206 -0
  13. package/s/types.ts +10 -0
  14. package/x/index.d.ts +9 -0
  15. package/x/index.js +30 -0
  16. package/x/index.js.map +1 -0
  17. package/x/parts/compositor.d.ts +4 -0
  18. package/x/parts/compositor.js +5 -0
  19. package/x/parts/compositor.js.map +1 -0
  20. package/x/parts/export.d.ts +7 -0
  21. package/x/parts/export.js +5 -0
  22. package/x/parts/export.js.map +1 -0
  23. package/x/parts/video-decoder.d.ts +8 -0
  24. package/x/parts/video-decoder.js +20 -0
  25. package/x/parts/video-decoder.js.map +1 -0
  26. package/x/parts/video-encoder.d.ts +6 -0
  27. package/x/parts/video-encoder.js +12 -0
  28. package/x/parts/video-encoder.js.map +1 -0
  29. package/x/tools/generate-id.d.ts +1 -0
  30. package/x/tools/generate-id.js +8 -0
  31. package/x/tools/generate-id.js.map +1 -0
  32. package/x/tools/mp4boxjs/demuxer.d.ts +24 -0
  33. package/x/tools/mp4boxjs/demuxer.js +88 -0
  34. package/x/tools/mp4boxjs/demuxer.js.map +1 -0
  35. package/x/tools/mp4boxjs/mp4box.adapter.d.ts +128 -0
  36. package/x/tools/mp4boxjs/mp4box.adapter.js +11 -0
  37. package/x/tools/mp4boxjs/mp4box.adapter.js.map +1 -0
  38. package/x/types.d.ts +7 -0
  39. package/x/types.js +2 -0
  40. package/x/types.js.map +1 -0
package/s/types.ts ADDED
@@ -0,0 +1,10 @@
1
+ import {MP4Demuxer} from "./tools/mp4boxjs/demuxer.js";
2
+
3
+ export interface Clip {
4
+ id: string
5
+ }
6
+
7
+ export interface LoadedVideoClip extends Clip {
8
+ demuxer: MP4Demuxer
9
+ }
10
+
package/x/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { Clip } from "./types.js";
2
+ import { OmniVideoDecoder } from "./parts/video-decoder.js";
3
+ export declare class OmniTool {
4
+ #private;
5
+ videoDecoder: OmniVideoDecoder;
6
+ constructor(ffmpeg: any);
7
+ load(file: File): Promise<Clip>;
8
+ getFramesCount(): Promise<void>;
9
+ }
package/x/index.js ADDED
@@ -0,0 +1,30 @@
1
+ import { MP4Demuxer } from "./tools/mp4boxjs/demuxer.js";
2
+ import { generateId } from "./tools/generate-id.js";
3
+ import { OmniVideoDecoder } from "./parts/video-decoder.js";
4
+ export class OmniTool {
5
+ #clips = new Map();
6
+ #getLoadedClip = (clip) => this.#clips.get(clip);
7
+ videoDecoder = new OmniVideoDecoder(this.#getLoadedClip);
8
+ // ffmpeg node or web version
9
+ constructor(ffmpeg) { }
10
+ load(file) {
11
+ return new Promise((resolve) => {
12
+ const demuxer = new MP4Demuxer(file, {
13
+ onChunk: () => { },
14
+ onConfig: () => { },
15
+ framesCount: () => { },
16
+ setStatus: () => { },
17
+ OnReady: () => {
18
+ const demuxed = { id: generateId(), demuxer };
19
+ this.#clips.set(demuxed, demuxed);
20
+ resolve(demuxed);
21
+ }
22
+ });
23
+ });
24
+ }
25
+ async getFramesCount() { }
26
+ }
27
+ const tool = new OmniTool('ffmpeg');
28
+ // const file = tool.load()
29
+ // tool.videoDecoder.decode(file)
30
+ //# sourceMappingURL=index.js.map
package/x/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../s/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,6BAA6B,CAAA;AAGtD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAE3D,MAAM,OAAO,QAAQ;IACpB,MAAM,GAA+B,IAAI,GAAG,EAAE,CAAA;IAC9C,cAAc,GAAG,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAEtD,YAAY,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAExD,6BAA6B;IAC7B,YAAY,MAAM,IAAG,CAAC;IAGtB,IAAI,CAAC,IAAU;QACd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC9B,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE;gBACpC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;gBACjB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;gBAClB,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC;gBACrB,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC;gBACnB,OAAO,EAAE,GAAG,EAAE;oBACb,MAAM,OAAO,GAAG,EAAC,EAAE,EAAE,UAAU,EAAE,EAAE,OAAO,EAAC,CAAA;oBAC3C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;oBACjC,OAAO,CAAC,OAAO,CAAC,CAAA;gBACjB,CAAC;aACD,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IAEH,CAAC;IAED,KAAK,CAAC,cAAc,KAAI,CAAC;CACzB;AAED,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAA;AACnC,2BAA2B;AAC3B,iCAAiC"}
@@ -0,0 +1,4 @@
1
+ export declare class Compositor {
2
+ constructor();
3
+ crossfade([...clips]: Iterable<any>): void;
4
+ }
@@ -0,0 +1,5 @@
1
+ export class Compositor {
2
+ constructor() { }
3
+ crossfade([...clips]) { }
4
+ }
5
+ //# sourceMappingURL=compositor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compositor.js","sourceRoot":"","sources":["../../s/parts/compositor.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAU;IACtB,gBAAe,CAAC;IAEhB,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,IAAG,CAAC;CACxB"}
@@ -0,0 +1,7 @@
1
+ export declare class Export {
2
+ constructor();
3
+ export(clip: any, { container, codec }: {
4
+ container: any;
5
+ codec: any;
6
+ }): void;
7
+ }
@@ -0,0 +1,5 @@
1
+ export class Export {
2
+ constructor() { }
3
+ export(clip, { container, codec }) { }
4
+ }
5
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../s/parts/export.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,MAAM;IAClB,gBAAe,CAAC;IAEhB,MAAM,CAAC,IAAI,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,IAAG,CAAC;CACnC"}
@@ -0,0 +1,8 @@
1
+ import { Clip, LoadedVideoClip } from "../types.js";
2
+ export declare class OmniVideoDecoder {
3
+ #private;
4
+ private getLoadedClip;
5
+ constructor(getLoadedClip: (clip: Clip) => LoadedVideoClip | undefined);
6
+ decodeVideo(clip: Clip): void;
7
+ seek(clip: Clip): void;
8
+ }
@@ -0,0 +1,20 @@
1
+ export class OmniVideoDecoder {
2
+ getLoadedClip;
3
+ #decoder = new VideoDecoder({
4
+ output: () => this.#output(),
5
+ error: () => this.#error()
6
+ });
7
+ constructor(getLoadedClip) {
8
+ this.getLoadedClip = getLoadedClip;
9
+ }
10
+ #output() { }
11
+ #error() { }
12
+ decodeVideo(clip) {
13
+ const loaded = this.getLoadedClip(clip);
14
+ }
15
+ seek(clip) {
16
+ const loaded = this.getLoadedClip(clip);
17
+ loaded?.demuxer.seek();
18
+ }
19
+ }
20
+ //# sourceMappingURL=video-decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-decoder.js","sourceRoot":"","sources":["../../s/parts/video-decoder.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,gBAAgB;IAQnB;IANT,QAAQ,GAAG,IAAI,YAAY,CAAC;QAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;QAC5B,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;KAC1B,CAAC,CAAA;IAEF,YACS,aACmB;QADnB,kBAAa,GAAb,aAAa,CACM;IACzB,CAAC;IAEJ,OAAO,KAAI,CAAC;IAEZ,MAAM,KAAI,CAAC;IAEX,WAAW,CAAC,IAAU;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,CAAC,IAAU;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QACvC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,CAAA;IACvB,CAAC;CACD"}
@@ -0,0 +1,6 @@
1
+ export declare class OmniVideoEncoder {
2
+ #private;
3
+ encoder: VideoEncoder;
4
+ constructor();
5
+ encode(): void;
6
+ }
@@ -0,0 +1,12 @@
1
+ export class OmniVideoEncoder {
2
+ encoder = new VideoEncoder({
3
+ output: () => this.#output(),
4
+ error: () => this.#error()
5
+ });
6
+ constructor() {
7
+ }
8
+ #output() { }
9
+ #error() { }
10
+ encode() { }
11
+ }
12
+ //# sourceMappingURL=video-encoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"video-encoder.js","sourceRoot":"","sources":["../../s/parts/video-encoder.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAgB;IAC5B,OAAO,GAAG,IAAI,YAAY,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;QAC5B,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;KAC1B,CAAC,CAAA;IAEF;IACA,CAAC;IAED,OAAO,KAAI,CAAC;IAEZ,MAAM,KAAI,CAAC;IAEX,MAAM,KAAI,CAAC;CACX"}
@@ -0,0 +1 @@
1
+ export declare function generateId(bytes?: number): string;
@@ -0,0 +1,8 @@
1
+ export function generateId(bytes = 32) {
2
+ const array = new Uint8Array(bytes);
3
+ const random = crypto.getRandomValues(array);
4
+ return [...random]
5
+ .map(b => b.toString(16).padStart(2, "0"))
6
+ .join("");
7
+ }
8
+ //# sourceMappingURL=generate-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-id.js","sourceRoot":"","sources":["../../s/tools/generate-id.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAK,GAAG,EAAE;IACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IAC5C,OAAO,CAAC,GAAG,MAAM,CAAC;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACzC,IAAI,CAAC,EAAE,CAAC,CAAA;AACX,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { MP4File } from "./mp4box.adapter.js";
2
+ export type Status = "render" | "decode" | "demux" | "fetch";
3
+ type SetStatus = (status: Status, message: string) => void;
4
+ type OnChunk = (chunk: EncodedVideoChunk) => void;
5
+ type OnConfig = (config: VideoDecoderConfig) => void;
6
+ type OnReady = (boolean: boolean) => void;
7
+ export declare class MP4FileSink {
8
+ #private;
9
+ constructor(file: MP4File, setStatus: SetStatus);
10
+ write(chunk: ArrayBuffer): void;
11
+ close(): void;
12
+ }
13
+ export declare class MP4Demuxer {
14
+ #private;
15
+ constructor(file: File, { onConfig, onChunk, setStatus, framesCount, OnReady }: {
16
+ onConfig: OnConfig;
17
+ onChunk: OnChunk;
18
+ setStatus: SetStatus;
19
+ framesCount: (frames: number) => void;
20
+ OnReady: OnReady;
21
+ });
22
+ seek(): void;
23
+ }
24
+ export {};
@@ -0,0 +1,88 @@
1
+ import MP4Box from "./mp4box.adapter.js";
2
+ export class MP4FileSink {
3
+ #setStatus;
4
+ #file;
5
+ #offset = 0;
6
+ constructor(file, setStatus) {
7
+ this.#file = file;
8
+ this.#setStatus = setStatus;
9
+ }
10
+ write(chunk) {
11
+ const buffer = new ArrayBuffer(chunk.byteLength);
12
+ //@ts-ignore
13
+ new Uint8Array(buffer).set(chunk);
14
+ //@ts-ignore
15
+ buffer.fileStart = this.#offset;
16
+ this.#offset += buffer.byteLength;
17
+ this.#setStatus("fetch", (this.#offset / (1024 ** 2)).toFixed(1) + " MiB");
18
+ //@ts-ignore
19
+ this.#file.appendBuffer(buffer);
20
+ }
21
+ close() {
22
+ this.#setStatus("fetch", "Done");
23
+ this.#file.flush();
24
+ }
25
+ }
26
+ export class MP4Demuxer {
27
+ #onConfig;
28
+ #onChunk;
29
+ #OnReady;
30
+ #setStatus;
31
+ #framesCount;
32
+ #file;
33
+ constructor(file, { onConfig, onChunk, setStatus, framesCount, OnReady }) {
34
+ this.#onConfig = onConfig;
35
+ this.#onChunk = onChunk;
36
+ this.#setStatus = setStatus;
37
+ this.#framesCount = framesCount;
38
+ this.#OnReady = OnReady;
39
+ this.#file = MP4Box.createFile();
40
+ this.#file.onError = error => setStatus("demux", error);
41
+ this.#file.onReady = this.#onReady.bind(this);
42
+ this.#file.onSamples = this.#onSamples.bind(this);
43
+ const fileSink = new MP4FileSink(this.#file, setStatus);
44
+ file.stream().pipeTo(new WritableStream(fileSink, { highWaterMark: 1 }));
45
+ }
46
+ seek() {
47
+ console.log("seek", this.#file.seek);
48
+ }
49
+ #description(track) {
50
+ const trak = this.#file.getTrackById(track.id);
51
+ for (const entry of trak.mdia.minf.stbl.stsd.entries) {
52
+ //@ts-ignore
53
+ const box = entry.avcC || entry.hvcC || entry.vpcC || entry.av1C;
54
+ if (box) {
55
+ //@ts-ignore
56
+ const stream = new MP4Box.DataStream(undefined, 0, MP4Box.DataStream.BIG_ENDIAN);
57
+ box.write(stream);
58
+ return new Uint8Array(stream.buffer, 8); // Remove the box header.
59
+ }
60
+ }
61
+ throw new Error("avcC, hvcC, vpcC, or av1C box not found");
62
+ }
63
+ #onReady(info) {
64
+ this.#OnReady(true);
65
+ this.#setStatus("demux", "Ready");
66
+ const track = info.videoTracks[0];
67
+ this.#onConfig({
68
+ codec: track.codec.startsWith('vp08') ? 'vp8' : track.codec,
69
+ codedHeight: track.video.height,
70
+ codedWidth: track.video.width,
71
+ description: this.#description(track),
72
+ });
73
+ this.#framesCount(track.nb_samples);
74
+ this.#file.setExtractionOptions(track.id);
75
+ // this.#file.start()
76
+ }
77
+ #onSamples(track_id, ref, samples) {
78
+ for (const sample of samples) {
79
+ this.#onChunk(new EncodedVideoChunk({
80
+ type: sample.is_sync ? "key" : "delta",
81
+ timestamp: 1e6 * sample.cts / sample.timescale,
82
+ duration: 1e6 * sample.duration / sample.timescale,
83
+ data: sample.data
84
+ }));
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=demuxer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demuxer.js","sourceRoot":"","sources":["../../../s/tools/mp4boxjs/demuxer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ export interface MP4MediaTrack {
2
+ id: number;
3
+ created: Date;
4
+ modified: Date;
5
+ movie_duration: number;
6
+ layer: number;
7
+ alternate_group: number;
8
+ volume: number;
9
+ track_width: number;
10
+ track_height: number;
11
+ timescale: number;
12
+ duration: number;
13
+ bitrate: number;
14
+ codec: string;
15
+ language: string;
16
+ nb_samples: number;
17
+ type: string;
18
+ }
19
+ export interface MP4VideoData {
20
+ width: number;
21
+ height: number;
22
+ }
23
+ export interface MP4VideoTrack extends MP4MediaTrack {
24
+ video: MP4VideoData;
25
+ }
26
+ export interface MP4AudioTrack extends MP4MediaTrack {
27
+ audio: MP4AudioData;
28
+ }
29
+ export interface MP4Info {
30
+ duration: number;
31
+ timescale: number;
32
+ fragment_duration: number;
33
+ isFragmented: boolean;
34
+ isProgressive: boolean;
35
+ hasIOD: boolean;
36
+ brands: string[];
37
+ created: Date;
38
+ modified: Date;
39
+ tracks: MP4Track[];
40
+ audioTracks: MP4AudioTrack[];
41
+ videoTracks: MP4VideoTrack[];
42
+ }
43
+ export interface MP4AudioData {
44
+ sample_rate: number;
45
+ channel_count: number;
46
+ sample_size: number;
47
+ }
48
+ export interface Moov {
49
+ type: string;
50
+ hdr_size: Number;
51
+ size: Number;
52
+ start: Number;
53
+ traks: any;
54
+ uuid: String | undefined;
55
+ }
56
+ export interface MP4File {
57
+ onMoovStart?: () => void;
58
+ onReady?: (info: MP4Info) => void;
59
+ onError?: (e: string) => void;
60
+ onSamples?: (track_id: number, _ref: any, samples: any) => void;
61
+ setExtractionOptions: (id: number) => void;
62
+ moov: Moov;
63
+ appendBuffer(data: MP4ArrayBuffer): number;
64
+ start(): void;
65
+ stop(): void;
66
+ flush(): void;
67
+ getTrackById: (id: number) => Trak;
68
+ }
69
+ type MP4Track = MP4VideoTrack | MP4AudioTrack;
70
+ export interface MP4Box {
71
+ createFile(): MP4File;
72
+ DataStream: new (arrayBuffer: ArrayBuffer, byteOffset: number, endianness: boolean) => XDataStream;
73
+ }
74
+ export type MP4ArrayBuffer = ArrayBuffer & {
75
+ fileStart: number;
76
+ };
77
+ export interface TrackOptions {
78
+ timescale: number;
79
+ width: number;
80
+ height: number;
81
+ nb_samples: number;
82
+ avcDecoderConfigRecord: AllowSharedBufferSource | undefined;
83
+ }
84
+ export interface SampleOptions {
85
+ duration: number;
86
+ dts: number;
87
+ cts: number;
88
+ is_sync: boolean;
89
+ }
90
+ export interface MP4File {
91
+ onMoovStart?: () => void;
92
+ onReady?: (info: MP4Info) => void;
93
+ onError?: (e: string) => void;
94
+ appendBuffer(data: MP4ArrayBuffer): number;
95
+ start(): void;
96
+ stop(): void;
97
+ flush(): void;
98
+ addTrack(trackOptions: TrackOptions): MP4Track;
99
+ addSample(track: MP4Track, data: ArrayBuffer, sampleOptions: SampleOptions): void;
100
+ save(file: string): void;
101
+ }
102
+ export declare class XDataStream {
103
+ static BIG_ENDIAN: boolean;
104
+ static LITTLE_ENDIAN: boolean;
105
+ buffer?: ArrayBuffer;
106
+ constructor(arrayBuffer: ArrayBuffer, byteOffset: number, endianness: boolean);
107
+ }
108
+ export interface Trak {
109
+ mdia?: {
110
+ minf?: {
111
+ stbl?: {
112
+ stsd?: {
113
+ entries: {
114
+ avcC?: {
115
+ write: (stream: XDataStream) => void;
116
+ };
117
+ hvcC?: {
118
+ write: (stream: XDataStream) => void;
119
+ };
120
+ }[];
121
+ };
122
+ };
123
+ };
124
+ };
125
+ }
126
+ declare const _default: MP4Box;
127
+ export default _default;
128
+ export declare const DataStreamx: XDataStream;
@@ -0,0 +1,11 @@
1
+ // @ts-ignore
2
+ import { mp4box } from "./mp4box.js";
3
+ export class XDataStream {
4
+ static BIG_ENDIAN;
5
+ static LITTLE_ENDIAN;
6
+ buffer;
7
+ constructor(arrayBuffer, byteOffset, endianness) { }
8
+ }
9
+ export default mp4box;
10
+ export const DataStreamx = mp4box.DataStream;
11
+ //# sourceMappingURL=mp4box.adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mp4box.adapter.js","sourceRoot":"","sources":["../../../s/tools/mp4boxjs/mp4box.adapter.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAsHlC,MAAM,OAAO,WAAW;IACvB,MAAM,CAAC,UAAU,CAAU;IAC3B,MAAM,CAAC,aAAa,CAAU;IAC9B,MAAM,CAAe;IACrB,YAAY,WAAwB,EAAE,UAAkB,EAAE,UAAmB,IAAG,CAAC;CAEjF;AAqBD,eAAe,MAAgB,CAAC;AAChC,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,UAAyB,CAAA"}
package/x/types.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { MP4Demuxer } from "./tools/mp4boxjs/demuxer.js";
2
+ export interface Clip {
3
+ id: string;
4
+ }
5
+ export interface LoadedVideoClip extends Clip {
6
+ demuxer: MP4Demuxer;
7
+ }
package/x/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
package/x/types.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../s/types.ts"],"names":[],"mappings":""}