webcodecs-node 0.3.0 → 0.5.1

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 (348) hide show
  1. package/dist/backends/types.d.ts +6 -3
  2. package/dist/backends/types.d.ts.map +1 -1
  3. package/dist/backends/types.js +2 -2
  4. package/dist/backends/types.js.map +1 -1
  5. package/dist/{ffmpeg → codec-utils}/audio-codecs.d.ts +13 -12
  6. package/dist/codec-utils/audio-codecs.d.ts.map +1 -0
  7. package/dist/{ffmpeg → codec-utils}/audio-codecs.js +29 -11
  8. package/dist/codec-utils/audio-codecs.js.map +1 -0
  9. package/dist/{ffmpeg → codec-utils}/formats.d.ts +7 -7
  10. package/dist/codec-utils/formats.d.ts.map +1 -0
  11. package/dist/{ffmpeg → codec-utils}/formats.js +7 -7
  12. package/dist/codec-utils/formats.js.map +1 -0
  13. package/dist/{ffmpeg → codec-utils}/index.d.ts +3 -3
  14. package/dist/codec-utils/index.d.ts.map +1 -0
  15. package/dist/{ffmpeg → codec-utils}/index.js +3 -4
  16. package/dist/codec-utils/index.js.map +1 -0
  17. package/dist/{ffmpeg → codec-utils}/types.d.ts +13 -11
  18. package/dist/codec-utils/types.d.ts.map +1 -0
  19. package/dist/{ffmpeg → codec-utils}/types.js +3 -1
  20. package/dist/codec-utils/types.js.map +1 -0
  21. package/dist/containers/Demuxer.d.ts +114 -0
  22. package/dist/containers/Demuxer.d.ts.map +1 -0
  23. package/dist/containers/Demuxer.js +256 -0
  24. package/dist/containers/Demuxer.js.map +1 -0
  25. package/dist/containers/Muxer.d.ts +142 -0
  26. package/dist/containers/Muxer.d.ts.map +1 -0
  27. package/dist/containers/Muxer.js +295 -0
  28. package/dist/containers/Muxer.js.map +1 -0
  29. package/dist/containers/extract.d.ts +25 -0
  30. package/dist/containers/extract.d.ts.map +1 -0
  31. package/dist/containers/extract.js +64 -0
  32. package/dist/containers/extract.js.map +1 -0
  33. package/dist/containers/index.d.ts +40 -0
  34. package/dist/containers/index.d.ts.map +1 -0
  35. package/dist/containers/index.js +41 -0
  36. package/dist/containers/index.js.map +1 -0
  37. package/dist/containers/transcode.d.ts +138 -0
  38. package/dist/containers/transcode.d.ts.map +1 -0
  39. package/dist/containers/transcode.js +536 -0
  40. package/dist/containers/transcode.js.map +1 -0
  41. package/dist/core/AudioData.d.ts +4 -0
  42. package/dist/core/AudioData.d.ts.map +1 -1
  43. package/dist/core/AudioData.js +56 -4
  44. package/dist/core/AudioData.js.map +1 -1
  45. package/dist/core/EncodedAudioChunk.d.ts +1 -1
  46. package/dist/core/EncodedAudioChunk.d.ts.map +1 -1
  47. package/dist/core/EncodedAudioChunk.js +1 -1
  48. package/dist/core/EncodedAudioChunk.js.map +1 -1
  49. package/dist/core/EncodedVideoChunk.d.ts.map +1 -1
  50. package/dist/core/EncodedVideoChunk.js +3 -19
  51. package/dist/core/EncodedVideoChunk.js.map +1 -1
  52. package/dist/core/VideoFrame.d.ts +6 -1
  53. package/dist/core/VideoFrame.d.ts.map +1 -1
  54. package/dist/core/VideoFrame.js +130 -17
  55. package/dist/core/VideoFrame.js.map +1 -1
  56. package/dist/decoders/AudioDecoder.d.ts +8 -0
  57. package/dist/decoders/AudioDecoder.d.ts.map +1 -1
  58. package/dist/decoders/AudioDecoder.js +62 -32
  59. package/dist/decoders/AudioDecoder.js.map +1 -1
  60. package/dist/decoders/ImageDecoder.d.ts +0 -3
  61. package/dist/decoders/ImageDecoder.d.ts.map +1 -1
  62. package/dist/decoders/ImageDecoder.js +13 -225
  63. package/dist/decoders/ImageDecoder.js.map +1 -1
  64. package/dist/decoders/VideoDecoder.d.ts +8 -0
  65. package/dist/decoders/VideoDecoder.d.ts.map +1 -1
  66. package/dist/decoders/VideoDecoder.js +76 -46
  67. package/dist/decoders/VideoDecoder.js.map +1 -1
  68. package/dist/demos/demo-1080p-transcode.d.ts +8 -0
  69. package/dist/demos/demo-1080p-transcode.d.ts.map +1 -0
  70. package/dist/demos/demo-1080p-transcode.js +188 -0
  71. package/dist/demos/demo-1080p-transcode.js.map +1 -0
  72. package/dist/demos/demo-containers.d.ts +7 -0
  73. package/dist/demos/demo-containers.d.ts.map +1 -0
  74. package/dist/demos/demo-containers.js +140 -0
  75. package/dist/demos/demo-containers.js.map +1 -0
  76. package/dist/demos/demo-four-corners.js +4 -4
  77. package/dist/demos/demo-four-corners.js.map +1 -1
  78. package/dist/demos/demo-hwaccel.js +1 -1
  79. package/dist/demos/demo-hwaccel.js.map +1 -1
  80. package/dist/demos/demo-samples.js +4 -4
  81. package/dist/demos/demo-samples.js.map +1 -1
  82. package/dist/demos/demo-streaming.js +6 -6
  83. package/dist/demos/demo-streaming.js.map +1 -1
  84. package/dist/encoders/AudioEncoder.d.ts +8 -0
  85. package/dist/encoders/AudioEncoder.d.ts.map +1 -1
  86. package/dist/encoders/AudioEncoder.js +68 -26
  87. package/dist/encoders/AudioEncoder.js.map +1 -1
  88. package/dist/encoders/VideoEncoder.d.ts +8 -0
  89. package/dist/encoders/VideoEncoder.d.ts.map +1 -1
  90. package/dist/encoders/VideoEncoder.js +64 -13
  91. package/dist/encoders/VideoEncoder.js.map +1 -1
  92. package/dist/formats/conversions/batch-converter.d.ts +61 -0
  93. package/dist/formats/conversions/batch-converter.d.ts.map +1 -0
  94. package/dist/formats/conversions/batch-converter.js +274 -0
  95. package/dist/formats/conversions/batch-converter.js.map +1 -0
  96. package/dist/formats/conversions/frame-converter.d.ts.map +1 -1
  97. package/dist/formats/conversions/frame-converter.js +17 -10
  98. package/dist/formats/conversions/frame-converter.js.map +1 -1
  99. package/dist/formats/conversions/index.d.ts +1 -0
  100. package/dist/formats/conversions/index.d.ts.map +1 -1
  101. package/dist/formats/conversions/index.js +2 -0
  102. package/dist/formats/conversions/index.js.map +1 -1
  103. package/dist/hardware/decoder-args.d.ts +2 -7
  104. package/dist/hardware/decoder-args.d.ts.map +1 -1
  105. package/dist/hardware/decoder-args.js +2 -32
  106. package/dist/hardware/decoder-args.js.map +1 -1
  107. package/dist/hardware/encoder-args.d.ts +2 -11
  108. package/dist/hardware/encoder-args.d.ts.map +1 -1
  109. package/dist/hardware/encoder-args.js +2 -71
  110. package/dist/hardware/encoder-args.js.map +1 -1
  111. package/dist/hardware/index.d.ts +2 -2
  112. package/dist/hardware/index.d.ts.map +1 -1
  113. package/dist/hardware/index.js +2 -2
  114. package/dist/hardware/index.js.map +1 -1
  115. package/dist/index.d.ts +5 -7
  116. package/dist/index.d.ts.map +1 -1
  117. package/dist/index.js +5 -6
  118. package/dist/index.js.map +1 -1
  119. package/dist/node-av/NodeAvAudioDecoder.d.ts +2 -2
  120. package/dist/node-av/NodeAvAudioDecoder.d.ts.map +1 -1
  121. package/dist/node-av/NodeAvAudioDecoder.js +63 -56
  122. package/dist/node-av/NodeAvAudioDecoder.js.map +1 -1
  123. package/dist/node-av/NodeAvAudioEncoder.d.ts +6 -0
  124. package/dist/node-av/NodeAvAudioEncoder.d.ts.map +1 -1
  125. package/dist/node-av/NodeAvAudioEncoder.js +166 -45
  126. package/dist/node-av/NodeAvAudioEncoder.js.map +1 -1
  127. package/dist/node-av/NodeAvImageDecoder.d.ts +28 -9
  128. package/dist/node-av/NodeAvImageDecoder.d.ts.map +1 -1
  129. package/dist/node-av/NodeAvImageDecoder.js +156 -37
  130. package/dist/node-av/NodeAvImageDecoder.js.map +1 -1
  131. package/dist/node-av/NodeAvVideoDecoder.d.ts +1 -1
  132. package/dist/node-av/NodeAvVideoDecoder.d.ts.map +1 -1
  133. package/dist/node-av/NodeAvVideoDecoder.js +20 -16
  134. package/dist/node-av/NodeAvVideoDecoder.js.map +1 -1
  135. package/dist/node-av/NodeAvVideoEncoder.d.ts +12 -0
  136. package/dist/node-av/NodeAvVideoEncoder.d.ts.map +1 -1
  137. package/dist/node-av/NodeAvVideoEncoder.js +175 -63
  138. package/dist/node-av/NodeAvVideoEncoder.js.map +1 -1
  139. package/dist/polyfill.d.ts.map +1 -1
  140. package/dist/polyfill.js +11 -9
  141. package/dist/polyfill.js.map +1 -1
  142. package/dist/utils/aac.d.ts.map +1 -1
  143. package/dist/utils/aac.js +6 -0
  144. package/dist/utils/aac.js.map +1 -1
  145. package/dist/utils/buffer-pool.d.ts +109 -0
  146. package/dist/utils/buffer-pool.d.ts.map +1 -0
  147. package/dist/utils/buffer-pool.js +278 -0
  148. package/dist/utils/buffer-pool.js.map +1 -0
  149. package/dist/utils/codec-cache.d.ts +65 -0
  150. package/dist/utils/codec-cache.d.ts.map +1 -0
  151. package/dist/utils/codec-cache.js +116 -0
  152. package/dist/utils/codec-cache.js.map +1 -0
  153. package/dist/utils/errors.d.ts +62 -0
  154. package/dist/utils/errors.d.ts.map +1 -0
  155. package/dist/utils/errors.js +84 -0
  156. package/dist/utils/errors.js.map +1 -0
  157. package/dist/utils/hardware-pool.d.ts +88 -0
  158. package/dist/utils/hardware-pool.d.ts.map +1 -0
  159. package/dist/utils/hardware-pool.js +266 -0
  160. package/dist/utils/hardware-pool.js.map +1 -0
  161. package/dist/utils/index.d.ts +5 -0
  162. package/dist/utils/index.d.ts.map +1 -1
  163. package/dist/utils/index.js +10 -0
  164. package/dist/utils/index.js.map +1 -1
  165. package/dist/utils/timeout.d.ts +44 -0
  166. package/dist/utils/timeout.d.ts.map +1 -0
  167. package/dist/utils/timeout.js +73 -0
  168. package/dist/utils/timeout.js.map +1 -0
  169. package/dist/utils/type-guards.d.ts +11 -1
  170. package/dist/utils/type-guards.d.ts.map +1 -1
  171. package/dist/utils/type-guards.js.map +1 -1
  172. package/package.json +13 -35
  173. package/dist/AudioData.d.ts +0 -6
  174. package/dist/AudioData.d.ts.map +0 -1
  175. package/dist/AudioData.js +0 -6
  176. package/dist/AudioData.js.map +0 -1
  177. package/dist/AudioDecoder.d.ts +0 -6
  178. package/dist/AudioDecoder.d.ts.map +0 -1
  179. package/dist/AudioDecoder.js +0 -6
  180. package/dist/AudioDecoder.js.map +0 -1
  181. package/dist/AudioEncoder.d.ts +0 -6
  182. package/dist/AudioEncoder.d.ts.map +0 -1
  183. package/dist/AudioEncoder.js +0 -6
  184. package/dist/AudioEncoder.js.map +0 -1
  185. package/dist/EncodedAudioChunk.d.ts +0 -6
  186. package/dist/EncodedAudioChunk.d.ts.map +0 -1
  187. package/dist/EncodedAudioChunk.js +0 -6
  188. package/dist/EncodedAudioChunk.js.map +0 -1
  189. package/dist/EncodedVideoChunk.d.ts +0 -6
  190. package/dist/EncodedVideoChunk.d.ts.map +0 -1
  191. package/dist/EncodedVideoChunk.js +0 -6
  192. package/dist/EncodedVideoChunk.js.map +0 -1
  193. package/dist/FFmpegProcess.d.ts +0 -6
  194. package/dist/FFmpegProcess.d.ts.map +0 -1
  195. package/dist/FFmpegProcess.js +0 -6
  196. package/dist/FFmpegProcess.js.map +0 -1
  197. package/dist/HardwareAcceleration.d.ts +0 -6
  198. package/dist/HardwareAcceleration.d.ts.map +0 -1
  199. package/dist/HardwareAcceleration.js +0 -6
  200. package/dist/HardwareAcceleration.js.map +0 -1
  201. package/dist/ImageDecoder.d.ts +0 -6
  202. package/dist/ImageDecoder.d.ts.map +0 -1
  203. package/dist/ImageDecoder.js +0 -6
  204. package/dist/ImageDecoder.js.map +0 -1
  205. package/dist/Logger.d.ts +0 -6
  206. package/dist/Logger.d.ts.map +0 -1
  207. package/dist/Logger.js +0 -6
  208. package/dist/Logger.js.map +0 -1
  209. package/dist/MediaCapabilities.d.ts +0 -9
  210. package/dist/MediaCapabilities.d.ts.map +0 -1
  211. package/dist/MediaCapabilities.js +0 -8
  212. package/dist/MediaCapabilities.js.map +0 -1
  213. package/dist/VideoDecoder.d.ts +0 -6
  214. package/dist/VideoDecoder.d.ts.map +0 -1
  215. package/dist/VideoDecoder.js +0 -6
  216. package/dist/VideoDecoder.js.map +0 -1
  217. package/dist/VideoEncoder.d.ts +0 -6
  218. package/dist/VideoEncoder.d.ts.map +0 -1
  219. package/dist/VideoEncoder.js +0 -6
  220. package/dist/VideoEncoder.js.map +0 -1
  221. package/dist/VideoFrame.d.ts +0 -10
  222. package/dist/VideoFrame.d.ts.map +0 -1
  223. package/dist/VideoFrame.js +0 -9
  224. package/dist/VideoFrame.js.map +0 -1
  225. package/dist/__tests__/AudioData.test.d.ts +0 -5
  226. package/dist/__tests__/AudioData.test.d.ts.map +0 -1
  227. package/dist/__tests__/AudioData.test.js +0 -179
  228. package/dist/__tests__/AudioData.test.js.map +0 -1
  229. package/dist/__tests__/AudioDecoder.test.d.ts +0 -5
  230. package/dist/__tests__/AudioDecoder.test.d.ts.map +0 -1
  231. package/dist/__tests__/AudioDecoder.test.js +0 -733
  232. package/dist/__tests__/AudioDecoder.test.js.map +0 -1
  233. package/dist/__tests__/AudioEncoder.test.d.ts +0 -5
  234. package/dist/__tests__/AudioEncoder.test.d.ts.map +0 -1
  235. package/dist/__tests__/AudioEncoder.test.js +0 -247
  236. package/dist/__tests__/AudioEncoder.test.js.map +0 -1
  237. package/dist/__tests__/EncodedChunks.test.d.ts +0 -5
  238. package/dist/__tests__/EncodedChunks.test.d.ts.map +0 -1
  239. package/dist/__tests__/EncodedChunks.test.js +0 -99
  240. package/dist/__tests__/EncodedChunks.test.js.map +0 -1
  241. package/dist/__tests__/HardwareAcceleration.test.d.ts +0 -5
  242. package/dist/__tests__/HardwareAcceleration.test.d.ts.map +0 -1
  243. package/dist/__tests__/HardwareAcceleration.test.js +0 -84
  244. package/dist/__tests__/HardwareAcceleration.test.js.map +0 -1
  245. package/dist/__tests__/ImageDecoder.test.d.ts +0 -5
  246. package/dist/__tests__/ImageDecoder.test.d.ts.map +0 -1
  247. package/dist/__tests__/ImageDecoder.test.js +0 -587
  248. package/dist/__tests__/ImageDecoder.test.js.map +0 -1
  249. package/dist/__tests__/ImageDecoder.wpt.test.d.ts +0 -8
  250. package/dist/__tests__/ImageDecoder.wpt.test.d.ts.map +0 -1
  251. package/dist/__tests__/ImageDecoder.wpt.test.js +0 -135
  252. package/dist/__tests__/ImageDecoder.wpt.test.js.map +0 -1
  253. package/dist/__tests__/MediaCapabilities.test.d.ts +0 -5
  254. package/dist/__tests__/MediaCapabilities.test.d.ts.map +0 -1
  255. package/dist/__tests__/MediaCapabilities.test.js +0 -346
  256. package/dist/__tests__/MediaCapabilities.test.js.map +0 -1
  257. package/dist/__tests__/NodeAvDecoder.test.d.ts +0 -2
  258. package/dist/__tests__/NodeAvDecoder.test.d.ts.map +0 -1
  259. package/dist/__tests__/NodeAvDecoder.test.js +0 -199
  260. package/dist/__tests__/NodeAvDecoder.test.js.map +0 -1
  261. package/dist/__tests__/NodeAvEncoder.test.d.ts +0 -2
  262. package/dist/__tests__/NodeAvEncoder.test.d.ts.map +0 -1
  263. package/dist/__tests__/NodeAvEncoder.test.js +0 -176
  264. package/dist/__tests__/NodeAvEncoder.test.js.map +0 -1
  265. package/dist/__tests__/VideoDecoder.test.d.ts +0 -5
  266. package/dist/__tests__/VideoDecoder.test.d.ts.map +0 -1
  267. package/dist/__tests__/VideoDecoder.test.js +0 -675
  268. package/dist/__tests__/VideoDecoder.test.js.map +0 -1
  269. package/dist/__tests__/VideoEncoder.test.d.ts +0 -5
  270. package/dist/__tests__/VideoEncoder.test.d.ts.map +0 -1
  271. package/dist/__tests__/VideoEncoder.test.js +0 -468
  272. package/dist/__tests__/VideoEncoder.test.js.map +0 -1
  273. package/dist/__tests__/VideoFrame.test.d.ts +0 -5
  274. package/dist/__tests__/VideoFrame.test.d.ts.map +0 -1
  275. package/dist/__tests__/VideoFrame.test.js +0 -243
  276. package/dist/__tests__/VideoFrame.test.js.map +0 -1
  277. package/dist/__tests__/aac-utils.test.d.ts +0 -2
  278. package/dist/__tests__/aac-utils.test.d.ts.map +0 -1
  279. package/dist/__tests__/aac-utils.test.js +0 -37
  280. package/dist/__tests__/aac-utils.test.js.map +0 -1
  281. package/dist/__tests__/avc-utils.test.d.ts +0 -2
  282. package/dist/__tests__/avc-utils.test.d.ts.map +0 -1
  283. package/dist/__tests__/avc-utils.test.js +0 -63
  284. package/dist/__tests__/avc-utils.test.js.map +0 -1
  285. package/dist/__tests__/hevc-utils.test.d.ts +0 -2
  286. package/dist/__tests__/hevc-utils.test.d.ts.map +0 -1
  287. package/dist/__tests__/hevc-utils.test.js +0 -78
  288. package/dist/__tests__/hevc-utils.test.js.map +0 -1
  289. package/dist/demos/demo-conversion.d.ts +0 -13
  290. package/dist/demos/demo-conversion.d.ts.map +0 -1
  291. package/dist/demos/demo-conversion.js +0 -301
  292. package/dist/demos/demo-conversion.js.map +0 -1
  293. package/dist/demos/demo-hwaccel-conversion.d.ts +0 -8
  294. package/dist/demos/demo-hwaccel-conversion.d.ts.map +0 -1
  295. package/dist/demos/demo-hwaccel-conversion.js +0 -161
  296. package/dist/demos/demo-hwaccel-conversion.js.map +0 -1
  297. package/dist/demos/demo-mediabunny.d.ts +0 -7
  298. package/dist/demos/demo-mediabunny.d.ts.map +0 -1
  299. package/dist/demos/demo-mediabunny.js +0 -78
  300. package/dist/demos/demo-mediabunny.js.map +0 -1
  301. package/dist/ffmpeg/FFmpegProcess.d.ts +0 -111
  302. package/dist/ffmpeg/FFmpegProcess.d.ts.map +0 -1
  303. package/dist/ffmpeg/FFmpegProcess.js +0 -543
  304. package/dist/ffmpeg/FFmpegProcess.js.map +0 -1
  305. package/dist/ffmpeg/audio-codecs.d.ts.map +0 -1
  306. package/dist/ffmpeg/audio-codecs.js.map +0 -1
  307. package/dist/ffmpeg/formats.d.ts.map +0 -1
  308. package/dist/ffmpeg/formats.js.map +0 -1
  309. package/dist/ffmpeg/index.d.ts.map +0 -1
  310. package/dist/ffmpeg/index.js.map +0 -1
  311. package/dist/ffmpeg/parsers/annexb.d.ts +0 -88
  312. package/dist/ffmpeg/parsers/annexb.d.ts.map +0 -1
  313. package/dist/ffmpeg/parsers/annexb.js +0 -201
  314. package/dist/ffmpeg/parsers/annexb.js.map +0 -1
  315. package/dist/ffmpeg/parsers/index.d.ts +0 -6
  316. package/dist/ffmpeg/parsers/index.d.ts.map +0 -1
  317. package/dist/ffmpeg/parsers/index.js +0 -8
  318. package/dist/ffmpeg/parsers/index.js.map +0 -1
  319. package/dist/ffmpeg/parsers/ivf.d.ts +0 -54
  320. package/dist/ffmpeg/parsers/ivf.d.ts.map +0 -1
  321. package/dist/ffmpeg/parsers/ivf.js +0 -109
  322. package/dist/ffmpeg/parsers/ivf.js.map +0 -1
  323. package/dist/ffmpeg/types.d.ts.map +0 -1
  324. package/dist/ffmpeg/types.js.map +0 -1
  325. package/dist/mediabunny/FFmpegAudioDecoder.d.ts +0 -23
  326. package/dist/mediabunny/FFmpegAudioDecoder.d.ts.map +0 -1
  327. package/dist/mediabunny/FFmpegAudioDecoder.js +0 -129
  328. package/dist/mediabunny/FFmpegAudioDecoder.js.map +0 -1
  329. package/dist/mediabunny/FFmpegAudioEncoder.d.ts +0 -43
  330. package/dist/mediabunny/FFmpegAudioEncoder.d.ts.map +0 -1
  331. package/dist/mediabunny/FFmpegAudioEncoder.js +0 -220
  332. package/dist/mediabunny/FFmpegAudioEncoder.js.map +0 -1
  333. package/dist/mediabunny/FFmpegVideoDecoder.d.ts +0 -24
  334. package/dist/mediabunny/FFmpegVideoDecoder.d.ts.map +0 -1
  335. package/dist/mediabunny/FFmpegVideoDecoder.js +0 -125
  336. package/dist/mediabunny/FFmpegVideoDecoder.js.map +0 -1
  337. package/dist/mediabunny/FFmpegVideoEncoder.d.ts +0 -48
  338. package/dist/mediabunny/FFmpegVideoEncoder.d.ts.map +0 -1
  339. package/dist/mediabunny/FFmpegVideoEncoder.js +0 -263
  340. package/dist/mediabunny/FFmpegVideoEncoder.js.map +0 -1
  341. package/dist/mediabunny/index.d.ts +0 -21
  342. package/dist/mediabunny/index.d.ts.map +0 -1
  343. package/dist/mediabunny/index.js +0 -33
  344. package/dist/mediabunny/index.js.map +0 -1
  345. package/dist/types.d.ts +0 -6
  346. package/dist/types.d.ts.map +0 -1
  347. package/dist/types.js +0 -6
  348. package/dist/types.js.map +0 -1
