@remotion/webcodecs 4.0.231 → 4.0.233
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/README.md +2 -2
- package/dist/audio-decoder-config.d.ts +2 -1
- package/dist/audio-decoder-config.js +44 -3
- package/dist/audio-decoder.d.ts +6 -3
- package/dist/audio-decoder.js +26 -4
- package/dist/audio-encoder-config.d.ts +4 -1
- package/dist/audio-encoder-config.js +6 -0
- package/dist/audio-encoder.d.ts +6 -4
- package/dist/audio-encoder.js +15 -3
- package/dist/browser-quirks.d.ts +1 -0
- package/dist/browser-quirks.js +5 -1
- package/dist/can-copy-audio-track.d.ts +1 -1
- package/dist/can-copy-audio-track.js +3 -0
- package/dist/can-copy-video-track.d.ts +4 -2
- package/dist/can-copy-video-track.js +10 -2
- package/dist/can-reencode-audio-track.d.ts +4 -3
- package/dist/can-reencode-audio-track.js +5 -2
- package/dist/can-reencode-video-track.d.ts +1 -1
- package/dist/codec-id.d.ts +2 -2
- package/dist/codec-id.js +8 -2
- package/dist/convert-media.d.ts +5 -2
- package/dist/convert-media.js +11 -8
- package/dist/convert-to-correct-videoframe.d.ts +1 -1
- package/dist/convert-to-correct-videoframe.js +8 -0
- package/dist/default-on-video-track-handler.js +12 -2
- package/dist/esm/index.mjs +463 -160
- package/dist/generate-output-filename.d.ts +1 -1
- package/dist/get-available-audio-codecs.d.ts +7 -0
- package/dist/get-available-audio-codecs.js +18 -0
- package/dist/get-available-containers.d.ts +4 -0
- package/dist/get-available-containers.js +8 -0
- package/dist/get-available-video-codecs.d.ts +7 -0
- package/dist/get-available-video-codecs.js +18 -0
- package/dist/get-default-audio-codec.d.ts +2 -1
- package/dist/get-default-audio-codec.js +3 -0
- package/dist/get-default-video-codec.d.ts +3 -2
- package/dist/get-default-video-codec.js +7 -1
- package/dist/get-wave-audio-decoder.d.ts +2 -0
- package/dist/get-wave-audio-decoder.js +29 -0
- package/dist/index.d.ts +10 -1
- package/dist/index.js +12 -5
- package/dist/io-manager/event-emitter.d.ts +4 -0
- package/dist/io-manager/event-emitter.js +1 -0
- package/dist/io-manager/io-synchronizer.d.ts +8 -2
- package/dist/io-manager/io-synchronizer.js +31 -14
- package/dist/io-manager/make-timeout-promise.d.ts +4 -0
- package/dist/io-manager/make-timeout-promise.js +18 -0
- package/dist/on-audio-track-handler.d.ts +2 -1
- package/dist/on-audio-track.d.ts +5 -3
- package/dist/on-audio-track.js +9 -4
- package/dist/on-frame.d.ts +3 -2
- package/dist/on-frame.js +24 -19
- package/dist/on-video-track-handler.d.ts +4 -1
- package/dist/on-video-track.d.ts +6 -3
- package/dist/on-video-track.js +20 -5
- package/dist/rotate-video-frame.d.ts +5 -0
- package/dist/rotate-video-frame.js +48 -0
- package/dist/rotate-video.d.ts +4 -0
- package/dist/rotate-video.js +43 -0
- package/dist/rotation.d.ts +8 -0
- package/dist/rotation.js +10 -0
- package/dist/select-container-creator.d.ts +2 -0
- package/dist/select-container-creator.js +17 -0
- package/dist/test/avi-to-mp4.test.js +15 -0
- package/dist/video-decoder.d.ts +3 -2
- package/dist/video-decoder.js +11 -3
- package/dist/video-encoder-config.d.ts +1 -1
- package/dist/video-encoder.d.ts +4 -3
- package/dist/video-encoder.js +7 -2
- package/dist/wav-audio-encoder.d.ts +2 -0
- package/dist/wav-audio-encoder.js +26 -0
- package/package.json +5 -3
package/dist/on-video-track.js
CHANGED
|
@@ -10,11 +10,13 @@ const default_on_video_track_handler_1 = require("./default-on-video-track-handl
|
|
|
10
10
|
const error_cause_1 = __importDefault(require("./error-cause"));
|
|
11
11
|
const log_1 = require("./log");
|
|
12
12
|
const on_frame_1 = require("./on-frame");
|
|
13
|
+
const rotation_1 = require("./rotation");
|
|
13
14
|
const video_decoder_1 = require("./video-decoder");
|
|
14
15
|
const video_decoder_config_1 = require("./video-decoder-config");
|
|
15
16
|
const video_encoder_1 = require("./video-encoder");
|
|
16
17
|
const video_encoder_config_1 = require("./video-encoder-config");
|
|
17
|
-
const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortConversion, controller, defaultVideoCodec, onVideoTrack, logLevel, container, }) => async (track) => {
|
|
18
|
+
const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortConversion, controller, defaultVideoCodec, onVideoTrack, logLevel, container, rotate, progress, }) => async (track) => {
|
|
19
|
+
var _a;
|
|
18
20
|
if (controller.signal.aborted) {
|
|
19
21
|
throw new error_cause_1.default('Aborted');
|
|
20
22
|
}
|
|
@@ -23,6 +25,7 @@ const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortC
|
|
|
23
25
|
defaultVideoCodec,
|
|
24
26
|
logLevel,
|
|
25
27
|
container,
|
|
28
|
+
rotate,
|
|
26
29
|
});
|
|
27
30
|
if (videoOperation.type === 'drop') {
|
|
28
31
|
return null;
|
|
@@ -57,10 +60,19 @@ const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortC
|
|
|
57
60
|
});
|
|
58
61
|
};
|
|
59
62
|
}
|
|
63
|
+
if (videoOperation.type !== 'reencode') {
|
|
64
|
+
throw new error_cause_1.default(`Video track with ID ${track.trackId} could not be resolved with a valid operation. Received ${JSON.stringify(videoOperation)}, but must be either "copy", "reencode", "drop" or "fail"`);
|
|
65
|
+
}
|
|
66
|
+
const rotation = (_a = videoOperation.rotate) !== null && _a !== void 0 ? _a : -track.rotation;
|
|
67
|
+
const { height: newHeight, width: newWidth } = (0, rotation_1.calculateNewDimensionsFromDimensions)({
|
|
68
|
+
width: track.codedWidth,
|
|
69
|
+
height: track.codedHeight,
|
|
70
|
+
rotation,
|
|
71
|
+
});
|
|
60
72
|
const videoEncoderConfig = await (0, video_encoder_config_1.getVideoEncoderConfig)({
|
|
61
73
|
codec: videoOperation.videoCodec,
|
|
62
|
-
height:
|
|
63
|
-
width:
|
|
74
|
+
height: newHeight,
|
|
75
|
+
width: newWidth,
|
|
64
76
|
fps: track.fps,
|
|
65
77
|
});
|
|
66
78
|
const videoDecoderConfig = await (0, video_decoder_config_1.getVideoDecoderConfigWithHardwareAcceleration)(track);
|
|
@@ -75,8 +87,8 @@ const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortC
|
|
|
75
87
|
const { trackNumber } = await state.addTrack({
|
|
76
88
|
type: 'video',
|
|
77
89
|
color: track.color,
|
|
78
|
-
width:
|
|
79
|
-
height:
|
|
90
|
+
width: newWidth,
|
|
91
|
+
height: newHeight,
|
|
80
92
|
codec: videoOperation.videoCodec,
|
|
81
93
|
codecPrivate: null,
|
|
82
94
|
timescale: track.timescale,
|
|
@@ -108,6 +120,7 @@ const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortC
|
|
|
108
120
|
config: videoEncoderConfig,
|
|
109
121
|
logLevel,
|
|
110
122
|
outputCodec: videoOperation.videoCodec,
|
|
123
|
+
progress,
|
|
111
124
|
});
|
|
112
125
|
const videoDecoder = (0, video_decoder_1.createVideoDecoder)({
|
|
113
126
|
config: videoDecoderConfig,
|
|
@@ -118,6 +131,7 @@ const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortC
|
|
|
118
131
|
videoEncoder,
|
|
119
132
|
onVideoFrame,
|
|
120
133
|
outputCodec: videoOperation.videoCodec,
|
|
134
|
+
rotation,
|
|
121
135
|
});
|
|
122
136
|
},
|
|
123
137
|
onError: (err) => {
|
|
@@ -127,6 +141,7 @@ const makeVideoTrackHandler = ({ state, onVideoFrame, onMediaStateUpdate, abortC
|
|
|
127
141
|
},
|
|
128
142
|
signal: controller.signal,
|
|
129
143
|
logLevel,
|
|
144
|
+
progress,
|
|
130
145
|
});
|
|
131
146
|
state.addWaitForFinishPromise(async () => {
|
|
132
147
|
log_1.Log.verbose(logLevel, 'Waiting for video decoder to finish');
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rotateVideoFrame = exports.normalizeVideoRotation = void 0;
|
|
4
|
+
const rotation_1 = require("./rotation");
|
|
5
|
+
const normalizeVideoRotation = (rotation) => {
|
|
6
|
+
return ((rotation % 360) + 360) % 360;
|
|
7
|
+
};
|
|
8
|
+
exports.normalizeVideoRotation = normalizeVideoRotation;
|
|
9
|
+
const rotateVideoFrame = ({ frame, rotation, }) => {
|
|
10
|
+
var _a;
|
|
11
|
+
const normalized = ((rotation % 360) + 360) % 360;
|
|
12
|
+
if (normalized % 360 === 0) {
|
|
13
|
+
return frame;
|
|
14
|
+
}
|
|
15
|
+
if (normalized % 90 !== 0) {
|
|
16
|
+
throw new Error('Only 90 degree rotations are supported');
|
|
17
|
+
}
|
|
18
|
+
const { height, width } = (0, rotation_1.calculateNewDimensionsFromDimensions)({
|
|
19
|
+
height: frame.displayHeight,
|
|
20
|
+
width: frame.displayWidth,
|
|
21
|
+
rotation,
|
|
22
|
+
});
|
|
23
|
+
const canvas = new OffscreenCanvas(width, height);
|
|
24
|
+
const ctx = canvas.getContext('2d');
|
|
25
|
+
if (!ctx) {
|
|
26
|
+
throw new Error('Could not get 2d context');
|
|
27
|
+
}
|
|
28
|
+
canvas.width = width;
|
|
29
|
+
canvas.height = height;
|
|
30
|
+
if (normalized === 90) {
|
|
31
|
+
ctx.translate(width, 0);
|
|
32
|
+
}
|
|
33
|
+
else if (normalized === 180) {
|
|
34
|
+
ctx.translate(width, height);
|
|
35
|
+
}
|
|
36
|
+
else if (normalized === 270) {
|
|
37
|
+
ctx.translate(0, height);
|
|
38
|
+
}
|
|
39
|
+
ctx.rotate(normalized * (Math.PI / 180));
|
|
40
|
+
ctx.drawImage(frame, 0, 0);
|
|
41
|
+
return new VideoFrame(canvas, {
|
|
42
|
+
displayHeight: height,
|
|
43
|
+
displayWidth: width,
|
|
44
|
+
duration: (_a = frame.duration) !== null && _a !== void 0 ? _a : undefined,
|
|
45
|
+
timestamp: frame.timestamp,
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
exports.rotateVideoFrame = rotateVideoFrame;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.rotateVideo = void 0;
|
|
4
|
+
const rotation_1 = require("./rotation");
|
|
5
|
+
const rotateVideo = ({ frame, rotation, }) => {
|
|
6
|
+
const normalized = ((rotation % 360) + 360) % 360;
|
|
7
|
+
if (normalized % 360 === 0) {
|
|
8
|
+
return frame;
|
|
9
|
+
}
|
|
10
|
+
if (normalized % 90 !== 0) {
|
|
11
|
+
throw new Error('Only 90 degree rotations are supported');
|
|
12
|
+
}
|
|
13
|
+
const { height, width } = (0, rotation_1.calculateNewDimensionsFromDimensions)({
|
|
14
|
+
height: frame.displayHeight,
|
|
15
|
+
width: frame.displayWidth,
|
|
16
|
+
rotation,
|
|
17
|
+
});
|
|
18
|
+
const canvas = new OffscreenCanvas(width, height);
|
|
19
|
+
const ctx = canvas.getContext('2d');
|
|
20
|
+
if (!ctx) {
|
|
21
|
+
throw new Error('Could not get 2d context');
|
|
22
|
+
}
|
|
23
|
+
canvas.width = width;
|
|
24
|
+
canvas.height = height;
|
|
25
|
+
if (normalized === 90) {
|
|
26
|
+
ctx.translate(width, 0);
|
|
27
|
+
}
|
|
28
|
+
else if (normalized === 180) {
|
|
29
|
+
ctx.translate(width, height);
|
|
30
|
+
}
|
|
31
|
+
else if (normalized === 270) {
|
|
32
|
+
ctx.translate(0, height);
|
|
33
|
+
}
|
|
34
|
+
ctx.rotate(normalized * (Math.PI / 180));
|
|
35
|
+
ctx.drawImage(frame, 0, 0);
|
|
36
|
+
return new VideoFrame(canvas, {
|
|
37
|
+
displayHeight: height,
|
|
38
|
+
displayWidth: width,
|
|
39
|
+
duration: frame.duration,
|
|
40
|
+
timestamp: frame.timestamp,
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
exports.rotateVideo = rotateVideo;
|
package/dist/rotation.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calculateNewDimensionsFromDimensions = void 0;
|
|
4
|
+
const calculateNewDimensionsFromDimensions = ({ width, height, rotation, }) => {
|
|
5
|
+
const switchDimensions = rotation % 90 === 0 && rotation % 180 !== 0;
|
|
6
|
+
const newHeight = switchDimensions ? width : height;
|
|
7
|
+
const newWidth = switchDimensions ? height : width;
|
|
8
|
+
return { height: newHeight, width: newWidth };
|
|
9
|
+
};
|
|
10
|
+
exports.calculateNewDimensionsFromDimensions = calculateNewDimensionsFromDimensions;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { ConvertMediaContainer } from './get-available-containers';
|
|
2
|
+
export declare const selectContainerCreator: (container: ConvertMediaContainer) => ({ writer, onBytesProgress, onMillisecondsProgress, logLevel, filename, progressTracker, }: import("@remotion/media-parser/dist/create/media-fn").MediaFnGeneratorInput) => Promise<import("@remotion/media-parser").MediaFn>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.selectContainerCreator = void 0;
|
|
4
|
+
const media_parser_1 = require("@remotion/media-parser");
|
|
5
|
+
const selectContainerCreator = (container) => {
|
|
6
|
+
if (container === 'mp4') {
|
|
7
|
+
return media_parser_1.MediaParserInternals.createIsoBaseMedia;
|
|
8
|
+
}
|
|
9
|
+
if (container === 'wav') {
|
|
10
|
+
return media_parser_1.MediaParserInternals.createWav;
|
|
11
|
+
}
|
|
12
|
+
if (container === 'webm') {
|
|
13
|
+
return media_parser_1.MediaParserInternals.createMatroskaMedia;
|
|
14
|
+
}
|
|
15
|
+
throw new Error(`Unsupported container: ${container}`);
|
|
16
|
+
};
|
|
17
|
+
exports.selectContainerCreator = selectContainerCreator;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const example_videos_1 = require("@remotion/example-videos");
|
|
4
|
+
const node_1 = require("@remotion/media-parser/node");
|
|
5
|
+
const bun_test_1 = require("bun:test");
|
|
6
|
+
const convert_media_1 = require("../convert-media");
|
|
7
|
+
(0, bun_test_1.test)('Convert AVI to MP4', async () => {
|
|
8
|
+
const output = await (0, convert_media_1.convertMedia)({
|
|
9
|
+
src: example_videos_1.exampleVideos.avi,
|
|
10
|
+
container: 'mp4',
|
|
11
|
+
reader: node_1.nodeReader,
|
|
12
|
+
});
|
|
13
|
+
const f = await output.save();
|
|
14
|
+
(0, bun_test_1.expect)(f.size).toBeGreaterThan(0);
|
|
15
|
+
});
|
package/dist/video-decoder.d.ts
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import type { AudioOrVideoSample, LogLevel } from '@remotion/media-parser';
|
|
1
|
+
import type { AudioOrVideoSample, LogLevel, ProgressTracker } from '@remotion/media-parser';
|
|
2
2
|
export type WebCodecsVideoDecoder = {
|
|
3
3
|
processSample: (videoSample: AudioOrVideoSample) => Promise<void>;
|
|
4
4
|
waitForFinish: () => Promise<void>;
|
|
5
5
|
close: () => void;
|
|
6
6
|
flush: () => Promise<void>;
|
|
7
7
|
};
|
|
8
|
-
export declare const createVideoDecoder: ({ onFrame, onError, signal, config, logLevel, }: {
|
|
8
|
+
export declare const createVideoDecoder: ({ onFrame, onError, signal, config, logLevel, progress, }: {
|
|
9
9
|
onFrame: (frame: VideoFrame) => Promise<void>;
|
|
10
10
|
onError: (error: DOMException) => void;
|
|
11
11
|
signal: AbortSignal;
|
|
12
12
|
config: VideoDecoderConfig;
|
|
13
13
|
logLevel: LogLevel;
|
|
14
|
+
progress: ProgressTracker;
|
|
14
15
|
}) => WebCodecsVideoDecoder;
|
package/dist/video-decoder.js
CHANGED
|
@@ -3,8 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.createVideoDecoder = void 0;
|
|
4
4
|
const io_synchronizer_1 = require("./io-manager/io-synchronizer");
|
|
5
5
|
const log_1 = require("./log");
|
|
6
|
-
const createVideoDecoder = ({ onFrame, onError, signal, config, logLevel, }) => {
|
|
7
|
-
const ioSynchronizer = (0, io_synchronizer_1.makeIoSynchronizer)(
|
|
6
|
+
const createVideoDecoder = ({ onFrame, onError, signal, config, logLevel, progress, }) => {
|
|
7
|
+
const ioSynchronizer = (0, io_synchronizer_1.makeIoSynchronizer)({
|
|
8
|
+
logLevel,
|
|
9
|
+
label: 'Video decoder',
|
|
10
|
+
progress,
|
|
11
|
+
});
|
|
8
12
|
let outputQueue = Promise.resolve();
|
|
9
13
|
const videoDecoder = new VideoDecoder({
|
|
10
14
|
output(inputFrame) {
|
|
@@ -55,7 +59,11 @@ const createVideoDecoder = ({ onFrame, onError, signal, config, logLevel, }) =>
|
|
|
55
59
|
if (videoDecoder.state === 'closed') {
|
|
56
60
|
return;
|
|
57
61
|
}
|
|
58
|
-
await ioSynchronizer.waitFor({
|
|
62
|
+
await ioSynchronizer.waitFor({
|
|
63
|
+
unemitted: 20,
|
|
64
|
+
_unprocessed: 2,
|
|
65
|
+
minimumProgress: sample.timestamp - 5000000,
|
|
66
|
+
});
|
|
59
67
|
if (sample.type === 'key') {
|
|
60
68
|
await videoDecoder.flush();
|
|
61
69
|
}
|
package/dist/video-encoder.d.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import type { LogLevel } from '@remotion/media-parser';
|
|
2
|
-
import type { ConvertMediaVideoCodec } from './
|
|
1
|
+
import type { LogLevel, ProgressTracker } from '@remotion/media-parser';
|
|
2
|
+
import type { ConvertMediaVideoCodec } from './get-available-video-codecs';
|
|
3
3
|
export type WebCodecsVideoEncoder = {
|
|
4
4
|
encodeFrame: (videoFrame: VideoFrame, timestamp: number) => Promise<void>;
|
|
5
5
|
waitForFinish: () => Promise<void>;
|
|
6
6
|
close: () => void;
|
|
7
7
|
flush: () => Promise<void>;
|
|
8
8
|
};
|
|
9
|
-
export declare const createVideoEncoder: ({ onChunk, onError, signal, config, logLevel, outputCodec, }: {
|
|
9
|
+
export declare const createVideoEncoder: ({ onChunk, onError, signal, config, logLevel, outputCodec, progress, }: {
|
|
10
10
|
onChunk: (chunk: EncodedVideoChunk, metadata: EncodedVideoChunkMetadata | null) => Promise<void>;
|
|
11
11
|
onError: (error: DOMException) => void;
|
|
12
12
|
signal: AbortSignal;
|
|
13
13
|
config: VideoEncoderConfig;
|
|
14
14
|
logLevel: LogLevel;
|
|
15
15
|
outputCodec: ConvertMediaVideoCodec;
|
|
16
|
+
progress: ProgressTracker;
|
|
16
17
|
}) => WebCodecsVideoEncoder;
|
package/dist/video-encoder.js
CHANGED
|
@@ -4,11 +4,15 @@ exports.createVideoEncoder = void 0;
|
|
|
4
4
|
const convert_to_correct_videoframe_1 = require("./convert-to-correct-videoframe");
|
|
5
5
|
const io_synchronizer_1 = require("./io-manager/io-synchronizer");
|
|
6
6
|
const log_1 = require("./log");
|
|
7
|
-
const createVideoEncoder = ({ onChunk, onError, signal, config, logLevel, outputCodec, }) => {
|
|
7
|
+
const createVideoEncoder = ({ onChunk, onError, signal, config, logLevel, outputCodec, progress, }) => {
|
|
8
8
|
if (signal.aborted) {
|
|
9
9
|
throw new Error('Not creating video encoder, already aborted');
|
|
10
10
|
}
|
|
11
|
-
const ioSynchronizer = (0, io_synchronizer_1.makeIoSynchronizer)(
|
|
11
|
+
const ioSynchronizer = (0, io_synchronizer_1.makeIoSynchronizer)({
|
|
12
|
+
logLevel,
|
|
13
|
+
label: 'Video encoder',
|
|
14
|
+
progress,
|
|
15
|
+
});
|
|
12
16
|
let outputQueue = Promise.resolve();
|
|
13
17
|
const encoder = new VideoEncoder({
|
|
14
18
|
error(error) {
|
|
@@ -57,6 +61,7 @@ const createVideoEncoder = ({ onChunk, onError, signal, config, logLevel, output
|
|
|
57
61
|
// Firefox stalls if too few frames are passed
|
|
58
62
|
unemitted: 10,
|
|
59
63
|
_unprocessed: 10,
|
|
64
|
+
minimumProgress: frame.timestamp - 5000000,
|
|
60
65
|
});
|
|
61
66
|
// @ts-expect-error - can have changed in the meanwhile
|
|
62
67
|
if (encoder.state === 'closed') {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getWaveAudioEncoder = void 0;
|
|
4
|
+
const getWaveAudioEncoder = ({ onChunk, signal, }) => {
|
|
5
|
+
return {
|
|
6
|
+
close: () => {
|
|
7
|
+
return Promise.resolve();
|
|
8
|
+
},
|
|
9
|
+
encodeFrame: (audioData) => {
|
|
10
|
+
if (signal.aborted) {
|
|
11
|
+
return Promise.resolve();
|
|
12
|
+
}
|
|
13
|
+
const chunk = {
|
|
14
|
+
timestamp: audioData.timestamp,
|
|
15
|
+
duration: audioData.duration,
|
|
16
|
+
type: 'key',
|
|
17
|
+
copyTo: (destination) => audioData.copyTo(destination, { planeIndex: 0, format: 's16' }),
|
|
18
|
+
byteLength: audioData.allocationSize({ planeIndex: 0, format: 's16' }),
|
|
19
|
+
};
|
|
20
|
+
return onChunk(chunk);
|
|
21
|
+
},
|
|
22
|
+
flush: () => Promise.resolve(),
|
|
23
|
+
waitForFinish: () => Promise.resolve(),
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
exports.getWaveAudioEncoder = getWaveAudioEncoder;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remotion/webcodecs",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.233",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"module": "dist/esm/index.mjs",
|
|
@@ -17,13 +17,14 @@
|
|
|
17
17
|
"author": "Jonny Burger <jonny@remotion.dev>",
|
|
18
18
|
"license": "Remotion License (See https://remotion.dev/docs/webcodecs#license)",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@remotion/media-parser": "4.0.
|
|
20
|
+
"@remotion/media-parser": "4.0.233",
|
|
21
|
+
"@remotion/example-videos": "4.0.233"
|
|
21
22
|
},
|
|
22
23
|
"peerDependencies": {},
|
|
23
24
|
"devDependencies": {
|
|
24
25
|
"@types/dom-webcodecs": "0.1.11",
|
|
25
26
|
"eslint": "9.14.0",
|
|
26
|
-
"@remotion/eslint-config-internal": "4.0.
|
|
27
|
+
"@remotion/eslint-config-internal": "4.0.233"
|
|
27
28
|
},
|
|
28
29
|
"keywords": [],
|
|
29
30
|
"publishConfig": {
|
|
@@ -34,6 +35,7 @@
|
|
|
34
35
|
"scripts": {
|
|
35
36
|
"formatting": "prettier src --check",
|
|
36
37
|
"lint": "eslint src",
|
|
38
|
+
"test": "bun test src",
|
|
37
39
|
"watch": "tsc -w",
|
|
38
40
|
"make": "tsc -d && bun --env-file=../.env.bundle bundle.ts"
|
|
39
41
|
}
|