@remotion/webcodecs 4.0.316 → 4.0.318
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/dist/buffer.d.ts +1 -0
- package/dist/buffer.js +17 -0
- package/dist/create/mp3/create-mp3.d.ts +2 -0
- package/dist/create/mp3/create-mp3.js +79 -0
- package/dist/web-fs.d.ts +1 -0
- package/dist/web-fs.js +17 -0
- package/package.json +5 -14
package/dist/buffer.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './writers/buffer';
|
package/dist/buffer.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./writers/buffer"), exports);
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMp3 = void 0;
|
|
4
|
+
const log_1 = require("../../log");
|
|
5
|
+
// ID3v2 header constants
|
|
6
|
+
const ID3V2_HEADER = new Uint8Array([0x49, 0x44, 0x33]); // "ID3"
|
|
7
|
+
const ID3V2_VERSION = new Uint8Array([0x03, 0x00]); // Version 2.3.0
|
|
8
|
+
const ID3V2_FLAGS = new Uint8Array([0x00]); // No flags
|
|
9
|
+
const encodeSyncSafeInt32 = (value) => {
|
|
10
|
+
return new Uint8Array([
|
|
11
|
+
(value >> 21) & 0x7f,
|
|
12
|
+
(value >> 14) & 0x7f,
|
|
13
|
+
(value >> 7) & 0x7f,
|
|
14
|
+
value & 0x7f,
|
|
15
|
+
]);
|
|
16
|
+
};
|
|
17
|
+
const createId3V2Header = (dataSize) => {
|
|
18
|
+
const header = new Uint8Array(10);
|
|
19
|
+
header.set(ID3V2_HEADER, 0);
|
|
20
|
+
header.set(ID3V2_VERSION, 3);
|
|
21
|
+
header.set(ID3V2_FLAGS, 5);
|
|
22
|
+
header.set(encodeSyncSafeInt32(dataSize), 6);
|
|
23
|
+
return header;
|
|
24
|
+
};
|
|
25
|
+
const createMp3 = async ({ filename, logLevel, onBytesProgress, onMillisecondsProgress, writer, progressTracker, }) => {
|
|
26
|
+
const w = await writer.createContent({
|
|
27
|
+
filename,
|
|
28
|
+
mimeType: 'audio/mpeg',
|
|
29
|
+
logLevel,
|
|
30
|
+
});
|
|
31
|
+
// Write minimal ID3v2 header (10 bytes header + 0 bytes data)
|
|
32
|
+
const id3Header = createId3V2Header(0);
|
|
33
|
+
await w.write(id3Header);
|
|
34
|
+
const operationProm = { current: Promise.resolve() };
|
|
35
|
+
const addSample = async (chunk) => {
|
|
36
|
+
log_1.Log.trace(logLevel, 'Adding MP3 sample', chunk);
|
|
37
|
+
// Write the raw audio data (assuming it's already MP3-encoded)
|
|
38
|
+
await w.write(chunk.data);
|
|
39
|
+
onMillisecondsProgress((chunk.timestamp + (chunk.duration ?? 0)) / 1000);
|
|
40
|
+
onBytesProgress(w.getWrittenByteCount());
|
|
41
|
+
};
|
|
42
|
+
const waitForFinishPromises = [];
|
|
43
|
+
return {
|
|
44
|
+
getBlob: () => {
|
|
45
|
+
return w.getBlob();
|
|
46
|
+
},
|
|
47
|
+
remove: () => {
|
|
48
|
+
return w.remove();
|
|
49
|
+
},
|
|
50
|
+
addSample: ({ chunk, trackNumber }) => {
|
|
51
|
+
if (trackNumber !== 1) {
|
|
52
|
+
throw new Error('Only one track supported for MP3');
|
|
53
|
+
}
|
|
54
|
+
operationProm.current = operationProm.current.then(() => addSample(chunk));
|
|
55
|
+
progressTracker.updateTrackProgress(trackNumber, chunk.timestamp);
|
|
56
|
+
return operationProm.current;
|
|
57
|
+
},
|
|
58
|
+
updateTrackSampleRate: () => {
|
|
59
|
+
// MP3 sample rate is encoded in the frame headers, so no separate update needed
|
|
60
|
+
},
|
|
61
|
+
addWaitForFinishPromise: (promise) => {
|
|
62
|
+
waitForFinishPromises.push(promise);
|
|
63
|
+
},
|
|
64
|
+
async waitForFinish() {
|
|
65
|
+
log_1.Log.verbose(logLevel, 'All MP3 write operations queued. Waiting for finish...');
|
|
66
|
+
await Promise.all(waitForFinishPromises.map((p) => p()));
|
|
67
|
+
await operationProm.current;
|
|
68
|
+
await w.finish();
|
|
69
|
+
},
|
|
70
|
+
addTrack: async (track) => {
|
|
71
|
+
if (track.type !== 'audio') {
|
|
72
|
+
throw new Error('Only audio tracks supported for MP3');
|
|
73
|
+
}
|
|
74
|
+
progressTracker.registerTrack(1);
|
|
75
|
+
return Promise.resolve({ trackNumber: 1 });
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
exports.createMp3 = createMp3;
|
package/dist/web-fs.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './writers/web-fs';
|
package/dist/web-fs.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./writers/web-fs"), exports);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/webcodecs",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.318",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/esm/index.mjs",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"author": "Jonny Burger <jonny@remotion.dev>",
|
|
20
20
|
"license": "Remotion License (See https://remotion.dev/docs/webcodecs#license)",
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@remotion/media-parser": "4.0.
|
|
23
|
-
"@remotion/licensing": "4.0.
|
|
22
|
+
"@remotion/media-parser": "4.0.318",
|
|
23
|
+
"@remotion/licensing": "4.0.318"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {},
|
|
26
26
|
"devDependencies": {
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
"vite": "5.4.19",
|
|
30
30
|
"@playwright/test": "1.51.1",
|
|
31
31
|
"eslint": "9.19.0",
|
|
32
|
-
"@remotion/example-videos": "4.0.
|
|
33
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
32
|
+
"@remotion/example-videos": "4.0.318",
|
|
33
|
+
"@remotion/eslint-config-internal": "4.0.318"
|
|
34
34
|
},
|
|
35
35
|
"keywords": [],
|
|
36
36
|
"publishConfig": {
|
|
@@ -55,12 +55,6 @@
|
|
|
55
55
|
"module": "./dist/esm/buffer.mjs",
|
|
56
56
|
"import": "./dist/esm/buffer.mjs"
|
|
57
57
|
},
|
|
58
|
-
"./node": {
|
|
59
|
-
"types": "./dist/writers/node.d.ts",
|
|
60
|
-
"require": "./dist/writers/node.js",
|
|
61
|
-
"module": "./dist/esm/node.mjs",
|
|
62
|
-
"import": "./dist/esm/node.mjs"
|
|
63
|
-
},
|
|
64
58
|
"./package.json": "./package.json"
|
|
65
59
|
},
|
|
66
60
|
"typesVersions": {
|
|
@@ -68,9 +62,6 @@
|
|
|
68
62
|
"web-fs": [
|
|
69
63
|
"dist/writers/web-fs.d.ts"
|
|
70
64
|
],
|
|
71
|
-
"node": [
|
|
72
|
-
"dist/writers/node.d.ts"
|
|
73
|
-
],
|
|
74
65
|
"buffer": [
|
|
75
66
|
"dist/writers/buffer.d.ts"
|
|
76
67
|
]
|