@@ -1,301 +0,0 @@
1
- /**
2
- * Demo: Real File Conversion with Mediabunny + WebCodecs
3
- *
4
- * This demo shows how to:
5
- * 1. Use WebCodecs API (VideoEncoder, AudioEncoder, etc.) with Mediabunny
6
- * 2. Convert MP4 to WebM with progress tracking
7
- * 3. Handle video resizing, codec conversion, and audio transcoding
8
- *
9
- * The WebCodecs polyfill makes VideoFrame, AudioData, EncodedVideoChunk, etc.
10
- * available globally, so Mediabunny uses our FFmpeg-backed implementations.
11
- */
12
- import * as fs from 'fs';
13
- import * as path from 'path';
14
- import { execSync } from 'child_process';
15
- import { ReadableStream, WritableStream, TransformStream } from 'stream/web';
16
- // Polyfill Web Streams for Node.js < 18.x or environments without them
17
- if (typeof globalThis.WritableStream === 'undefined') {
18
- globalThis.WritableStream = WritableStream;
19
- }
20
- if (typeof globalThis.ReadableStream === 'undefined') {
21
- globalThis.ReadableStream = ReadableStream;
22
- }
23
- if (typeof globalThis.TransformStream === 'undefined') {
24
- globalThis.TransformStream = TransformStream;
25
- }
26
- // Install WebCodecs polyfill - this provides VideoFrame, AudioData, EncodedVideoChunk, etc.
27
- // Mediabunny will use these global classes for encoding/decoding
28
- // The side-effect import ensures auto-install happens before any other imports
29
- import '../polyfill.js';
30
- // Mediabunny imports
31
- import { Input, Output, Conversion, FilePathSource, FilePathTarget, WebMOutputFormat, ALL_FORMATS, } from 'mediabunny';
32
- // Register our FFmpeg-based encoders/decoders
33
- import { registerFFmpegCoders } from '../mediabunny/index.js';
34
- // Register FFmpeg coders before using Mediabunny
35
- registerFFmpegCoders();
36
- const testDir = '/tmp/webcodecs-test-conversion';
37
- /**
38
- * Create a sample video file for testing
39
- */
40
- async function createSampleVideo() {
41
- // Create test directory
42
- if (!fs.existsSync(testDir)) {
43
- fs.mkdirSync(testDir, { recursive: true });
44
- }
45
- const inputPath = path.join(testDir, 'sample.mp4');
46
- console.log('Creating sample video...');
47
- // Create a 5-second test video with testsrc and sine wave audio
48
- // 640x480, 30fps, H.264 video + AAC audio at 48000Hz (Opus-compatible)
49
- execSync(`ffmpeg -y ` +
50
- `-f lavfi -i "testsrc=duration=5:size=640x480:rate=30" ` +
51
- `-f lavfi -i "sine=frequency=440:duration=5:sample_rate=48000" ` +
52
- `-c:v libx264 -preset ultrafast -c:a aac -b:a 128k ` +
53
- `-pix_fmt yuv420p ` +
54
- `"${inputPath}" 2>/dev/null`);
55
- const stats = fs.statSync(inputPath);
56
- console.log(` Created: ${inputPath}`);
57
- console.log(` Size: ${(stats.size / 1024).toFixed(1)} KB`);
58
- return inputPath;
59
- }
60
- /**
61
- * Get file info using ffprobe
62
- */
63
- function getFileInfo(filePath) {
64
- const output = execSync(`ffprobe -v quiet -print_format json -show_format -show_streams "${filePath}"`, { encoding: 'utf-8' });
65
- const info = JSON.parse(output);
66
- const videoStream = info.streams?.find((s) => s.codec_type === 'video');
67
- const audioStream = info.streams?.find((s) => s.codec_type === 'audio');
68
- return {
69
- duration: parseFloat(info.format?.duration || '0'),
70
- videoCodec: videoStream?.codec_name || 'unknown',
71
- audioCodec: audioStream?.codec_name || 'unknown',
72
- width: videoStream?.width || 0,
73
- height: videoStream?.height || 0,
74
- };
75
- }
76
- /**
77
- * Demo 1: Basic MP4 to WebM conversion
78
- */
79
- async function demo1_BasicConversion(inputPath) {
80
- console.log('\n=== Demo 1: Basic MP4 to WebM Conversion ===\n');
81
- const outputPath = path.join(testDir, 'output_basic.webm');
82
- // Create input from file
83
- const input = new Input({
84
- formats: ALL_FORMATS,
85
- source: new FilePathSource(inputPath),
86
- });
87
- // Create output with WebM format
88
- const output = new Output({
89
- format: new WebMOutputFormat(),
90
- target: new FilePathTarget(outputPath),
91
- });
92
- // Initialize conversion
93
- const conversion = await Conversion.init({
94
- input,
95
- output,
96
- showWarnings: false,
97
- });
98
- console.log('Conversion initialized:');
99
- console.log(` Is valid: ${conversion.isValid}`);
100
- console.log(` Utilized tracks: ${conversion.utilizedTracks.length}`);
101
- console.log(` Discarded tracks: ${conversion.discardedTracks.length}`);
102
- if (conversion.discardedTracks.length > 0) {
103
- for (const { track, reason } of conversion.discardedTracks) {
104
- console.log(` - ${track.type}: ${reason}`);
105
- }
106
- }
107
- // Add progress tracking
108
- let lastProgress = 0;
109
- conversion.onProgress = (progress) => {
110
- const percent = Math.floor(progress * 100);
111
- if (percent > lastProgress) {
112
- process.stdout.write(`\r Converting: ${percent}%`);
113
- lastProgress = percent;
114
- }
115
- };
116
- // Execute conversion
117
- console.log(' Converting: 0%');
118
- await conversion.execute();
119
- console.log('\n Done!');
120
- // Verify output
121
- const inputInfo = getFileInfo(inputPath);
122
- const outputInfo = getFileInfo(outputPath);
123
- console.log('\n Input file:');
124
- console.log(` Codec: ${inputInfo.videoCodec}/${inputInfo.audioCodec}`);
125
- console.log(` Size: ${inputInfo.width}x${inputInfo.height}`);
126
- console.log(` Duration: ${inputInfo.duration.toFixed(2)}s`);
127
- console.log('\n Output file:');
128
- console.log(` Codec: ${outputInfo.videoCodec}/${outputInfo.audioCodec}`);
129
- console.log(` Size: ${outputInfo.width}x${outputInfo.height}`);
130
- console.log(` Duration: ${outputInfo.duration.toFixed(2)}s`);
131
- const outputStats = fs.statSync(outputPath);
132
- console.log(` File size: ${(outputStats.size / 1024).toFixed(1)} KB`);
133
- // Clean up
134
- input.dispose();
135
- }
136
- /**
137
- * Demo 2: Conversion with resizing (using OffscreenCanvas polyfill)
138
- */
139
- async function demo2_ResizedConversion(inputPath) {
140
- console.log('\n=== Demo 2: Conversion with Resizing (640x480 -> 320x240) ===\n');
141
- const outputPath = path.join(testDir, 'output_resized.webm');
142
- const input = new Input({
143
- formats: ALL_FORMATS,
144
- source: new FilePathSource(inputPath),
145
- });
146
- const output = new Output({
147
- format: new WebMOutputFormat(),
148
- target: new FilePathTarget(outputPath),
149
- });
150
- const conversion = await Conversion.init({
151
- input,
152
- output,
153
- video: {
154
- width: 320,
155
- height: 240,
156
- fit: 'fill',
157
- },
158
- showWarnings: false,
159
- });
160
- console.log(` Is valid: ${conversion.isValid}`);
161
- console.log(` Utilized tracks: ${conversion.utilizedTracks.length}`);
162
- // Progress tracking
163
- let lastProgress = 0;
164
- conversion.onProgress = (progress) => {
165
- const percent = Math.floor(progress * 100);
166
- if (percent > lastProgress) {
167
- process.stdout.write(`\r Converting: ${percent}%`);
168
- lastProgress = percent;
169
- }
170
- };
171
- console.log(' Converting: 0%');
172
- await conversion.execute();
173
- console.log('\n Done!');
174
- // Verify output
175
- const outputInfo = getFileInfo(outputPath);
176
- console.log(`\n Output size: ${outputInfo.width}x${outputInfo.height}`);
177
- console.log(` Duration: ${outputInfo.duration.toFixed(2)}s`);
178
- const outputStats = fs.statSync(outputPath);
179
- console.log(` File size: ${(outputStats.size / 1024).toFixed(1)} KB`);
180
- input.dispose();
181
- }
182
- /**
183
- * Demo 3: Conversion with trimming
184
- */
185
- async function demo3_TrimmedConversion(inputPath) {
186
- console.log('\n=== Demo 3: Conversion with Trimming (1s to 3s) ===\n');
187
- const outputPath = path.join(testDir, 'output_trimmed.webm');
188
- const input = new Input({
189
- formats: ALL_FORMATS,
190
- source: new FilePathSource(inputPath),
191
- });
192
- const output = new Output({
193
- format: new WebMOutputFormat(),
194
- target: new FilePathTarget(outputPath),
195
- });
196
- const conversion = await Conversion.init({
197
- input,
198
- output,
199
- trim: {
200
- start: 1, // Start at 1 second
201
- end: 3, // End at 3 seconds
202
- },
203
- showWarnings: false,
204
- });
205
- console.log(` Is valid: ${conversion.isValid}`);
206
- // Progress tracking
207
- let lastProgress = 0;
208
- conversion.onProgress = (progress) => {
209
- const percent = Math.floor(progress * 100);
210
- if (percent > lastProgress) {
211
- process.stdout.write(`\r Converting: ${percent}%`);
212
- lastProgress = percent;
213
- }
214
- };
215
- console.log(' Converting: 0%');
216
- await conversion.execute();
217
- console.log('\n Done!');
218
- // Verify output
219
- const outputInfo = getFileInfo(outputPath);
220
- console.log(`\n Output duration: ${outputInfo.duration.toFixed(2)}s (expected ~2s)`);
221
- const outputStats = fs.statSync(outputPath);
222
- console.log(` File size: ${(outputStats.size / 1024).toFixed(1)} KB`);
223
- input.dispose();
224
- }
225
- /**
226
- * Demo 4: Audio-only extraction
227
- */
228
- async function demo4_AudioOnlyConversion(inputPath) {
229
- console.log('\n=== Demo 4: Audio-Only Extraction ===\n');
230
- const outputPath = path.join(testDir, 'output_audio.webm');
231
- const input = new Input({
232
- formats: ALL_FORMATS,
233
- source: new FilePathSource(inputPath),
234
- });
235
- const output = new Output({
236
- format: new WebMOutputFormat(),
237
- target: new FilePathTarget(outputPath),
238
- });
239
- const conversion = await Conversion.init({
240
- input,
241
- output,
242
- video: {
243
- discard: true, // Discard video track
244
- },
245
- showWarnings: false,
246
- });
247
- console.log(` Is valid: ${conversion.isValid}`);
248
- console.log(` Utilized tracks: ${conversion.utilizedTracks.length}`);
249
- // Progress tracking
250
- let lastProgress = 0;
251
- conversion.onProgress = (progress) => {
252
- const percent = Math.floor(progress * 100);
253
- if (percent > lastProgress) {
254
- process.stdout.write(`\r Converting: ${percent}%`);
255
- lastProgress = percent;
256
- }
257
- };
258
- console.log(' Converting: 0%');
259
- await conversion.execute();
260
- console.log('\n Done!');
261
- // Verify output
262
- const outputInfo = getFileInfo(outputPath);
263
- console.log(`\n Audio codec: ${outputInfo.audioCodec}`);
264
- console.log(` Duration: ${outputInfo.duration.toFixed(2)}s`);
265
- const outputStats = fs.statSync(outputPath);
266
- console.log(` File size: ${(outputStats.size / 1024).toFixed(1)} KB`);
267
- input.dispose();
268
- }
269
- /**
270
- * Main entry point
271
- */
272
- async function main() {
273
- console.log('╔═══════════════════════════════════════════════════════════════╗');
274
- console.log('║ Mediabunny + FFmpeg Real File Conversion Demo ║');
275
- console.log('╚═══════════════════════════════════════════════════════════════╝\n');
276
- console.log('This demo uses the WebCodecs FFmpeg backend with Mediabunny');
277
- console.log('to perform real file conversions.\n');
278
- try {
279
- // Create sample video
280
- const inputPath = await createSampleVideo();
281
- // Run demos
282
- await demo1_BasicConversion(inputPath);
283
- await demo2_ResizedConversion(inputPath);
284
- await demo3_TrimmedConversion(inputPath);
285
- await demo4_AudioOnlyConversion(inputPath);
286
- console.log('\n╔═══════════════════════════════════════════════════════════════╗');
287
- console.log('║ All demos completed! ║');
288
- console.log('╚═══════════════════════════════════════════════════════════════╝\n');
289
- console.log('Output files:');
290
- console.log(` ${testDir}/output_basic.webm`);
291
- console.log(` ${testDir}/output_resized.webm`);
292
- console.log(` ${testDir}/output_trimmed.webm`);
293
- console.log(` ${testDir}/output_audio.webm`);
294
- }
295
- catch (error) {
296
- console.error('\nError:', error);
297
- process.exit(1);
298
- }
299
- }
300
- main().catch(console.error);
301
- //# sourceMappingURL=demo-conversion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"demo-conversion.js","sourceRoot":"","sources":["../../src/demos/demo-conversion.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Hardware Acceleration Conversion Demo
3
- *
4
- * Tests video conversion with VAAPI hardware acceleration enabled.
5
- * Uses H.264 codec which is well-supported by Intel VAAPI.
6
- */
7
- import '../polyfill.js';
8
- //# sourceMappingURL=demo-hwaccel-conversion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"demo-hwaccel-conversion.d.ts","sourceRoot":"","sources":["../../src/demos/demo-hwaccel-conversion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmBH,OAAO,gBAAgB,CAAC"}
@@ -1,161 +0,0 @@
1
- /**
2
- * Hardware Acceleration Conversion Demo
3
- *
4
- * Tests video conversion with VAAPI hardware acceleration enabled.
5
- * Uses H.264 codec which is well-supported by Intel VAAPI.
6
- */
7
- import * as fs from 'fs';
8
- import * as path from 'path';
9
- import { execSync } from 'child_process';
10
- import { ReadableStream, WritableStream, TransformStream } from 'stream/web';
11
- // Polyfill Web Streams
12
- if (typeof globalThis.WritableStream === 'undefined') {
13
- globalThis.WritableStream = WritableStream;
14
- }
15
- if (typeof globalThis.ReadableStream === 'undefined') {
16
- globalThis.ReadableStream = ReadableStream;
17
- }
18
- if (typeof globalThis.TransformStream === 'undefined') {
19
- globalThis.TransformStream = TransformStream;
20
- }
21
- // Install WebCodecs polyfill
22
- import '../polyfill.js';
23
- import { Input, Output, Conversion, FilePathSource, FilePathTarget, Mp4OutputFormat, ALL_FORMATS, registerEncoder, registerDecoder, } from 'mediabunny';
24
- import { FFmpegVideoEncoder } from '../mediabunny/FFmpegVideoEncoder.js';
25
- import { FFmpegVideoDecoder } from '../mediabunny/FFmpegVideoDecoder.js';
26
- import { FFmpegAudioEncoder } from '../mediabunny/FFmpegAudioEncoder.js';
27
- import { FFmpegAudioDecoder } from '../mediabunny/FFmpegAudioDecoder.js';
28
- import { getHardwareAccelerationSummary, getBestEncoder, testEncoder } from '../HardwareAcceleration.js';
29
- const OUTPUT_DIR = '/tmp/webcodecs-test-hwaccel';
30
- // Custom encoder that forces hardware acceleration
31
- class HardwareVideoEncoder extends FFmpegVideoEncoder {
32
- async init() {
33
- this.config.hardwareAcceleration = 'prefer-hardware';
34
- return super.init();
35
- }
36
- }
37
- // Custom encoder that forces software
38
- class SoftwareVideoEncoder extends FFmpegVideoEncoder {
39
- async init() {
40
- this.config.hardwareAcceleration = 'prefer-software';
41
- return super.init();
42
- }
43
- }
44
- async function createSampleVideo() {
45
- const outputPath = path.join(OUTPUT_DIR, 'sample.mp4');
46
- if (!fs.existsSync(OUTPUT_DIR)) {
47
- fs.mkdirSync(OUTPUT_DIR, { recursive: true });
48
- }
49
- // Create a 5-second test video with FFmpeg (longer for better timing comparison)
50
- execSync(`ffmpeg -y -f lavfi -i "testsrc=duration=5:size=1280x720:rate=30" -f lavfi -i "sine=frequency=440:duration=5" -c:v libx264 -preset ultrafast -c:a aac -pix_fmt yuv420p "${outputPath}" 2>/dev/null`);
51
- return outputPath;
52
- }
53
- function getFileInfo(filePath) {
54
- const probe = execSync(`ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "${filePath}" 2>/dev/null`).toString().trim();
55
- const size = fs.statSync(filePath).size;
56
- return {
57
- duration: parseFloat(probe),
58
- size,
59
- };
60
- }
61
- async function main() {
62
- console.log('╔═══════════════════════════════════════════════════════════════╗');
63
- console.log('║ Hardware vs Software Encoding Comparison Demo ║');
64
- console.log('╚═══════════════════════════════════════════════════════════════╝\n');
65
- // Show hardware acceleration info
66
- const summary = await getHardwareAccelerationSummary();
67
- console.log(summary);
68
- console.log('');
69
- // Check what encoders will be used and test them
70
- console.log('Testing encoder availability:');
71
- for (const codec of ['h264', 'hevc', 'vp8', 'vp9']) {
72
- const best = await getBestEncoder(codec, 'prefer-hardware');
73
- const works = best.isHardware ? await testEncoder(best.encoder) : true;
74
- const status = best.isHardware ? (works ? '✓ HW' : '✗ HW (failed)') : '○ SW';
75
- console.log(` ${codec.toUpperCase()}: ${status} ${best.encoder}`);
76
- }
77
- console.log('');
78
- // Create sample video (1280x720, 5 seconds)
79
- console.log('Creating sample video (1280x720, 5 seconds)...');
80
- const inputPath = await createSampleVideo();
81
- const inputInfo = getFileInfo(inputPath);
82
- console.log(` Input: ${inputPath} (${(inputInfo.size / 1024).toFixed(1)} KB)\n`);
83
- // Register audio encoders/decoders (these don't have HW acceleration)
84
- registerEncoder(FFmpegAudioEncoder);
85
- registerDecoder(FFmpegAudioDecoder);
86
- registerDecoder(FFmpegVideoDecoder);
87
- // Test with hardware acceleration (H.264 VAAPI)
88
- console.log('=== Converting with Hardware Acceleration (H.264 VAAPI) ===\n');
89
- registerEncoder(HardwareVideoEncoder);
90
- try {
91
- const hwOutput = path.join(OUTPUT_DIR, 'output_hardware.mp4');
92
- const startTime = Date.now();
93
- const input = new Input({
94
- formats: ALL_FORMATS,
95
- source: new FilePathSource(inputPath),
96
- });
97
- // MP4 with H.264 - well supported by VAAPI
98
- const output = new Output({
99
- format: new Mp4OutputFormat(),
100
- target: new FilePathTarget(hwOutput),
101
- });
102
- const conversion = await Conversion.init({
103
- input,
104
- output,
105
- showWarnings: false,
106
- });
107
- await conversion.execute();
108
- const endTime = Date.now();
109
- const info = getFileInfo(hwOutput);
110
- console.log(` Output: ${hwOutput}`);
111
- console.log(` Duration: ${info.duration.toFixed(2)}s`);
112
- console.log(` File size: ${(info.size / 1024).toFixed(1)} KB`);
113
- console.log(` Encoding time: ${endTime - startTime}ms`);
114
- }
115
- catch (err) {
116
- console.log(` Error: ${err.message}`);
117
- }
118
- console.log('');
119
- // Test with software encoding (H.264 libx264)
120
- console.log('=== Converting with Software Encoding (H.264 libx264) ===\n');
121
- registerEncoder(SoftwareVideoEncoder);
122
- try {
123
- const swOutput = path.join(OUTPUT_DIR, 'output_software.mp4');
124
- const startTime = Date.now();
125
- const input = new Input({
126
- formats: ALL_FORMATS,
127
- source: new FilePathSource(inputPath),
128
- });
129
- const output = new Output({
130
- format: new Mp4OutputFormat(),
131
- target: new FilePathTarget(swOutput),
132
- });
133
- const conversion = await Conversion.init({
134
- input,
135
- output,
136
- showWarnings: false,
137
- });
138
- await conversion.execute();
139
- const endTime = Date.now();
140
- const info = getFileInfo(swOutput);
141
- console.log(` Output: ${swOutput}`);
142
- console.log(` Duration: ${info.duration.toFixed(2)}s`);
143
- console.log(` File size: ${(info.size / 1024).toFixed(1)} KB`);
144
- console.log(` Encoding time: ${endTime - startTime}ms`);
145
- }
146
- catch (err) {
147
- console.log(` Error: ${err.message}`);
148
- }
149
- console.log('\n╔═══════════════════════════════════════════════════════════════╗');
150
- console.log('║ Demo Complete! ║');
151
- console.log('╚═══════════════════════════════════════════════════════════════╝\n');
152
- // Summary
153
- console.log('Note: Intel VAAPI typically supports:');
154
- console.log(' - H.264 encoding ✓');
155
- console.log(' - HEVC encoding ✓');
156
- console.log(' - VP8 encoding ✓');
157
- console.log(' - VP9 decoding only (no encoding)');
158
- console.log('');
159
- }
160
- main().catch(console.error);
161
- //# sourceMappingURL=demo-hwaccel-conversion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"demo-hwaccel-conversion.js","sourceRoot":"","sources":["../../src/demos/demo-hwaccel-conversion.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Demo: Mediabunny + FFmpeg Backend
3
- *
4
- * Shows how to use Mediabunny with FFmpeg for video encoding/decoding in Node.js.
5
- */
6
- export {};
7
- //# sourceMappingURL=demo-mediabunny.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"demo-mediabunny.d.ts","sourceRoot":"","sources":["../../src/demos/demo-mediabunny.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1,78 +0,0 @@
1
- /**
2
- * Demo: Mediabunny + FFmpeg Backend
3
- *
4
- * Shows how to use Mediabunny with FFmpeg for video encoding/decoding in Node.js.
5
- */
6
- import { registerFFmpegCoders } from '../mediabunny/index.js';
7
- // Register FFmpeg coders before using Mediabunny
8
- registerFFmpegCoders();
9
- // Mediabunny is now ready to use with FFmpeg backend
10
- async function main() {
11
- console.log('Mediabunny + FFmpeg Demo');
12
- console.log('========================\n');
13
- // Test basic functionality
14
- console.log('FFmpeg coders registered successfully!');
15
- console.log('');
16
- console.log('Mediabunny will now use FFmpeg for:');
17
- console.log('');
18
- console.log(' Video codecs:');
19
- console.log(' - AVC (H.264) encoding/decoding');
20
- console.log(' - HEVC (H.265) encoding/decoding');
21
- console.log(' - VP8 encoding/decoding');
22
- console.log(' - VP9 encoding/decoding');
23
- console.log(' - AV1 encoding/decoding');
24
- console.log('');
25
- console.log(' Audio codecs:');
26
- console.log(' - AAC encoding/decoding');
27
- console.log(' - Opus encoding/decoding');
28
- console.log(' - MP3 encoding/decoding');
29
- console.log(' - FLAC encoding/decoding');
30
- console.log(' - Vorbis encoding/decoding');
31
- console.log(' - PCM (all variants) encoding/decoding');
32
- console.log('');
33
- // Example: Create a simple video conversion workflow
34
- // This demonstrates the architecture - actual file I/O would use Mediabunny's
35
- // demuxers and muxers
36
- console.log('Architecture:');
37
- console.log('');
38
- console.log(' ┌─────────────────────────────────────────────────────┐');
39
- console.log(' │ Mediabunny │');
40
- console.log(' │ ┌─────────────┐ ┌─────────────┐ │');
41
- console.log(' │ │ Demuxer │ │ Muxer │ │');
42
- console.log(' │ │ (MP4/WebM) │ │ (MP4/WebM) │ │');
43
- console.log(' │ └──────┬──────┘ └──────▲──────┘ │');
44
- console.log(' │ │ │ │');
45
- console.log(' │ ▼ │ │');
46
- console.log(' │ ┌─────────────┐ ┌─────────────┐ │');
47
- console.log(' │ │ FFmpeg │ │ FFmpeg │ │');
48
- console.log(' │ │ Decoder │─────────────▶│ Encoder │ │');
49
- console.log(' │ │ (child) │ VideoSample │ (child) │ │');
50
- console.log(' │ └─────────────┘ └─────────────┘ │');
51
- console.log(' └─────────────────────────────────────────────────────┘');
52
- console.log('');
53
- // Note: Full conversion example would require actual video files
54
- // Here's how it would look:
55
- console.log('Example usage:');
56
- console.log('');
57
- console.log(`
58
- import { registerFFmpegCoders } from 'webcodecs-node/mediabunny';
59
- import { MP4, WebM, convert } from 'mediabunny';
60
-
61
- // Register FFmpeg backend
62
- registerFFmpegCoders();
63
-
64
- // Convert MP4 to WebM
65
- const source = MP4.source(inputFile);
66
- const target = WebM.target(outputStream);
67
-
68
- await convert({
69
- source,
70
- target,
71
- video: { codec: 'vp9', bitrate: 2_000_000 },
72
- audio: { codec: 'opus', bitrate: 128_000 },
73
- });
74
- `);
75
- console.log('\nDemo complete!');
76
- }
77
- main().catch(console.error);
78
- //# sourceMappingURL=demo-mediabunny.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"demo-mediabunny.js","sourceRoot":"","sources":["../../src/demos/demo-mediabunny.ts"],"names":[],"mappings":"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"}