@mediaproc/audio 1.1.1 → 1.2.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/dist/cli.js +19 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/convert.d.ts.map +1 -1
- package/dist/commands/convert.js +31 -29
- package/dist/commands/convert.js.map +1 -1
- package/dist/commands/extract.d.ts.map +1 -1
- package/dist/commands/extract.js +57 -34
- package/dist/commands/extract.js.map +1 -1
- package/dist/commands/merge.d.ts.map +1 -1
- package/dist/commands/merge.js +100 -39
- package/dist/commands/merge.js.map +1 -1
- package/dist/commands/normalize.d.ts.map +1 -1
- package/dist/commands/normalize.js +92 -34
- package/dist/commands/normalize.js.map +1 -1
- package/dist/commands/trim.d.ts.map +1 -1
- package/dist/commands/trim.js +27 -22
- package/dist/commands/trim.js.map +1 -1
- package/dist/register.d.ts +2 -1
- package/dist/register.d.ts.map +1 -1
- package/dist/register.js +16 -1
- package/dist/register.js.map +1 -1
- package/dist/types.d.ts +30 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/ffmpeg-output.d.ts +6 -2
- package/dist/utils/ffmpeg-output.d.ts.map +1 -1
- package/dist/utils/ffmpeg-output.js +51 -59
- package/dist/utils/ffmpeg-output.js.map +1 -1
- package/dist/utils/ffmpeg.d.ts +9 -8
- package/dist/utils/ffmpeg.d.ts.map +1 -1
- package/dist/utils/ffmpeg.js +107 -28
- package/dist/utils/ffmpeg.js.map +1 -1
- package/dist/utils/ffmpegLogger.d.ts +3 -7
- package/dist/utils/ffmpegLogger.d.ts.map +1 -1
- package/dist/utils/ffmpegLogger.js +16 -48
- package/dist/utils/ffmpegLogger.js.map +1 -1
- package/package.json +4 -8
- package/bin/cli.js +0 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trim.js","sourceRoot":"","sources":["../../src/commands/trim.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"trim.js","sourceRoot":"","sources":["../../src/commands/trim.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1G,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,MAAM,UAAU,WAAW,CAAC,QAAiB;IAC3C,QAAQ;SACL,OAAO,CAAC,cAAc,CAAC;SACvB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,qBAAqB,EAAE,+BAA+B,CAAC;SAC9D,MAAM,CAAC,oBAAoB,EAAE,kCAAkC,EAAE,UAAU,CAAC;SAC5E,MAAM,CAAC,kBAAkB,EAAE,gCAAgC,CAAC;SAC5D,MAAM,CAAC,uBAAuB,EAAE,2CAA2C,CAAC;SAC5E,MAAM,CAAC,qBAAqB,EAAE,8BAA8B,EAAE,UAAU,CAAC;SACzE,MAAM,CAAC,sBAAsB,EAAE,+BAA+B,EAAE,UAAU,CAAC;SAC3E,MAAM,CAAC,mBAAmB,EAAE,wCAAwC,CAAC;SACrE,MAAM,CAAC,QAAQ,EAAE,yCAAyC,CAAC;SAC3D,MAAM,CAAC,SAAS,EAAE,uCAAuC,CAAC;SAC1D,MAAM,CAAC,wBAAwB,EAAE,kCAAkC,EAAE,CAAC,GAAW,EAAE,MAAgB,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAc,CAAC;SACzJ,MAAM,CAAC,WAAW,EAAE,mCAAmC,CAAC;SACxD,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,kBAAkB,EAAE,wLAAwL,CAAC;SACpN,MAAM,CAAC,YAAY,EAAE,+BAA+B,CAAC;SACrD,MAAM,CAAC,KAAK,WAAW,KAAyB,EAAE,OAAoB;QACrE,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,kBAAkB,CAAC;gBACjB,WAAW,EAAE,MAAM;gBACnB,KAAK,EAAE,IAAI;gBACX,WAAW,EAAE,8FAA8F;gBAC3G,KAAK,EAAE;oBACL,wBAAwB;oBACxB,gDAAgD;oBAChD,8BAA8B;iBAC/B;gBACD,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,6DAA6D,EAAE;oBAC3G,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,+DAA+D,EAAE;oBAC5G,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,sCAAsC,EAAE;oBACjF,EAAE,IAAI,EAAE,uBAAuB,EAAE,WAAW,EAAE,iEAAiE,EAAE;oBACjH,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,6CAA6C,EAAE;oBAC3F,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,8CAA8C,EAAE;oBAC7F,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,6DAA6D,EAAE;oBACzG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+DAA+D,EAAE;oBAChG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,uCAAuC,EAAE;oBACzE,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,kCAAkC,EAAE;oBACnF,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,0CAA0C,EAAE;oBAC9E,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,wLAAwL,EAAE;oBACnO,EAAE,IAAI,EAAE,eAAe,EAAE,WAAW,EAAE,0CAA0C,EAAE;iBACnF;gBACD,QAAQ,EAAE;oBACR,EAAE,OAAO,EAAE,gDAAgD,EAAE,WAAW,EAAE,wBAAwB,EAAE;oBACpG,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,0BAA0B,EAAE;oBACpF,EAAE,OAAO,EAAE,4BAA4B,EAAE,WAAW,EAAE,uBAAuB,EAAE;oBAC/E,EAAE,OAAO,EAAE,sDAAsD,EAAE,WAAW,EAAE,wBAAwB,EAAE;oBAC1G,EAAE,OAAO,EAAE,gDAAgD,EAAE,WAAW,EAAE,yBAAyB,EAAE;oBACrG,EAAE,OAAO,EAAE,qCAAqC,EAAE,WAAW,EAAE,sBAAsB,EAAE;iBACxF;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,WAAW,EAAE,CAAC;YAC5C,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;gBAC/E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACtC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC,CAAC;gBACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACzH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;YAC1E,MAAM,cAAc,GAAG,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9E,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;YAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAElC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC,CAAC;gBAExD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACnD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;gBAExC,IAAI,CAAC,OAAO,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBACvE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,IAAI,OAAO,GAAG,SAAS,CAAC;gBACxB,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBAChB,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACjC,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;gBACjC,CAAC;qBAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBAC5B,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACvC,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;gBACjC,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK;oBACvE,gBAAgB,QAAQ,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,cAAc,CAAC,SAAS,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG;oBACtF,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBAEpC,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC/B,IAAI,OAAO,CAAC,KAAK;oBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEnC,aAAa;gBACb,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAEvC,uBAAuB;gBACvB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACrB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;oBACvB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACvC,CAAC;gBAED,0BAA0B;gBAC1B,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACxD,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACN,sBAAsB;oBACtB,MAAM,OAAO,GAAa,EAAE,CAAC;oBAE7B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;wBACnB,OAAO,CAAC,IAAI,CAAC,qBAAqB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;oBACtD,CAAC;oBAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;wBACpB,MAAM,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;wBAC7C,OAAO,CAAC,IAAI,CAAC,kBAAkB,SAAS,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;oBACnE,CAAC;oBAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC;gBAGD,WAAW;gBACX,IAAI,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACxD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;wBACrC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACtC,IAAI,GAAG,IAAI,KAAK;4BAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;oBAC9D,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAEtB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;oBACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBACnD,SAAS;gBACX,CAAC;gBAED,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC;gBAE3C,IAAI,CAAC;oBACH,MAAM,SAAS,CACb,IAAI,EACJ,OAAO,CAAC,OAAO,IAAI,KAAK,EACxB,CAAC,IAAY,EAAE,EAAE;wBACf,IAAI,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC;4BACtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC,CACF,CAAC;oBACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;oBAE1C,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;oBAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC,CAAC;oBACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACzG,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;oBACvC,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,UAAU,CAAC,MAAM,qBAAqB,CAAC,CAAC,CAAC;QAClF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAe,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/register.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Command } from 'commander';
|
|
2
2
|
export declare const name = "@mediaproc/audio";
|
|
3
|
-
export declare const version
|
|
3
|
+
export declare const version: string;
|
|
4
|
+
export declare const isBuiltIn = true;
|
|
4
5
|
export declare function register(program: Command): void;
|
|
5
6
|
//# sourceMappingURL=register.d.ts.map
|
package/dist/register.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC,eAAO,MAAM,OAAO,QAAiB,CAAC;AACtC,eAAO,MAAM,SAAS,OAAO,CAAC;AAE9B,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAO/C"}
|
package/dist/register.js
CHANGED
|
@@ -3,8 +3,23 @@ import { normalizeCommand } from './commands/normalize.js';
|
|
|
3
3
|
import { trimCommand } from './commands/trim.js';
|
|
4
4
|
import { mergeCommand } from './commands/merge.js';
|
|
5
5
|
import { extractCommand } from './commands/extract.js';
|
|
6
|
+
// ESM dynamic import for package.json version
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = path.dirname(__filename);
|
|
11
|
+
const pkgUrl = path.join(__dirname, '../package.json');
|
|
12
|
+
let currentVersion = 'unknown';
|
|
13
|
+
try {
|
|
14
|
+
const pkg = await import(pkgUrl, { assert: { type: 'json' } });
|
|
15
|
+
currentVersion = pkg.default.version;
|
|
16
|
+
}
|
|
17
|
+
catch (e) {
|
|
18
|
+
// fallback or log error if needed
|
|
19
|
+
}
|
|
6
20
|
export const name = '@mediaproc/audio';
|
|
7
|
-
export const version =
|
|
21
|
+
export const version = currentVersion;
|
|
22
|
+
export const isBuiltIn = true;
|
|
8
23
|
export function register(program) {
|
|
9
24
|
// Register each command directly on the root program
|
|
10
25
|
convertCommand(program);
|
package/dist/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,8CAA8C;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACvD,IAAI,cAAc,GAAG,SAAS,CAAC;AAC/B,IAAI,CAAC;IACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/D,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,OAAiB,CAAC;AACjD,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,kCAAkC;AACpC,CAAC;AAGD,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC;AACtC,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CAAC;AAE9B,MAAM,UAAU,QAAQ,CAAC,OAAgB;IACvC,qDAAqD;IACrD,cAAc,CAAC,OAAO,CAAC,CAAC;IACxB,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1B,WAAW,CAAC,OAAO,CAAC,CAAC;IACrB,YAAY,CAAC,OAAO,CAAC,CAAC;IACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,15 +1,43 @@
|
|
|
1
|
+
export type AudioFormats = 'mp3' | 'wav' | 'flac' | 'aac' | 'ogg' | 'm4a' | 'wma' | 'opus' | 'ape' | 'alac' | 'mov' | 'mkv';
|
|
1
2
|
export interface AudioOptions {
|
|
2
|
-
input
|
|
3
|
+
input?: string;
|
|
3
4
|
output?: string;
|
|
4
|
-
format?:
|
|
5
|
+
format?: AudioFormats;
|
|
5
6
|
bitrate?: string;
|
|
6
7
|
sampleRate?: number;
|
|
7
8
|
channels?: number;
|
|
8
9
|
verbose?: boolean;
|
|
9
10
|
dryRun?: boolean;
|
|
10
11
|
explain?: boolean;
|
|
12
|
+
help?: boolean;
|
|
13
|
+
force?: boolean;
|
|
14
|
+
quality?: 'low' | 'medium' | 'high' | 'lossless';
|
|
15
|
+
codec?: string;
|
|
16
|
+
normalize?: boolean;
|
|
17
|
+
volume?: number;
|
|
18
|
+
fadeIn?: number;
|
|
19
|
+
fadeOut?: number;
|
|
20
|
+
trim?: string;
|
|
21
|
+
metadata?: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface ConvertOptions extends AudioOptions {
|
|
24
|
+
}
|
|
25
|
+
export interface ExtractOptions extends AudioOptions {
|
|
26
|
+
}
|
|
27
|
+
export interface MergeOptions extends AudioOptions {
|
|
28
|
+
inputs?: string[];
|
|
29
|
+
crossfade?: number;
|
|
30
|
+
removeSilence?: boolean;
|
|
11
31
|
}
|
|
12
32
|
export interface NormalizeOptions extends AudioOptions {
|
|
13
33
|
target?: number;
|
|
34
|
+
maxLevel?: number;
|
|
35
|
+
method?: 'loudnorm' | 'peak';
|
|
36
|
+
}
|
|
37
|
+
export interface TrimOptions extends AudioOptions {
|
|
38
|
+
start?: string;
|
|
39
|
+
end?: string;
|
|
40
|
+
duration?: string;
|
|
41
|
+
fast?: boolean;
|
|
14
42
|
}
|
|
15
43
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAG5H,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;CAEnD;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;CAEnD;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Style FFmpeg output line with appropriate colors and formatting
|
|
3
3
|
*/
|
|
4
4
|
export declare function styleFFmpegOutput(line: string): string;
|
|
5
5
|
/**
|
|
6
|
-
* Check if line should be displayed based on verbosity
|
|
6
|
+
* Check if a line should be displayed based on verbosity and content
|
|
7
7
|
*/
|
|
8
8
|
export declare function shouldDisplayLine(line: string, verbose: boolean): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Log FFmpeg output with styling and filtering
|
|
11
|
+
*/
|
|
12
|
+
export declare function logFFmpegOutput(output: string, verbose?: boolean): void;
|
|
9
13
|
//# sourceMappingURL=ffmpeg-output.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg-output.d.ts","sourceRoot":"","sources":["../../src/utils/ffmpeg-output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ffmpeg-output.d.ts","sourceRoot":"","sources":["../../src/utils/ffmpeg-output.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkDtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAWzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,UAAQ,GAAG,IAAI,CAOrE"}
|
|
@@ -1,30 +1,21 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Style FFmpeg output line with appropriate colors and formatting
|
|
4
4
|
*/
|
|
5
5
|
export function styleFFmpegOutput(line) {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
if (!line)
|
|
6
|
+
const trimmed = line.trim();
|
|
7
|
+
if (!trimmed)
|
|
9
8
|
return '';
|
|
10
|
-
//
|
|
11
|
-
if (
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// Parse progress line
|
|
21
|
-
const frameMatch = line.match(/frame=\s*(\d+)/);
|
|
22
|
-
const fpsMatch = line.match(/fps=\s*([\d.]+)/);
|
|
23
|
-
const timeMatch = line.match(/time=\s*([\d:\.]+)/);
|
|
24
|
-
const speedMatch = line.match(/speed=\s*([\d.]+x)/);
|
|
25
|
-
const sizeMatch = line.match(/size=\s*(\d+\w+)/);
|
|
26
|
-
const bitrateMatch = line.match(/bitrate=\s*([\d.]+\w+)/);
|
|
27
|
-
let output = chalk.cyan('⚡ Progress: ');
|
|
9
|
+
// Progress updates (frame=, fps=, time=, speed=)
|
|
10
|
+
if (trimmed.match(/frame=|fps=|time=|speed=/)) {
|
|
11
|
+
// Parse progress line for richer output
|
|
12
|
+
const frameMatch = trimmed.match(/frame=\s*(\d+)/);
|
|
13
|
+
const fpsMatch = trimmed.match(/fps=\s*([\d.]+)/);
|
|
14
|
+
const timeMatch = trimmed.match(/time=\s*([\d:\.]+)/);
|
|
15
|
+
const speedMatch = trimmed.match(/speed=\s*([\d.]+x)/);
|
|
16
|
+
const sizeMatch = trimmed.match(/size=\s*(\d+\w+)/);
|
|
17
|
+
const bitrateMatch = trimmed.match(/bitrate=\s*([\d.]+\w+)/);
|
|
18
|
+
let output = chalk.cyan.bold('⏳ Progress: ');
|
|
28
19
|
if (frameMatch)
|
|
29
20
|
output += chalk.white(`Frame ${frameMatch[1]} `);
|
|
30
21
|
if (fpsMatch)
|
|
@@ -39,56 +30,57 @@ export function styleFFmpegOutput(line) {
|
|
|
39
30
|
output += chalk.green(`• ${speedMatch[1]}`);
|
|
40
31
|
return output;
|
|
41
32
|
}
|
|
42
|
-
// Input
|
|
43
|
-
if (
|
|
44
|
-
return chalk.blue
|
|
33
|
+
// Input file info
|
|
34
|
+
if (trimmed.startsWith('Input #') || trimmed.includes('Duration:') || trimmed.includes('Stream #')) {
|
|
35
|
+
return chalk.blue(trimmed);
|
|
45
36
|
}
|
|
46
|
-
//
|
|
47
|
-
if (
|
|
48
|
-
return chalk.
|
|
37
|
+
// Output file info
|
|
38
|
+
if (trimmed.startsWith('Output #')) {
|
|
39
|
+
return chalk.green(trimmed);
|
|
49
40
|
}
|
|
50
|
-
//
|
|
51
|
-
if (
|
|
52
|
-
return chalk.
|
|
41
|
+
// Warnings
|
|
42
|
+
if (trimmed.toLowerCase().includes('warning')) {
|
|
43
|
+
return chalk.yellow(trimmed);
|
|
53
44
|
}
|
|
54
|
-
//
|
|
55
|
-
if (
|
|
56
|
-
return chalk.
|
|
45
|
+
// Errors
|
|
46
|
+
if (trimmed.toLowerCase().includes('error') || trimmed.toLowerCase().includes('failed')) {
|
|
47
|
+
return chalk.red(trimmed);
|
|
57
48
|
}
|
|
58
|
-
// Success messages
|
|
59
|
-
if (
|
|
60
|
-
return chalk.green(
|
|
49
|
+
// Success messages
|
|
50
|
+
if (trimmed.includes('successfully') || trimmed.includes('complete')) {
|
|
51
|
+
return chalk.green(trimmed);
|
|
61
52
|
}
|
|
62
|
-
// Default
|
|
63
|
-
return chalk.
|
|
53
|
+
// Default gray for other lines
|
|
54
|
+
return chalk.gray(trimmed);
|
|
64
55
|
}
|
|
65
56
|
/**
|
|
66
|
-
* Check if line should be displayed based on verbosity
|
|
57
|
+
* Check if a line should be displayed based on verbosity and content
|
|
67
58
|
*/
|
|
68
59
|
export function shouldDisplayLine(line, verbose) {
|
|
69
|
-
|
|
70
|
-
if (!
|
|
60
|
+
const trimmed = line.trim();
|
|
61
|
+
if (!trimmed)
|
|
71
62
|
return false;
|
|
72
63
|
// Always show errors and warnings
|
|
73
|
-
if (
|
|
64
|
+
if (trimmed.toLowerCase().includes('error') || trimmed.toLowerCase().includes('failed') || trimmed.toLowerCase().includes('warning'))
|
|
74
65
|
return true;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (line.includes('frame=') && line.includes('time=')) {
|
|
66
|
+
// Show progress and status lines always
|
|
67
|
+
if (trimmed.match(/frame=|fps=|time=|speed=/))
|
|
78
68
|
return true;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
// Show duration and metadata if verbose
|
|
85
|
-
if (line.includes('Duration:') || line.includes('Metadata:')) {
|
|
86
|
-
return verbose;
|
|
87
|
-
}
|
|
88
|
-
// Filter out configuration and build info unless very verbose
|
|
89
|
-
if (line.includes('configuration:') || line.includes('built with')) {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
69
|
+
// Show input/output info
|
|
70
|
+
if (trimmed.startsWith('Input #') || trimmed.startsWith('Output #'))
|
|
71
|
+
return true;
|
|
72
|
+
// Show if verbose
|
|
92
73
|
return verbose;
|
|
93
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Log FFmpeg output with styling and filtering
|
|
77
|
+
*/
|
|
78
|
+
export function logFFmpegOutput(output, verbose = false) {
|
|
79
|
+
const lines = output.split('\n');
|
|
80
|
+
for (const line of lines) {
|
|
81
|
+
if (shouldDisplayLine(line, verbose)) {
|
|
82
|
+
console.log(styleFFmpegOutput(line));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
94
86
|
//# sourceMappingURL=ffmpeg-output.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg-output.js","sourceRoot":"","sources":["../../src/utils/ffmpeg-output.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ffmpeg-output.js","sourceRoot":"","sources":["../../src/utils/ffmpeg-output.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/ffmpeg.d.ts
CHANGED
|
@@ -8,23 +8,24 @@ export interface AudioMetadata {
|
|
|
8
8
|
channelLayout?: string;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
* Execute ffmpeg command
|
|
11
|
+
* Execute ffmpeg command with detailed output and robust error handling
|
|
12
12
|
*/
|
|
13
|
-
export declare function runFFmpeg(args: string[], verbose?: boolean, onOutput?: (line: string) => void): Promise<void>;
|
|
13
|
+
export declare function runFFmpeg(args: string[], verbose?: boolean, onOutput?: (line: string, styledLine?: string) => void): Promise<void>;
|
|
14
14
|
/**
|
|
15
|
-
* Get audio metadata using ffprobe
|
|
15
|
+
* Get audio metadata using ffprobe with detailed output and error reporting
|
|
16
16
|
*/
|
|
17
17
|
export declare function getAudioMetadata(input: string): Promise<AudioMetadata>;
|
|
18
18
|
/**
|
|
19
|
-
* Check if ffmpeg and ffprobe are available
|
|
19
|
+
* Check if ffmpeg and ffprobe are available, with styled output
|
|
20
|
+
* If strict=true, both must be present. If strict=false, only ffmpeg is checked.
|
|
20
21
|
*/
|
|
21
|
-
export declare function checkFFmpeg(): Promise<boolean>;
|
|
22
|
+
export declare function checkFFmpeg(strict?: boolean): Promise<boolean>;
|
|
22
23
|
/**
|
|
23
|
-
* Format file size to human-readable string
|
|
24
|
+
* Format file size to human-readable string (styled)
|
|
24
25
|
*/
|
|
25
26
|
export declare function formatFileSize(bytes: number): string;
|
|
26
27
|
/**
|
|
27
|
-
* Format duration to HH:MM:SS
|
|
28
|
+
* Format duration to HH:MM:SS (styled)
|
|
28
29
|
*/
|
|
29
30
|
export declare function formatDuration(seconds: number): string;
|
|
30
31
|
/**
|
|
@@ -32,7 +33,7 @@ export declare function formatDuration(seconds: number): string;
|
|
|
32
33
|
*/
|
|
33
34
|
export declare function parseTime(time: string): number;
|
|
34
35
|
/**
|
|
35
|
-
* Format bitrate to human-readable string
|
|
36
|
+
* Format bitrate to human-readable string (styled)
|
|
36
37
|
*/
|
|
37
38
|
export declare function formatBitrate(bitrate: number): string;
|
|
38
39
|
//# sourceMappingURL=ffmpeg.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ffmpeg.d.ts","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"AAsBA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,UAAQ,EACf,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,GACrD,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA6D5E;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,MAAM,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBlE;AAcD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAW9C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIrD"}
|
package/dist/utils/ffmpeg.js
CHANGED
|
@@ -1,48 +1,82 @@
|
|
|
1
1
|
import { spawn } from 'child_process';
|
|
2
|
+
import { shouldDisplayLine, logFFmpegOutput } from './ffmpegLogger.js';
|
|
3
|
+
import { styleFFmpegOutput } from './ffmpeg-output.js';
|
|
4
|
+
// FFmpeg install guidance links (all platforms)
|
|
5
|
+
const FFMPEG_GUIDES = [
|
|
6
|
+
{ label: 'Official guide', url: 'https://ffmpeg.org/download.html' },
|
|
7
|
+
{ label: 'Community guide', url: 'https://github.com/adaptlearning/adapt_authoring/wiki/Installing-FFmpeg' },
|
|
8
|
+
{ label: 'Multi-platform guide', url: 'https://github.com/ffmpegwasm/ffmpeg.wasm/blob/main/docs/install.md' },
|
|
9
|
+
];
|
|
10
|
+
function printFFmpegInstallGuidance() {
|
|
11
|
+
const lines = [
|
|
12
|
+
'✗ FFmpeg or ffprobe not found on your system.',
|
|
13
|
+
'Please install FFmpeg and ffprobe to use audio features.',
|
|
14
|
+
...FFMPEG_GUIDES.map(g => `${g.label}: ${g.url}`),
|
|
15
|
+
'After installation, ensure ffmpeg and ffprobe are available in your PATH.'
|
|
16
|
+
];
|
|
17
|
+
lines.forEach(line => console.error(styleFFmpegOutput(line)));
|
|
18
|
+
}
|
|
2
19
|
/**
|
|
3
|
-
* Execute ffmpeg command
|
|
20
|
+
* Execute ffmpeg command with detailed output and robust error handling
|
|
4
21
|
*/
|
|
5
22
|
export async function runFFmpeg(args, verbose = false, onOutput) {
|
|
23
|
+
if (!(await ensureFFmpegAvailable()))
|
|
24
|
+
return;
|
|
6
25
|
return new Promise((resolve, reject) => {
|
|
7
26
|
const ffmpeg = spawn('ffmpeg', args);
|
|
8
27
|
let stderr = '';
|
|
28
|
+
let allOutput = '';
|
|
9
29
|
ffmpeg.stderr.on('data', (data) => {
|
|
10
30
|
const output = data.toString();
|
|
11
31
|
stderr += output;
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
32
|
+
allOutput += output;
|
|
33
|
+
output.split('\n').forEach((line) => {
|
|
34
|
+
if (shouldDisplayLine(line) || verbose) {
|
|
35
|
+
const styled = styleFFmpegOutput(line);
|
|
36
|
+
logFFmpegOutput(line);
|
|
37
|
+
if (onOutput) {
|
|
38
|
+
onOutput(line, styled);
|
|
16
39
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
40
|
+
else {
|
|
41
|
+
if (styled)
|
|
42
|
+
console.log(styled);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
});
|
|
22
46
|
});
|
|
23
47
|
ffmpeg.on('close', (code) => {
|
|
24
48
|
if (code === 0) {
|
|
49
|
+
console.log(styleFFmpegOutput('FFmpeg finished successfully.'));
|
|
25
50
|
resolve();
|
|
26
51
|
}
|
|
27
52
|
else {
|
|
53
|
+
stderr.split('\n').forEach((line) => {
|
|
54
|
+
if (shouldDisplayLine(line)) {
|
|
55
|
+
logFFmpegOutput(line);
|
|
56
|
+
const styled = styleFFmpegOutput(line);
|
|
57
|
+
if (styled)
|
|
58
|
+
console.error(styled);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
28
61
|
reject(new Error(`FFmpeg failed with code ${code}\n${stderr}`));
|
|
29
62
|
}
|
|
30
63
|
});
|
|
31
64
|
ffmpeg.on('error', (error) => {
|
|
65
|
+
console.error(styleFFmpegOutput(`Failed to start ffmpeg: ${error.message}`));
|
|
32
66
|
reject(new Error(`Failed to start ffmpeg: ${error.message}`));
|
|
33
67
|
});
|
|
34
68
|
});
|
|
35
69
|
}
|
|
36
70
|
/**
|
|
37
|
-
* Get audio metadata using ffprobe
|
|
71
|
+
* Get audio metadata using ffprobe with detailed output and error reporting
|
|
38
72
|
*/
|
|
39
73
|
export async function getAudioMetadata(input) {
|
|
74
|
+
if (!(await ensureFFmpegAvailable()))
|
|
75
|
+
return Promise.reject(new Error('FFmpeg/ffprobe not installed'));
|
|
40
76
|
return new Promise((resolve, reject) => {
|
|
41
77
|
const ffprobe = spawn('ffprobe', [
|
|
42
|
-
'-v',
|
|
43
|
-
'
|
|
44
|
-
'-print_format',
|
|
45
|
-
'json',
|
|
78
|
+
'-v', 'quiet',
|
|
79
|
+
'-print_format', 'json',
|
|
46
80
|
'-show_format',
|
|
47
81
|
'-show_streams',
|
|
48
82
|
input,
|
|
@@ -53,10 +87,20 @@ export async function getAudioMetadata(input) {
|
|
|
53
87
|
stdout += data.toString();
|
|
54
88
|
});
|
|
55
89
|
ffprobe.stderr.on('data', (data) => {
|
|
56
|
-
|
|
90
|
+
const output = data.toString();
|
|
91
|
+
stderr += output;
|
|
92
|
+
output.split('\n').forEach((line) => {
|
|
93
|
+
if (shouldDisplayLine(line)) {
|
|
94
|
+
logFFmpegOutput(line);
|
|
95
|
+
const styled = styleFFmpegOutput(line);
|
|
96
|
+
if (styled)
|
|
97
|
+
console.error(styled);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
57
100
|
});
|
|
58
101
|
ffprobe.on('close', (code) => {
|
|
59
102
|
if (code !== 0) {
|
|
103
|
+
console.error(styleFFmpegOutput(`ffprobe failed with code ${code}`));
|
|
60
104
|
reject(new Error(`ffprobe failed: ${stderr}`));
|
|
61
105
|
return;
|
|
62
106
|
}
|
|
@@ -64,6 +108,7 @@ export async function getAudioMetadata(input) {
|
|
|
64
108
|
const data = JSON.parse(stdout);
|
|
65
109
|
const audioStream = data.streams.find((s) => s.codec_type === 'audio');
|
|
66
110
|
if (!audioStream) {
|
|
111
|
+
console.error(styleFFmpegOutput('No audio stream found in file.'));
|
|
67
112
|
reject(new Error('No audio stream found'));
|
|
68
113
|
return;
|
|
69
114
|
}
|
|
@@ -76,30 +121,64 @@ export async function getAudioMetadata(input) {
|
|
|
76
121
|
format: data.format.format_name || 'unknown',
|
|
77
122
|
channelLayout: audioStream.channel_layout,
|
|
78
123
|
};
|
|
124
|
+
// Detailed output of metadata
|
|
125
|
+
console.log(styleFFmpegOutput('Audio Metadata:'));
|
|
126
|
+
Object.entries(metadata).forEach(([key, value]) => {
|
|
127
|
+
console.log(styleFFmpegOutput(` ${key}: ${value}`));
|
|
128
|
+
});
|
|
79
129
|
resolve(metadata);
|
|
80
130
|
}
|
|
81
131
|
catch (error) {
|
|
132
|
+
console.error(styleFFmpegOutput(`Failed to parse ffprobe output: ${error.message}`));
|
|
82
133
|
reject(new Error(`Failed to parse ffprobe output: ${error.message}`));
|
|
83
134
|
}
|
|
84
135
|
});
|
|
85
136
|
});
|
|
86
137
|
}
|
|
87
138
|
/**
|
|
88
|
-
* Check if ffmpeg and ffprobe are available
|
|
139
|
+
* Check if ffmpeg and ffprobe are available, with styled output
|
|
140
|
+
* If strict=true, both must be present. If strict=false, only ffmpeg is checked.
|
|
89
141
|
*/
|
|
90
|
-
export async function checkFFmpeg() {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
142
|
+
export async function checkFFmpeg(strict = false) {
|
|
143
|
+
// Check ffmpeg
|
|
144
|
+
const ffmpegAvailable = await new Promise((resolve) => {
|
|
145
|
+
try {
|
|
146
|
+
const ffmpeg = spawn('ffmpeg', ['-version']);
|
|
147
|
+
ffmpeg.on('close', (code) => resolve(code === 0));
|
|
148
|
+
ffmpeg.on('error', () => resolve(false));
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
97
151
|
resolve(false);
|
|
98
|
-
}
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
if (!strict)
|
|
155
|
+
return ffmpegAvailable;
|
|
156
|
+
// Check ffprobe
|
|
157
|
+
const ffprobeAvailable = await new Promise((resolve) => {
|
|
158
|
+
try {
|
|
159
|
+
const ffprobe = spawn('ffprobe', ['-version']);
|
|
160
|
+
ffprobe.on('close', (code) => resolve(code === 0));
|
|
161
|
+
ffprobe.on('error', () => resolve(false));
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
resolve(false);
|
|
165
|
+
}
|
|
99
166
|
});
|
|
167
|
+
return ffmpegAvailable && ffprobeAvailable;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Centralized check and guidance for ffmpeg/ffprobe availability
|
|
171
|
+
*/
|
|
172
|
+
async function ensureFFmpegAvailable() {
|
|
173
|
+
const available = await checkFFmpeg(true);
|
|
174
|
+
if (!available) {
|
|
175
|
+
printFFmpegInstallGuidance();
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
return true;
|
|
100
179
|
}
|
|
101
180
|
/**
|
|
102
|
-
* Format file size to human-readable string
|
|
181
|
+
* Format file size to human-readable string (styled)
|
|
103
182
|
*/
|
|
104
183
|
export function formatFileSize(bytes) {
|
|
105
184
|
if (bytes === 0)
|
|
@@ -110,7 +189,7 @@ export function formatFileSize(bytes) {
|
|
|
110
189
|
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
|
|
111
190
|
}
|
|
112
191
|
/**
|
|
113
|
-
* Format duration to HH:MM:SS
|
|
192
|
+
* Format duration to HH:MM:SS (styled)
|
|
114
193
|
*/
|
|
115
194
|
export function formatDuration(seconds) {
|
|
116
195
|
const h = Math.floor(seconds / 3600);
|
|
@@ -135,7 +214,7 @@ export function parseTime(time) {
|
|
|
135
214
|
return parseFloat(time);
|
|
136
215
|
}
|
|
137
216
|
/**
|
|
138
|
-
* Format bitrate to human-readable string
|
|
217
|
+
* Format bitrate to human-readable string (styled)
|
|
139
218
|
*/
|
|
140
219
|
export function formatBitrate(bitrate) {
|
|
141
220
|
if (bitrate === 0)
|
package/dist/utils/ffmpeg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"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"}
|