node-av-lgpl 0.0.0 → 7.1.0-beta.2

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 (311) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +711 -0
  3. package/dist/api/audio-frame-buffer.d.ts +636 -0
  4. package/dist/api/audio-frame-buffer.js +1027 -0
  5. package/dist/api/audio-frame-buffer.js.map +1 -0
  6. package/dist/api/bitstream-filter.d.ts +938 -0
  7. package/dist/api/bitstream-filter.js +1427 -0
  8. package/dist/api/bitstream-filter.js.map +1 -0
  9. package/dist/api/constants.d.ts +44 -0
  10. package/dist/api/constants.js +45 -0
  11. package/dist/api/constants.js.map +1 -0
  12. package/dist/api/data/test_av1.ivf +0 -0
  13. package/dist/api/data/test_h264.h264 +0 -0
  14. package/dist/api/data/test_hevc.h265 +0 -0
  15. package/dist/api/data/test_mjpeg.mjpeg +0 -0
  16. package/dist/api/data/test_vp8.ivf +0 -0
  17. package/dist/api/data/test_vp9.ivf +0 -0
  18. package/dist/api/decoder.d.ts +1413 -0
  19. package/dist/api/decoder.js +2367 -0
  20. package/dist/api/decoder.js.map +1 -0
  21. package/dist/api/demuxer.d.ts +1295 -0
  22. package/dist/api/demuxer.js +2344 -0
  23. package/dist/api/demuxer.js.map +1 -0
  24. package/dist/api/device.d.ts +589 -0
  25. package/dist/api/device.js +964 -0
  26. package/dist/api/device.js.map +1 -0
  27. package/dist/api/encoder-pool.d.ts +262 -0
  28. package/dist/api/encoder-pool.js +397 -0
  29. package/dist/api/encoder-pool.js.map +1 -0
  30. package/dist/api/encoder.d.ts +1509 -0
  31. package/dist/api/encoder.js +2619 -0
  32. package/dist/api/encoder.js.map +1 -0
  33. package/dist/api/filter-complex.d.ts +828 -0
  34. package/dist/api/filter-complex.js +1661 -0
  35. package/dist/api/filter-complex.js.map +1 -0
  36. package/dist/api/filter-presets.d.ts +800 -0
  37. package/dist/api/filter-presets.js +1554 -0
  38. package/dist/api/filter-presets.js.map +1 -0
  39. package/dist/api/filter.d.ts +1339 -0
  40. package/dist/api/filter.js +2075 -0
  41. package/dist/api/filter.js.map +1 -0
  42. package/dist/api/fmp4-stream.d.ts +797 -0
  43. package/dist/api/fmp4-stream.js +1428 -0
  44. package/dist/api/fmp4-stream.js.map +1 -0
  45. package/dist/api/hardware.d.ts +677 -0
  46. package/dist/api/hardware.js +1300 -0
  47. package/dist/api/hardware.js.map +1 -0
  48. package/dist/api/index.d.ts +21 -0
  49. package/dist/api/index.js +38 -0
  50. package/dist/api/index.js.map +1 -0
  51. package/dist/api/io-stream.d.ts +308 -0
  52. package/dist/api/io-stream.js +358 -0
  53. package/dist/api/io-stream.js.map +1 -0
  54. package/dist/api/muxer.d.ts +1311 -0
  55. package/dist/api/muxer.js +2672 -0
  56. package/dist/api/muxer.js.map +1 -0
  57. package/dist/api/pipeline.d.ts +801 -0
  58. package/dist/api/pipeline.js +1344 -0
  59. package/dist/api/pipeline.js.map +1 -0
  60. package/dist/api/probe.d.ts +128 -0
  61. package/dist/api/probe.js +227 -0
  62. package/dist/api/probe.js.map +1 -0
  63. package/dist/api/rtp-stream.d.ts +497 -0
  64. package/dist/api/rtp-stream.js +1131 -0
  65. package/dist/api/rtp-stream.js.map +1 -0
  66. package/dist/api/scaler.d.ts +561 -0
  67. package/dist/api/scaler.js +918 -0
  68. package/dist/api/scaler.js.map +1 -0
  69. package/dist/api/types.d.ts +17 -0
  70. package/dist/api/types.js +2 -0
  71. package/dist/api/types.js.map +1 -0
  72. package/dist/api/utilities/async-queue.d.ts +149 -0
  73. package/dist/api/utilities/async-queue.js +254 -0
  74. package/dist/api/utilities/async-queue.js.map +1 -0
  75. package/dist/api/utilities/audio-sample.d.ts +117 -0
  76. package/dist/api/utilities/audio-sample.js +112 -0
  77. package/dist/api/utilities/audio-sample.js.map +1 -0
  78. package/dist/api/utilities/audio-transcode.d.ts +20 -0
  79. package/dist/api/utilities/audio-transcode.js +27 -0
  80. package/dist/api/utilities/audio-transcode.js.map +1 -0
  81. package/dist/api/utilities/channel-layout.d.ts +76 -0
  82. package/dist/api/utilities/channel-layout.js +80 -0
  83. package/dist/api/utilities/channel-layout.js.map +1 -0
  84. package/dist/api/utilities/codec-format.d.ts +87 -0
  85. package/dist/api/utilities/codec-format.js +117 -0
  86. package/dist/api/utilities/codec-format.js.map +1 -0
  87. package/dist/api/utilities/context-options.d.ts +25 -0
  88. package/dist/api/utilities/context-options.js +23 -0
  89. package/dist/api/utilities/context-options.js.map +1 -0
  90. package/dist/api/utilities/electron-shared-texture.d.ts +368 -0
  91. package/dist/api/utilities/electron-shared-texture.js +540 -0
  92. package/dist/api/utilities/electron-shared-texture.js.map +1 -0
  93. package/dist/api/utilities/image.d.ts +207 -0
  94. package/dist/api/utilities/image.js +213 -0
  95. package/dist/api/utilities/image.js.map +1 -0
  96. package/dist/api/utilities/index.d.ts +14 -0
  97. package/dist/api/utilities/index.js +27 -0
  98. package/dist/api/utilities/index.js.map +1 -0
  99. package/dist/api/utilities/live-decoding.d.ts +15 -0
  100. package/dist/api/utilities/live-decoding.js +32 -0
  101. package/dist/api/utilities/live-decoding.js.map +1 -0
  102. package/dist/api/utilities/media-type.d.ts +49 -0
  103. package/dist/api/utilities/media-type.js +53 -0
  104. package/dist/api/utilities/media-type.js.map +1 -0
  105. package/dist/api/utilities/packet-age-watchdog.d.ts +198 -0
  106. package/dist/api/utilities/packet-age-watchdog.js +594 -0
  107. package/dist/api/utilities/packet-age-watchdog.js.map +1 -0
  108. package/dist/api/utilities/pixel-format.d.ts +89 -0
  109. package/dist/api/utilities/pixel-format.js +97 -0
  110. package/dist/api/utilities/pixel-format.js.map +1 -0
  111. package/dist/api/utilities/sample-format.d.ts +129 -0
  112. package/dist/api/utilities/sample-format.js +141 -0
  113. package/dist/api/utilities/sample-format.js.map +1 -0
  114. package/dist/api/utilities/scale-size.d.ts +51 -0
  115. package/dist/api/utilities/scale-size.js +55 -0
  116. package/dist/api/utilities/scale-size.js.map +1 -0
  117. package/dist/api/utilities/scheduler.d.ts +138 -0
  118. package/dist/api/utilities/scheduler.js +98 -0
  119. package/dist/api/utilities/scheduler.js.map +1 -0
  120. package/dist/api/utilities/streaming.d.ts +186 -0
  121. package/dist/api/utilities/streaming.js +309 -0
  122. package/dist/api/utilities/streaming.js.map +1 -0
  123. package/dist/api/utilities/timestamp.d.ts +193 -0
  124. package/dist/api/utilities/timestamp.js +206 -0
  125. package/dist/api/utilities/timestamp.js.map +1 -0
  126. package/dist/api/utilities/video-transcode.d.ts +218 -0
  127. package/dist/api/utilities/video-transcode.js +624 -0
  128. package/dist/api/utilities/video-transcode.js.map +1 -0
  129. package/dist/api/utilities/whisper-model.d.ts +330 -0
  130. package/dist/api/utilities/whisper-model.js +587 -0
  131. package/dist/api/utilities/whisper-model.js.map +1 -0
  132. package/dist/api/utils.d.ts +19 -0
  133. package/dist/api/utils.js +39 -0
  134. package/dist/api/utils.js.map +1 -0
  135. package/dist/api/webrtc-stream.d.ts +294 -0
  136. package/dist/api/webrtc-stream.js +546 -0
  137. package/dist/api/webrtc-stream.js.map +1 -0
  138. package/dist/api/whisper.d.ts +326 -0
  139. package/dist/api/whisper.js +402 -0
  140. package/dist/api/whisper.js.map +1 -0
  141. package/dist/constants/bsf-options.d.ts +364 -0
  142. package/dist/constants/bsf-options.js +7 -0
  143. package/dist/constants/bsf-options.js.map +1 -0
  144. package/dist/constants/channel-layouts.d.ts +53 -0
  145. package/dist/constants/channel-layouts.js +57 -0
  146. package/dist/constants/channel-layouts.js.map +1 -0
  147. package/dist/constants/constants.d.ts +2435 -0
  148. package/dist/constants/constants.js +1989 -0
  149. package/dist/constants/constants.js.map +1 -0
  150. package/dist/constants/decoders.d.ts +651 -0
  151. package/dist/constants/decoders.js +641 -0
  152. package/dist/constants/decoders.js.map +1 -0
  153. package/dist/constants/encoders.d.ts +314 -0
  154. package/dist/constants/encoders.js +309 -0
  155. package/dist/constants/encoders.js.map +1 -0
  156. package/dist/constants/filter-options.d.ts +12099 -0
  157. package/dist/constants/filter-options.js +7 -0
  158. package/dist/constants/filter-options.js.map +1 -0
  159. package/dist/constants/format-options.d.ts +4319 -0
  160. package/dist/constants/format-options.js +7 -0
  161. package/dist/constants/format-options.js.map +1 -0
  162. package/dist/constants/formats.d.ts +18 -0
  163. package/dist/constants/formats.js +7 -0
  164. package/dist/constants/formats.js.map +1 -0
  165. package/dist/constants/hardware.d.ts +26 -0
  166. package/dist/constants/hardware.js +27 -0
  167. package/dist/constants/hardware.js.map +1 -0
  168. package/dist/constants/index.d.ts +10 -0
  169. package/dist/constants/index.js +6 -0
  170. package/dist/constants/index.js.map +1 -0
  171. package/dist/constants/options.d.ts +6217 -0
  172. package/dist/constants/options.js +7 -0
  173. package/dist/constants/options.js.map +1 -0
  174. package/dist/ffmpeg/index.d.ts +101 -0
  175. package/dist/ffmpeg/index.js +161 -0
  176. package/dist/ffmpeg/index.js.map +1 -0
  177. package/dist/ffmpeg/version.d.ts +6 -0
  178. package/dist/ffmpeg/version.js +7 -0
  179. package/dist/ffmpeg/version.js.map +1 -0
  180. package/dist/index.d.ts +4 -0
  181. package/dist/index.js +9 -0
  182. package/dist/index.js.map +1 -0
  183. package/dist/lib/audio-fifo.d.ts +399 -0
  184. package/dist/lib/audio-fifo.js +431 -0
  185. package/dist/lib/audio-fifo.js.map +1 -0
  186. package/dist/lib/binding.d.ts +242 -0
  187. package/dist/lib/binding.js +102 -0
  188. package/dist/lib/binding.js.map +1 -0
  189. package/dist/lib/bitstream-filter-context.d.ts +381 -0
  190. package/dist/lib/bitstream-filter-context.js +443 -0
  191. package/dist/lib/bitstream-filter-context.js.map +1 -0
  192. package/dist/lib/bitstream-filter.d.ts +140 -0
  193. package/dist/lib/bitstream-filter.js +154 -0
  194. package/dist/lib/bitstream-filter.js.map +1 -0
  195. package/dist/lib/codec-context.d.ts +1069 -0
  196. package/dist/lib/codec-context.js +1336 -0
  197. package/dist/lib/codec-context.js.map +1 -0
  198. package/dist/lib/codec-parameters.d.ts +664 -0
  199. package/dist/lib/codec-parameters.js +813 -0
  200. package/dist/lib/codec-parameters.js.map +1 -0
  201. package/dist/lib/codec-parser.d.ts +201 -0
  202. package/dist/lib/codec-parser.js +213 -0
  203. package/dist/lib/codec-parser.js.map +1 -0
  204. package/dist/lib/codec.d.ts +617 -0
  205. package/dist/lib/codec.js +746 -0
  206. package/dist/lib/codec.js.map +1 -0
  207. package/dist/lib/device.d.ts +294 -0
  208. package/dist/lib/device.js +326 -0
  209. package/dist/lib/device.js.map +1 -0
  210. package/dist/lib/dictionary.d.ts +333 -0
  211. package/dist/lib/dictionary.js +372 -0
  212. package/dist/lib/dictionary.js.map +1 -0
  213. package/dist/lib/error.d.ts +311 -0
  214. package/dist/lib/error.js +395 -0
  215. package/dist/lib/error.js.map +1 -0
  216. package/dist/lib/fifo.d.ts +416 -0
  217. package/dist/lib/fifo.js +453 -0
  218. package/dist/lib/fifo.js.map +1 -0
  219. package/dist/lib/filter-context.d.ts +714 -0
  220. package/dist/lib/filter-context.js +783 -0
  221. package/dist/lib/filter-context.js.map +1 -0
  222. package/dist/lib/filter-graph-segment.d.ts +161 -0
  223. package/dist/lib/filter-graph-segment.js +172 -0
  224. package/dist/lib/filter-graph-segment.js.map +1 -0
  225. package/dist/lib/filter-graph.d.ts +641 -0
  226. package/dist/lib/filter-graph.js +704 -0
  227. package/dist/lib/filter-graph.js.map +1 -0
  228. package/dist/lib/filter-inout.d.ts +202 -0
  229. package/dist/lib/filter-inout.js +261 -0
  230. package/dist/lib/filter-inout.js.map +1 -0
  231. package/dist/lib/filter.d.ts +243 -0
  232. package/dist/lib/filter.js +272 -0
  233. package/dist/lib/filter.js.map +1 -0
  234. package/dist/lib/format-context.d.ts +1335 -0
  235. package/dist/lib/format-context.js +1455 -0
  236. package/dist/lib/format-context.js.map +1 -0
  237. package/dist/lib/frame-utils.d.ts +116 -0
  238. package/dist/lib/frame-utils.js +98 -0
  239. package/dist/lib/frame-utils.js.map +1 -0
  240. package/dist/lib/frame.d.ts +1315 -0
  241. package/dist/lib/frame.js +1535 -0
  242. package/dist/lib/frame.js.map +1 -0
  243. package/dist/lib/hardware-device-context.d.ts +362 -0
  244. package/dist/lib/hardware-device-context.js +383 -0
  245. package/dist/lib/hardware-device-context.js.map +1 -0
  246. package/dist/lib/hardware-frames-context.d.ts +418 -0
  247. package/dist/lib/hardware-frames-context.js +471 -0
  248. package/dist/lib/hardware-frames-context.js.map +1 -0
  249. package/dist/lib/index.d.ts +35 -0
  250. package/dist/lib/index.js +60 -0
  251. package/dist/lib/index.js.map +1 -0
  252. package/dist/lib/input-format.d.ts +249 -0
  253. package/dist/lib/input-format.js +306 -0
  254. package/dist/lib/input-format.js.map +1 -0
  255. package/dist/lib/io-context.d.ts +698 -0
  256. package/dist/lib/io-context.js +771 -0
  257. package/dist/lib/io-context.js.map +1 -0
  258. package/dist/lib/log.d.ts +174 -0
  259. package/dist/lib/log.js +184 -0
  260. package/dist/lib/log.js.map +1 -0
  261. package/dist/lib/native-types.d.ts +1024 -0
  262. package/dist/lib/native-types.js +2 -0
  263. package/dist/lib/native-types.js.map +1 -0
  264. package/dist/lib/option.d.ts +953 -0
  265. package/dist/lib/option.js +1607 -0
  266. package/dist/lib/option.js.map +1 -0
  267. package/dist/lib/output-format.d.ts +222 -0
  268. package/dist/lib/output-format.js +259 -0
  269. package/dist/lib/output-format.js.map +1 -0
  270. package/dist/lib/packet.d.ts +521 -0
  271. package/dist/lib/packet.js +613 -0
  272. package/dist/lib/packet.js.map +1 -0
  273. package/dist/lib/rational.d.ts +251 -0
  274. package/dist/lib/rational.js +278 -0
  275. package/dist/lib/rational.js.map +1 -0
  276. package/dist/lib/software-resample-context.d.ts +552 -0
  277. package/dist/lib/software-resample-context.js +592 -0
  278. package/dist/lib/software-resample-context.js.map +1 -0
  279. package/dist/lib/software-scale-context.d.ts +344 -0
  280. package/dist/lib/software-scale-context.js +366 -0
  281. package/dist/lib/software-scale-context.js.map +1 -0
  282. package/dist/lib/stream.d.ts +384 -0
  283. package/dist/lib/stream.js +525 -0
  284. package/dist/lib/stream.js.map +1 -0
  285. package/dist/lib/sync-queue.d.ts +179 -0
  286. package/dist/lib/sync-queue.js +197 -0
  287. package/dist/lib/sync-queue.js.map +1 -0
  288. package/dist/lib/types.d.ts +34 -0
  289. package/dist/lib/types.js +2 -0
  290. package/dist/lib/types.js.map +1 -0
  291. package/dist/lib/utilities.d.ts +1198 -0
  292. package/dist/lib/utilities.js +1302 -0
  293. package/dist/lib/utilities.js.map +1 -0
  294. package/dist/utils/electron.d.ts +49 -0
  295. package/dist/utils/electron.js +63 -0
  296. package/dist/utils/electron.js.map +1 -0
  297. package/dist/utils/index.d.ts +6 -0
  298. package/dist/utils/index.js +7 -0
  299. package/dist/utils/index.js.map +1 -0
  300. package/dist/utils/libc.d.ts +11 -0
  301. package/dist/utils/libc.js +35 -0
  302. package/dist/utils/libc.js.map +1 -0
  303. package/dist/utils/variant.d.ts +26 -0
  304. package/dist/utils/variant.js +31 -0
  305. package/dist/utils/variant.js.map +1 -0
  306. package/dist/webrtc/index.d.ts +4 -0
  307. package/dist/webrtc/index.js +7 -0
  308. package/dist/webrtc/index.js.map +1 -0
  309. package/install/check.js +124 -0
  310. package/install/ffmpeg.js +66 -0
  311. package/package.json +165 -3
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Auto-generated codec private-option types.
3
+ * Generated from FFmpeg codec AVOption sources (see scripts/generate-options-source.js).
4
+ * DO NOT EDIT MANUALLY.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/constants/options.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Get the absolute path to the FFmpeg binary.
3
+ *
4
+ * The binary ships in the optional `@seydx/node-av-ffmpeg` package
5
+ * (`npm install @seydx/node-av-ffmpeg`), which installs the build for the
6
+ * current platform. It is built from the same FFmpeg as the native bindings,
7
+ * so node-av-lgpl and node-av-light use `@seydx/node-av-ffmpeg-lgpl` and
8
+ * `@seydx/node-av-ffmpeg-light` instead.
9
+ * In Electron apps the path points into `app.asar.unpacked`.
10
+ *
11
+ * @returns Absolute path to the FFmpeg binary
12
+ *
13
+ * @throws {Error} If the FFmpeg CLI package is not installed or has no build for this platform
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { ffmpegPath } from 'node-av/ffmpeg';
18
+ *
19
+ * const path = ffmpegPath();
20
+ * console.log('FFmpeg binary at:', path);
21
+ * // e.g. /path/to/node_modules/@seydx/node-av-ffmpeg-linux-x64/ffmpeg
22
+ * ```
23
+ *
24
+ * @example Convert video using FFmpeg binary
25
+ * ```typescript
26
+ * import { ffmpegPath } from 'node-av/ffmpeg';
27
+ * import { execFile } from 'node:child_process';
28
+ * import { promisify } from 'node:util';
29
+ *
30
+ * const execFileAsync = promisify(execFile);
31
+ *
32
+ * async function convertVideo(input: string, output: string) {
33
+ * const args = [
34
+ * '-i', input,
35
+ * '-c:v', 'libx264',
36
+ * '-crf', '23',
37
+ * '-c:a', 'aac',
38
+ * output
39
+ * ];
40
+ *
41
+ * await execFileAsync(ffmpegPath(), args);
42
+ * }
43
+ * ```
44
+ */
45
+ export declare function ffmpegPath(): string;
46
+ /**
47
+ * Check if the FFmpeg binary is available.
48
+ *
49
+ * Returns whether the FFmpeg CLI package (`@seydx/node-av-ffmpeg`, or the
50
+ * one of the node-av-lgpl and node-av-light variants) is installed with a
51
+ * build for this platform, i.e. whether {@link ffmpegPath} will succeed.
52
+ *
53
+ * @returns `true` if the FFmpeg binary exists, `false` otherwise
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * import { isFfmpegAvailable, ffmpegPath } from 'node-av/ffmpeg';
58
+ *
59
+ * if (isFfmpegAvailable()) {
60
+ * console.log('FFmpeg is ready to use');
61
+ * // Safe to use ffmpegPath() and execute FFmpeg commands
62
+ * } else {
63
+ * console.log('FFmpeg binary not found, run: npm install @seydx/node-av-ffmpeg');
64
+ * }
65
+ * ```
66
+ *
67
+ * @example Conditional FFmpeg usage
68
+ * ```typescript
69
+ * import { isFfmpegAvailable, ffmpegPath } from 'node-av/ffmpeg';
70
+ * import { execFile } from 'node:child_process';
71
+ *
72
+ * async function getFFmpegVersion(): Promise<string | null> {
73
+ * if (!isFfmpegAvailable()) {
74
+ * return null;
75
+ * }
76
+ *
77
+ * try {
78
+ * const { stdout } = await execFile(ffmpegPath(), ['-version']);
79
+ * return stdout;
80
+ * } catch (error) {
81
+ * console.error('Failed to execute FFmpeg:', error);
82
+ * return null;
83
+ * }
84
+ * }
85
+ * ```
86
+ */
87
+ export declare function isFfmpegAvailable(): boolean;
88
+ /**
89
+ * Get the FFmpeg version used by the binary.
90
+ *
91
+ * @returns FFmpeg version string (e.g. "8.0")
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * import { ffmpegVersion } from 'node-av/ffmpeg';
96
+ *
97
+ * console.log('FFmpeg version:', ffmpegVersion());
98
+ * // Output: FFmpeg version: 8.0
99
+ * ```
100
+ */
101
+ export declare function ffmpegVersion(): string;
@@ -0,0 +1,161 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { createRequire } from 'node:module';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { getDirname, getUnpackedPath } from '../utils/electron.js';
5
+ import { isMusl } from '../utils/libc.js';
6
+ import { ffmpegPackageName } from '../utils/variant.js';
7
+ import { FFMPEG_VERSION } from './version.js';
8
+ const __dirname = getDirname(import.meta.url);
9
+ const require = createRequire(import.meta.url);
10
+ // @seydx/node-av-ffmpeg, or the -lgpl / -light package of the other variants
11
+ const FFMPEG_PACKAGE = ffmpegPackageName();
12
+ const ffmpegFile = 'ffmpeg' + (process.platform === 'win32' ? '.exe' : '');
13
+ // Local build (development, CI tests): binary/ next to dist/
14
+ const localFfmpegPath = resolve(__dirname, '../../binary', ffmpegFile);
15
+ let resolvedFfmpegPath = null;
16
+ /**
17
+ * Find the FFmpeg binary.
18
+ *
19
+ * Checks the local `binary/` folder first, then the platform package installed by the variant's FFmpeg CLI package.
20
+ *
21
+ * @returns Absolute path to the binary, or `null` if neither is installed
22
+ *
23
+ * @internal
24
+ */
25
+ function findFfmpeg() {
26
+ if (resolvedFfmpegPath) {
27
+ return resolvedFfmpegPath;
28
+ }
29
+ if (existsSync(localFfmpegPath)) {
30
+ resolvedFfmpegPath = localFfmpegPath;
31
+ return resolvedFfmpegPath;
32
+ }
33
+ try {
34
+ // The platform package is a dependency of the meta package, not of node-av, so it is
35
+ // resolved from there (strict layouts like pnpm don't expose it to node-av directly).
36
+ const metaPackageJson = require.resolve(`${FFMPEG_PACKAGE}/package.json`);
37
+ const platformPackage = `${FFMPEG_PACKAGE}-${process.platform}-${process.arch}${isMusl() ? '-musl' : ''}`;
38
+ const platformPackageJson = createRequire(metaPackageJson).resolve(`${platformPackage}/package.json`);
39
+ const path = getUnpackedPath(join(dirname(platformPackageJson), ffmpegFile));
40
+ if (existsSync(path)) {
41
+ resolvedFfmpegPath = path;
42
+ return resolvedFfmpegPath;
43
+ }
44
+ }
45
+ catch {
46
+ // Not installed, or no build for this platform
47
+ }
48
+ return null;
49
+ }
50
+ /**
51
+ * Get the absolute path to the FFmpeg binary.
52
+ *
53
+ * The binary ships in the optional `@seydx/node-av-ffmpeg` package
54
+ * (`npm install @seydx/node-av-ffmpeg`), which installs the build for the
55
+ * current platform. It is built from the same FFmpeg as the native bindings,
56
+ * so node-av-lgpl and node-av-light use `@seydx/node-av-ffmpeg-lgpl` and
57
+ * `@seydx/node-av-ffmpeg-light` instead.
58
+ * In Electron apps the path points into `app.asar.unpacked`.
59
+ *
60
+ * @returns Absolute path to the FFmpeg binary
61
+ *
62
+ * @throws {Error} If the FFmpeg CLI package is not installed or has no build for this platform
63
+ *
64
+ * @example
65
+ * ```typescript
66
+ * import { ffmpegPath } from 'node-av/ffmpeg';
67
+ *
68
+ * const path = ffmpegPath();
69
+ * console.log('FFmpeg binary at:', path);
70
+ * // e.g. /path/to/node_modules/@seydx/node-av-ffmpeg-linux-x64/ffmpeg
71
+ * ```
72
+ *
73
+ * @example Convert video using FFmpeg binary
74
+ * ```typescript
75
+ * import { ffmpegPath } from 'node-av/ffmpeg';
76
+ * import { execFile } from 'node:child_process';
77
+ * import { promisify } from 'node:util';
78
+ *
79
+ * const execFileAsync = promisify(execFile);
80
+ *
81
+ * async function convertVideo(input: string, output: string) {
82
+ * const args = [
83
+ * '-i', input,
84
+ * '-c:v', 'libx264',
85
+ * '-crf', '23',
86
+ * '-c:a', 'aac',
87
+ * output
88
+ * ];
89
+ *
90
+ * await execFileAsync(ffmpegPath(), args);
91
+ * }
92
+ * ```
93
+ */
94
+ export function ffmpegPath() {
95
+ const path = findFfmpeg();
96
+ if (!path) {
97
+ throw new Error(`FFmpeg binary not found for ${process.platform}-${process.arch}. Install it with: npm install ${FFMPEG_PACKAGE}`);
98
+ }
99
+ return path;
100
+ }
101
+ /**
102
+ * Check if the FFmpeg binary is available.
103
+ *
104
+ * Returns whether the FFmpeg CLI package (`@seydx/node-av-ffmpeg`, or the
105
+ * one of the node-av-lgpl and node-av-light variants) is installed with a
106
+ * build for this platform, i.e. whether {@link ffmpegPath} will succeed.
107
+ *
108
+ * @returns `true` if the FFmpeg binary exists, `false` otherwise
109
+ *
110
+ * @example
111
+ * ```typescript
112
+ * import { isFfmpegAvailable, ffmpegPath } from 'node-av/ffmpeg';
113
+ *
114
+ * if (isFfmpegAvailable()) {
115
+ * console.log('FFmpeg is ready to use');
116
+ * // Safe to use ffmpegPath() and execute FFmpeg commands
117
+ * } else {
118
+ * console.log('FFmpeg binary not found, run: npm install @seydx/node-av-ffmpeg');
119
+ * }
120
+ * ```
121
+ *
122
+ * @example Conditional FFmpeg usage
123
+ * ```typescript
124
+ * import { isFfmpegAvailable, ffmpegPath } from 'node-av/ffmpeg';
125
+ * import { execFile } from 'node:child_process';
126
+ *
127
+ * async function getFFmpegVersion(): Promise<string | null> {
128
+ * if (!isFfmpegAvailable()) {
129
+ * return null;
130
+ * }
131
+ *
132
+ * try {
133
+ * const { stdout } = await execFile(ffmpegPath(), ['-version']);
134
+ * return stdout;
135
+ * } catch (error) {
136
+ * console.error('Failed to execute FFmpeg:', error);
137
+ * return null;
138
+ * }
139
+ * }
140
+ * ```
141
+ */
142
+ export function isFfmpegAvailable() {
143
+ return findFfmpeg() !== null;
144
+ }
145
+ /**
146
+ * Get the FFmpeg version used by the binary.
147
+ *
148
+ * @returns FFmpeg version string (e.g. "8.0")
149
+ *
150
+ * @example
151
+ * ```typescript
152
+ * import { ffmpegVersion } from 'node-av/ffmpeg';
153
+ *
154
+ * console.log('FFmpeg version:', ffmpegVersion());
155
+ * // Output: FFmpeg version: 8.0
156
+ * ```
157
+ */
158
+ export function ffmpegVersion() {
159
+ return FFMPEG_VERSION;
160
+ }
161
+ //# 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,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,6EAA6E;AAC7E,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;AAC3C,MAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE3E,6DAA6D;AAC7D,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AAEvE,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAE7C;;;;;;;;GAQG;AACH,SAAS,UAAU;IACjB,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QAChC,kBAAkB,GAAG,eAAe,CAAC;QACrC,OAAO,kBAAkB,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC;QACH,qFAAqF;QACrF,sFAAsF;QACtF,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,cAAc,eAAe,CAAC,CAAC;QAC1E,MAAM,eAAe,GAAG,GAAG,cAAc,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1G,MAAM,mBAAmB,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,eAAe,eAAe,CAAC,CAAC;QACtG,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;QAC7E,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,kBAAkB,GAAG,IAAI,CAAC;YAC1B,OAAO,kBAAkB,CAAC;QAC5B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,+BAA+B,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,kCAAkC,cAAc,EAAE,CAAC,CAAC;IACrI,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,EAAE,KAAK,IAAI,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,cAAc,CAAC;AACxB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * FFmpeg Version
3
+ * Auto-generated from externals/jellyfin-ffmpeg/FFMPEG_VERSION
4
+ * DO NOT EDIT MANUALLY
5
+ */
6
+ export declare const FFMPEG_VERSION = "8.1.3";
@@ -0,0 +1,7 @@
1
+ /**
2
+ * FFmpeg Version
3
+ * Auto-generated from externals/jellyfin-ffmpeg/FFMPEG_VERSION
4
+ * DO NOT EDIT MANUALLY
5
+ */
6
+ export const FFMPEG_VERSION = '8.1.3';
7
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/ffmpeg/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './lib/index.js';
2
+ export * from './api/index.js';
3
+ export * from './constants/index.js';
4
+ export * from './ffmpeg/index.js';
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
1
+ // Export low-level API
2
+ export * from './lib/index.js';
3
+ // Export high-level API
4
+ export * from './api/index.js';
5
+ // Export all generated constants
6
+ export * from './constants/index.js';
7
+ // Export ffmpeg utilities
8
+ export * from './ffmpeg/index.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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;AAErC,0BAA0B;AAC1B,cAAc,mBAAmB,CAAC"}