node-av 2.4.0 → 2.5.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.
- package/README.md +38 -0
- package/dist/ffmpeg/index.d.ts +2 -0
- package/dist/ffmpeg/index.js +14 -0
- package/dist/ffmpeg/index.js.map +1 -0
- package/dist/ffmpeg/install.d.ts +2 -0
- package/dist/ffmpeg/install.js +118 -0
- package/dist/ffmpeg/install.js.map +1 -0
- package/dist/ffmpeg/utils.d.ts +4 -0
- package/dist/ffmpeg/utils.js +56 -0
- package/dist/ffmpeg/utils.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/binding.js +4 -5
- package/dist/lib/binding.js.map +1 -1
- package/package.json +23 -14
package/README.md
CHANGED
|
@@ -220,6 +220,44 @@ try {
|
|
|
220
220
|
}
|
|
221
221
|
```
|
|
222
222
|
|
|
223
|
+
## FFmpeg Binary Access
|
|
224
|
+
|
|
225
|
+
Need direct access to the FFmpeg binary? The library provides an easy way to get FFmpeg binaries that automatically downloads and manages platform-specific builds.
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
import { ffmpegPath, isFfmpegAvailable } from 'node-av/ffmpeg';
|
|
229
|
+
import { execFile } from 'node:child_process';
|
|
230
|
+
import { promisify } from 'node:util';
|
|
231
|
+
|
|
232
|
+
const execFileAsync = promisify(execFile);
|
|
233
|
+
|
|
234
|
+
// Check if FFmpeg binary is available
|
|
235
|
+
if (isFfmpegAvailable()) {
|
|
236
|
+
console.log('FFmpeg binary found at:', ffmpegPath());
|
|
237
|
+
|
|
238
|
+
// Use FFmpeg binary directly
|
|
239
|
+
const { stdout } = await execFileAsync(ffmpegPath(), ['-version']);
|
|
240
|
+
console.log(stdout);
|
|
241
|
+
} else {
|
|
242
|
+
console.log('FFmpeg binary not available - install may have failed');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Direct usage example
|
|
246
|
+
async function convertVideo(input: string, output: string) {
|
|
247
|
+
const args = [
|
|
248
|
+
'-i', input,
|
|
249
|
+
'-c:v', 'libx264',
|
|
250
|
+
'-crf', '23',
|
|
251
|
+
'-c:a', 'aac',
|
|
252
|
+
output
|
|
253
|
+
];
|
|
254
|
+
|
|
255
|
+
await execFileAsync(ffmpegPath(), args);
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
The FFmpeg binary is automatically downloaded during installation from GitHub releases and matches the same build used by the native bindings.
|
|
260
|
+
|
|
223
261
|
## Performance
|
|
224
262
|
|
|
225
263
|
NodeAV executes all media operations directly through FFmpeg's native C libraries. The Node.js bindings add minimal overhead - mostly just the JavaScript-to-C boundary crossings. During typical operations like transcoding or filtering, most processing time is spent in FFmpeg's optimized C code.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { fileURLToPath } from 'node:url';
|
|
4
|
+
import { getPlatform } from './utils.js';
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = dirname(__filename);
|
|
7
|
+
const ffmpegBinaryPath = resolve(__dirname, '../../binary');
|
|
8
|
+
const ffmpegFile = 'ffmpeg' + (getPlatform() === 'win32' ? '.exe' : '');
|
|
9
|
+
const ffmpegExtractedFilePath = resolve(ffmpegBinaryPath, ffmpegFile);
|
|
10
|
+
export const ffmpegPath = () => ffmpegExtractedFilePath;
|
|
11
|
+
export const isFfmpegAvailable = () => {
|
|
12
|
+
return existsSync(ffmpegExtractedFilePath);
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ffmpeg/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,gBAAgB,GAAG,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;AAC5D,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxE,MAAM,uBAAuB,GAAG,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,UAAU,GAAG,GAAW,EAAE,CAAC,uBAAuB,CAAC;AAEhE,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAY,EAAE;IAC7C,OAAO,UAAU,CAAC,uBAAuB,CAAC,CAAC;AAC7C,CAAC,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import axios from 'axios';
|
|
3
|
+
import { chmodSync, createWriteStream, mkdirSync, rmSync } from 'node:fs';
|
|
4
|
+
import { rename } from 'node:fs/promises';
|
|
5
|
+
import { createRequire } from 'node:module';
|
|
6
|
+
import { dirname, extname, resolve } from 'node:path';
|
|
7
|
+
import { pipeline } from 'node:stream/promises';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import { Open } from 'unzipper';
|
|
10
|
+
import { ffmpegPath } from './index.js';
|
|
11
|
+
import { getArchitecture, getPlatform, getPlatformType } from './utils.js';
|
|
12
|
+
if (process.env.SKIP_FFMPEG === 'true') {
|
|
13
|
+
console.log('Skipping ffmpeg download');
|
|
14
|
+
process.exit(0);
|
|
15
|
+
}
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
const __require = createRequire(import.meta.url);
|
|
19
|
+
const releasesUrl = 'https://api.github.com/repos/seydx/node-av/releases';
|
|
20
|
+
const ffmpegVersion = 'v7.1.2';
|
|
21
|
+
const pJson = __require('../../package.json');
|
|
22
|
+
const binaries = {
|
|
23
|
+
darwin: {
|
|
24
|
+
x64: `ffmpeg-${ffmpegVersion}-macos-x64-jellyfin.zip`,
|
|
25
|
+
arm64: `ffmpeg-${ffmpegVersion}-macos-arm64-jellyfin.zip`,
|
|
26
|
+
},
|
|
27
|
+
linux: {
|
|
28
|
+
x64: `ffmpeg-${ffmpegVersion}-linux-x64-jellyfin.zip`,
|
|
29
|
+
arm64: `ffmpeg-${ffmpegVersion}-linux-arm64-jellyfin.zip`,
|
|
30
|
+
},
|
|
31
|
+
win32: {
|
|
32
|
+
x64: `ffmpeg-${ffmpegVersion}-win-x64.zip`,
|
|
33
|
+
arm64: `ffmpeg-${ffmpegVersion}-win-arm64.zip`,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
const arch = getArchitecture();
|
|
37
|
+
const sysPlatform = getPlatform();
|
|
38
|
+
let filename = binaries[sysPlatform]?.[arch];
|
|
39
|
+
if (!filename) {
|
|
40
|
+
console.error(`No ffmpeg binary found for architecture (${sysPlatform} / ${arch})`);
|
|
41
|
+
process.exit(0);
|
|
42
|
+
}
|
|
43
|
+
if (sysPlatform === 'win32' && getPlatformType() !== 'Windows_NT') {
|
|
44
|
+
filename = filename.replace('.zip', '-jellyfin.zip');
|
|
45
|
+
}
|
|
46
|
+
console.log(`Detected platform: ${sysPlatform} / ${arch}`);
|
|
47
|
+
console.log(`Using binary: ${filename}`);
|
|
48
|
+
const ffmpegBinaryPath = resolve(__dirname, '../../binary');
|
|
49
|
+
const ffmpegFilePath = resolve(ffmpegBinaryPath, filename);
|
|
50
|
+
const ffmpegExtractedFilePath = ffmpegPath();
|
|
51
|
+
const isZipUrl = (url) => {
|
|
52
|
+
const pathArray = new URL(url).pathname.split('/');
|
|
53
|
+
const fileName = pathArray[pathArray.length - 1];
|
|
54
|
+
return fileName !== undefined && extname(fileName) === '.zip';
|
|
55
|
+
};
|
|
56
|
+
const downloadFile = async (url) => {
|
|
57
|
+
console.log(`Downloading FFmpeg ${ffmpegVersion} to ${ffmpegFilePath}...`);
|
|
58
|
+
const { data } = await axios.get(url, {
|
|
59
|
+
onDownloadProgress: (progressEvent) => {
|
|
60
|
+
if (process.env.CI || !progressEvent.total) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const percent = Math.round((progressEvent.loaded / progressEvent.total) * 100) + '%';
|
|
64
|
+
process.stdout.write('\r' + percent);
|
|
65
|
+
if (progressEvent.loaded === progressEvent.total) {
|
|
66
|
+
process.stdout.write('\r');
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
timeout: 30 * 1000, // 30s
|
|
70
|
+
maxRedirects: 3,
|
|
71
|
+
responseType: 'stream',
|
|
72
|
+
});
|
|
73
|
+
mkdirSync(ffmpegBinaryPath, { recursive: true });
|
|
74
|
+
const streams = [data, createWriteStream(ffmpegFilePath)];
|
|
75
|
+
await pipeline(streams);
|
|
76
|
+
if (isZipUrl(url)) {
|
|
77
|
+
console.log(`Extracting ${ffmpegFilePath} to ${ffmpegExtractedFilePath}...`);
|
|
78
|
+
const directory = await Open.file(ffmpegFilePath);
|
|
79
|
+
await new Promise((resolve, reject) => {
|
|
80
|
+
directory.files[0].stream().pipe(createWriteStream(ffmpegExtractedFilePath)).on('error', reject).on('finish', resolve);
|
|
81
|
+
});
|
|
82
|
+
console.log(`Removing ${ffmpegFilePath}...`);
|
|
83
|
+
rmSync(ffmpegFilePath);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
console.log(`Renaming ${ffmpegFilePath} to ${ffmpegExtractedFilePath}...`);
|
|
87
|
+
await rename(ffmpegFilePath, ffmpegExtractedFilePath);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const getReleaseAssets = async (version) => {
|
|
91
|
+
const url = `${releasesUrl}/tags/v${version}`;
|
|
92
|
+
console.log(`Fetching release info from ${url}...`);
|
|
93
|
+
const response = await axios.get(url);
|
|
94
|
+
const assets = response.data.assets.map((asset) => asset.browser_download_url);
|
|
95
|
+
const files = assets.map((asset) => asset.split(`${version}/`)[1]);
|
|
96
|
+
return {
|
|
97
|
+
assets,
|
|
98
|
+
files,
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
const downloadFFmpeg = async () => {
|
|
102
|
+
const release = await getReleaseAssets(pJson.version);
|
|
103
|
+
if (!filename || !release.assets.find((r) => r.endsWith(filename))) {
|
|
104
|
+
throw new Error(`No ffmpeg binary found for architecture (${sysPlatform} / ${arch})`);
|
|
105
|
+
}
|
|
106
|
+
const downloadUrl = release.assets.find((r) => r.endsWith(filename));
|
|
107
|
+
await downloadFile(downloadUrl);
|
|
108
|
+
if (sysPlatform === 'linux' || sysPlatform === 'darwin') {
|
|
109
|
+
console.log(`Making ${ffmpegExtractedFilePath} executable...`);
|
|
110
|
+
chmodSync(ffmpegExtractedFilePath, 0o755);
|
|
111
|
+
}
|
|
112
|
+
console.log('Done!');
|
|
113
|
+
};
|
|
114
|
+
downloadFFmpeg().catch((error) => {
|
|
115
|
+
console.error('Error downloading FFmpeg:', error?.messge ?? error);
|
|
116
|
+
process.exit(0);
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/ffmpeg/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type ARCH = 'arm' | 'arm6' | 'arm7' | 'arm64' | 'ia32' | 'loong64' | 'mips' | 'mipsel' | 'ppc' | 'ppc64' | 'riscv64' | 's390' | 's390x' | 'x64';
|
|
2
|
+
export declare function getPlatform(): NodeJS.Platform;
|
|
3
|
+
export declare function getPlatformType(): string;
|
|
4
|
+
export declare function getArchitecture(): ARCH;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { execSync } from 'child_process';
|
|
2
|
+
import { arch, platform, type } from 'node:os';
|
|
3
|
+
export function getPlatform() {
|
|
4
|
+
if (process.env.npm_config_os) {
|
|
5
|
+
if (!process.env.npm_config_cpu) {
|
|
6
|
+
throw new Error('npm_config_cpu is required when npm_config_os is set');
|
|
7
|
+
}
|
|
8
|
+
return process.env.npm_config_os;
|
|
9
|
+
}
|
|
10
|
+
return platform();
|
|
11
|
+
}
|
|
12
|
+
export function getPlatformType() {
|
|
13
|
+
return type();
|
|
14
|
+
}
|
|
15
|
+
export function getArchitecture() {
|
|
16
|
+
if (process.env.npm_config_cpu) {
|
|
17
|
+
if (!process.env.npm_config_os) {
|
|
18
|
+
throw new Error('npm_config_os is required when npm_config_cpu is set');
|
|
19
|
+
}
|
|
20
|
+
return process.env.npm_config_cpu;
|
|
21
|
+
}
|
|
22
|
+
const sysPlatform = getPlatform();
|
|
23
|
+
let sysArch = arch();
|
|
24
|
+
if (sysPlatform === 'win32') {
|
|
25
|
+
try {
|
|
26
|
+
const output = execSync('wmic cpu get architecture', { encoding: 'utf8' });
|
|
27
|
+
const architecture = output.trim().split('\n')[1].trim();
|
|
28
|
+
if (architecture === '5') {
|
|
29
|
+
sysArch = 'arm6';
|
|
30
|
+
}
|
|
31
|
+
else if (architecture === '7') {
|
|
32
|
+
sysArch = 'arm7';
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
//
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else if (sysPlatform === 'linux') {
|
|
40
|
+
try {
|
|
41
|
+
const output = execSync('cat /proc/cpuinfo | grep "model name"', { encoding: 'utf8' });
|
|
42
|
+
const modelName = output.trim().split(':')[1].trim();
|
|
43
|
+
if (modelName.includes('ARMv6')) {
|
|
44
|
+
sysArch = 'arm6';
|
|
45
|
+
}
|
|
46
|
+
else if (modelName.includes('ARMv7')) {
|
|
47
|
+
sysArch = 'arm7';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
//
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return sysArch;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/ffmpeg/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAI/C,MAAM,UAAU,WAAW;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,aAAgC,CAAC;IACtD,CAAC;IAED,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,CAAC,cAAsB,CAAC;IAC5C,CAAC;IAED,MAAM,WAAW,GAAG,WAAW,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,IAAI,EAAU,CAAC;IAE7B,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEzD,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;gBACzB,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,uCAAuC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YACvF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAErD,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;iBAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACvC,OAAO,GAAG,MAAM,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,EAAE;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,cAAc,gBAAgB,CAAC;AAE/B,wBAAwB;AACxB,cAAc,gBAAgB,CAAC;AAE/B,iCAAiC;AACjC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,cAAc,gBAAgB,CAAC;AAE/B,wBAAwB;AACxB,cAAc,gBAAgB,CAAC;AAE/B,iCAAiC;AACjC,cAAc,sBAAsB,CAAC;AAErC,0BAA0B;AAC1B,cAAc,mBAAmB,CAAC"}
|
package/dist/lib/binding.js
CHANGED
|
@@ -42,9 +42,8 @@ function loadBinding() {
|
|
|
42
42
|
}
|
|
43
43
|
// For Windows, detect MinGW vs MSVC environment
|
|
44
44
|
if (platform === 'win32') {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
if (!useMSVC) {
|
|
45
|
+
const useMingW = type() !== 'Windows_NT';
|
|
46
|
+
if (useMingW) {
|
|
48
47
|
try {
|
|
49
48
|
const packageName = `@seydx/node-av-${platformArch}-mingw`;
|
|
50
49
|
return require(`${packageName}/node-av.node`);
|
|
@@ -53,7 +52,7 @@ function loadBinding() {
|
|
|
53
52
|
errors.push(new Error(`MinGW package not found or loading failed: ${err}`));
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
|
-
//
|
|
55
|
+
// Fallback to MSVC
|
|
57
56
|
try {
|
|
58
57
|
const packageName = `@seydx/node-av-${platformArch}-msvc`;
|
|
59
58
|
return require(`${packageName}/node-av.node`);
|
|
@@ -76,7 +75,7 @@ function loadBinding() {
|
|
|
76
75
|
const errorMessages = errors.map((e) => e.message).join('\n ');
|
|
77
76
|
// prettier-ignore
|
|
78
77
|
throw new Error(`Could not load the node-av native binding for ${platformArch}.\n` +
|
|
79
|
-
`
|
|
78
|
+
`Errors:\n ${errorMessages}\n\n`);
|
|
80
79
|
}
|
|
81
80
|
// Load the native binding with fallback logic
|
|
82
81
|
const bindings = loadBinding();
|
package/dist/lib/binding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/lib/binding.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAoCzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAiPtC;;;;;;GAMG;AACH,SAAS,WAAW;IAClB,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,kBAAkB;IAClB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,YAAY,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;IAE3C,8CAA8C;IAC9C,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QACvF,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAChE,MAAM,SAAS,GAAG,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACtD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,gDAAgD;IAChD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/lib/binding.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-av",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "FFmpeg bindings for Node.js",
|
|
5
5
|
"author": "seydx (https://github.com/seydx/av)",
|
|
6
6
|
"type": "module",
|
|
@@ -24,6 +24,11 @@
|
|
|
24
24
|
"types": "./dist/constants/index.d.ts",
|
|
25
25
|
"require": "./dist/constants/index.js",
|
|
26
26
|
"default": "./dist/constants/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./ffmpeg": {
|
|
29
|
+
"types": "./dist/ffmpeg/index.d.ts",
|
|
30
|
+
"require": "./dist/ffmpeg/index.js",
|
|
31
|
+
"default": "./dist/ffmpeg/index.js"
|
|
27
32
|
}
|
|
28
33
|
},
|
|
29
34
|
"scripts": {
|
|
@@ -46,23 +51,24 @@
|
|
|
46
51
|
"install-updates": "npm i --save",
|
|
47
52
|
"lint": "eslint .",
|
|
48
53
|
"lint:fix": "eslint --fix .",
|
|
54
|
+
"postinstall": "node dist/ffmpeg/install.js",
|
|
49
55
|
"predocs": "typedoc && cpy README.md docs/ --rename=index.md",
|
|
50
|
-
"release:patch": "node scripts/prepare-release.js patch",
|
|
51
|
-
"release:minor": "node scripts/prepare-release.js minor",
|
|
52
|
-
"release:major": "node scripts/prepare-release.js major",
|
|
56
|
+
"release:patch": "npm run build:tsc && node scripts/prepare-release.js patch",
|
|
57
|
+
"release:minor": "npm run build:tsc && node scripts/prepare-release.js minor",
|
|
58
|
+
"release:major": "npm run build:tsc && node scripts/prepare-release.js major",
|
|
53
59
|
"test": "tsx --test test/*.test.ts",
|
|
54
60
|
"test:all": "npm run build:tests && npm run build:tsc && tsx --test test/*.test.ts",
|
|
55
61
|
"update": "updates --update ./"
|
|
56
62
|
},
|
|
57
63
|
"optionalDependencies": {
|
|
58
|
-
"@seydx/node-av-darwin-arm64": "^2.
|
|
59
|
-
"@seydx/node-av-darwin-x64": "^2.
|
|
60
|
-
"@seydx/node-av-linux-arm64": "^2.
|
|
61
|
-
"@seydx/node-av-linux-x64": "^2.
|
|
62
|
-
"@seydx/node-av-win32-arm64-mingw": "^2.
|
|
63
|
-
"@seydx/node-av-win32-
|
|
64
|
-
"@seydx/node-av-win32-
|
|
65
|
-
"@seydx/node-av-win32-x64-msvc": "^2.
|
|
64
|
+
"@seydx/node-av-darwin-arm64": "^2.5.0",
|
|
65
|
+
"@seydx/node-av-darwin-x64": "^2.5.0",
|
|
66
|
+
"@seydx/node-av-linux-arm64": "^2.5.0",
|
|
67
|
+
"@seydx/node-av-linux-x64": "^2.5.0",
|
|
68
|
+
"@seydx/node-av-win32-arm64-mingw": "^2.5.0",
|
|
69
|
+
"@seydx/node-av-win32-arm64-msvc": "^2.5.0",
|
|
70
|
+
"@seydx/node-av-win32-x64-mingw": "^2.5.0",
|
|
71
|
+
"@seydx/node-av-win32-x64-msvc": "^2.5.0"
|
|
66
72
|
},
|
|
67
73
|
"devDependencies": {
|
|
68
74
|
"@camera.ui/ffmpeg": "^0.0.14",
|
|
@@ -78,14 +84,14 @@
|
|
|
78
84
|
"cpy-cli": "^6.0.0",
|
|
79
85
|
"cross-env": "^10.0.0",
|
|
80
86
|
"eslint": "^9.36.0",
|
|
81
|
-
"eslint-plugin-jsdoc": "^60.
|
|
87
|
+
"eslint-plugin-jsdoc": "^60.4.0",
|
|
82
88
|
"globals": "^16.4.0",
|
|
83
89
|
"node-addon-api": "^8.5.0",
|
|
84
90
|
"node-gyp": "^11.4.2",
|
|
85
91
|
"pngjs": "^7.0.0",
|
|
86
92
|
"prettier": "^3.6.2",
|
|
87
93
|
"rimraf": "^6.0.1",
|
|
88
|
-
"tsx": "^4.20.
|
|
94
|
+
"tsx": "^4.20.6",
|
|
89
95
|
"typedoc": "^0.28.13",
|
|
90
96
|
"typedoc-plugin-markdown": "^4.9.0",
|
|
91
97
|
"typedoc-vitepress-theme": "^1.1.2",
|
|
@@ -109,5 +115,8 @@
|
|
|
109
115
|
"repository": {
|
|
110
116
|
"type": "git",
|
|
111
117
|
"url": "git+https://github.com/seydx/av.git"
|
|
118
|
+
},
|
|
119
|
+
"dependencies": {
|
|
120
|
+
"unzipper": "^0.12.3"
|
|
112
121
|
}
|
|
113
122
|
}
|