node-av 1.3.0 → 2.0.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.
Files changed (45) hide show
  1. package/README.md +37 -38
  2. package/dist/api/bitstream-filter.d.ts +2 -2
  3. package/dist/api/bitstream-filter.js +2 -2
  4. package/dist/api/decoder.d.ts +131 -120
  5. package/dist/api/decoder.js +191 -203
  6. package/dist/api/decoder.js.map +1 -1
  7. package/dist/api/encoder.d.ts +135 -77
  8. package/dist/api/encoder.js +235 -192
  9. package/dist/api/encoder.js.map +1 -1
  10. package/dist/api/filter-presets.d.ts +408 -1534
  11. package/dist/api/filter-presets.js +1005 -2058
  12. package/dist/api/filter-presets.js.map +1 -1
  13. package/dist/api/filter.d.ts +160 -165
  14. package/dist/api/filter.js +294 -374
  15. package/dist/api/filter.js.map +1 -1
  16. package/dist/api/hardware.d.ts +8 -31
  17. package/dist/api/hardware.js +19 -70
  18. package/dist/api/hardware.js.map +1 -1
  19. package/dist/api/index.d.ts +1 -1
  20. package/dist/api/index.js +1 -1
  21. package/dist/api/index.js.map +1 -1
  22. package/dist/api/media-input.d.ts +1 -1
  23. package/dist/api/media-input.js +3 -8
  24. package/dist/api/media-input.js.map +1 -1
  25. package/dist/api/media-output.d.ts +35 -128
  26. package/dist/api/media-output.js +136 -208
  27. package/dist/api/media-output.js.map +1 -1
  28. package/dist/api/pipeline.d.ts +17 -17
  29. package/dist/api/pipeline.js +19 -42
  30. package/dist/api/pipeline.js.map +1 -1
  31. package/dist/api/types.d.ts +17 -57
  32. package/dist/lib/dictionary.d.ts +2 -2
  33. package/dist/lib/dictionary.js +2 -2
  34. package/dist/lib/dictionary.js.map +1 -1
  35. package/dist/lib/filter-context.d.ts +19 -2
  36. package/dist/lib/filter-context.js +15 -0
  37. package/dist/lib/filter-context.js.map +1 -1
  38. package/dist/lib/format-context.d.ts +18 -18
  39. package/dist/lib/format-context.js +20 -20
  40. package/dist/lib/format-context.js.map +1 -1
  41. package/dist/lib/frame.d.ts +43 -1
  42. package/dist/lib/frame.js +53 -0
  43. package/dist/lib/frame.js.map +1 -1
  44. package/package.json +17 -17
  45. package/release_notes.md +0 -29
@@ -7,6 +7,8 @@ import { Encoder } from './encoder.js';
7
7
  * High-level media output for writing and muxing media files.
8
8
  *
9
9
  * Provides simplified access to media muxing and file writing operations.
10
+ * Automatically manages header and trailer writing - header is written on first packet,
11
+ * trailer is written on close. Supports lazy initialization for both encoders and streams.
10
12
  * Handles stream configuration, packet writing, and format management.
11
13
  * Supports files, URLs, and custom I/O with automatic cleanup.
12
14
  * Essential component for media encoding pipelines and transcoding.
@@ -22,14 +24,11 @@ import { Encoder } from './encoder.js';
22
24
  * const videoIdx = output.addStream(videoEncoder);
23
25
  * const audioIdx = output.addStream(audioEncoder);
24
26
  *
25
- * // Write header
26
- * await output.writeHeader();
27
- *
28
- * // Write packets
27
+ * // Write packets - header written automatically on first packet
29
28
  * await output.writePacket(packet, videoIdx);
30
29
  *
31
- * // Write trailer and close
32
- * await output.writeTrailer();
30
+ * // Close - trailer written automatically
31
+ * // (automatic with await using)
33
32
  * ```
34
33
  *
35
34
  * @example
@@ -40,8 +39,8 @@ import { Encoder } from './encoder.js';
40
39
  *
41
40
  * // Copy stream configuration
42
41
  * const videoIdx = output.addStream(input.video());
43
- * await output.writeHeader();
44
42
  *
43
+ * // Process packets - header/trailer handled automatically
45
44
  * for await (const packet of input.packets()) {
46
45
  * await output.writePacket(packet, videoIdx);
47
46
  * packet.free();
@@ -58,7 +57,8 @@ export class MediaOutput {
58
57
  ioContext;
59
58
  headerWritten = false;
60
59
  trailerWritten = false;
61
- closed = false;
60
+ isClosed = false;
61
+ headerWritePromise;
62
62
  /**
63
63
  * @internal
64
64
  */
@@ -197,21 +197,25 @@ export class MediaOutput {
197
197
  * Add a stream to the output.
198
198
  *
199
199
  * Configures output stream from encoder or input stream.
200
- * Must be called before writeHeader().
200
+ * Must be called before writing any packets.
201
201
  * Returns stream index for packet writing.
202
202
  *
203
- * Direct mapping to avformat_new_stream() and avcodec_parameters_copy().
203
+ * Streams are initialized lazily - codec parameters are configured
204
+ * automatically when the first packet is written. This allows encoders
205
+ * to be initialized from frame properties.
206
+ *
207
+ * Direct mapping to avformat_new_stream().
204
208
  *
205
209
  * @param source - Encoder or stream to add
206
210
  * @param options - Stream configuration options
207
211
  * @param options.timeBase - Optional custom timebase for the stream
208
212
  * @returns Stream index for packet writing
209
213
  *
210
- * @throws {Error} If called after header written or output closed
214
+ * @throws {Error} If called after packets have been written or output closed
211
215
  *
212
216
  * @example
213
217
  * ```typescript
214
- * // Add stream from encoder
218
+ * // Add stream from encoder (lazy initialization)
215
219
  * const videoIdx = output.addStream(videoEncoder);
216
220
  * const audioIdx = output.addStream(audioEncoder);
217
221
  * ```
@@ -228,68 +232,72 @@ export class MediaOutput {
228
232
  * @see {@link Encoder} For transcoding source
229
233
  */
230
234
  addStream(source, options) {
231
- if (this.closed) {
235
+ if (this.isClosed) {
232
236
  throw new Error('MediaOutput is closed');
233
237
  }
234
238
  if (this.headerWritten) {
235
- throw new Error('Cannot add streams after header is written');
239
+ throw new Error('Cannot add streams after packets have been written');
236
240
  }
237
241
  const stream = this.formatContext.newStream(null);
238
242
  if (!stream) {
239
243
  throw new Error('Failed to create new stream');
240
244
  }
241
- let isStreamCopy = false;
242
- let sourceTimeBase;
243
- if (source instanceof Encoder) {
244
- // Transcoding with encoder
245
- const codecContext = source.getCodecContext();
246
- if (!codecContext) {
247
- throw new Error('Failed to get codec context from encoder');
248
- }
249
- const ret = stream.codecpar.fromContext(codecContext);
250
- FFmpegError.throwIfError(ret, 'Failed to copy codec parameters from encoder');
251
- // Store the encoder's timebase as source (we'll need it for rescaling)
252
- sourceTimeBase = codecContext.timeBase;
253
- // Output stream uses encoder's timebase (or custom if specified)
254
- stream.timeBase = options?.timeBase ? new Rational(options.timeBase.num, options.timeBase.den) : codecContext.timeBase;
245
+ const isStreamCopy = !(source instanceof Encoder);
246
+ // For stream copy, initialize immediately since we have all the info
247
+ if (isStreamCopy) {
248
+ const inputStream = source;
249
+ const ret = inputStream.codecpar.copy(stream.codecpar);
250
+ FFmpegError.throwIfError(ret, 'Failed to copy codec parameters');
251
+ // Set the timebases
252
+ const sourceTimeBase = inputStream.timeBase;
253
+ stream.timeBase = options?.timeBase ? new Rational(options.timeBase.num, options.timeBase.den) : inputStream.timeBase;
254
+ this.streams.set(stream.index, {
255
+ initialized: true,
256
+ stream,
257
+ source,
258
+ timeBase: options?.timeBase,
259
+ sourceTimeBase,
260
+ isStreamCopy: true,
261
+ bufferedPackets: [],
262
+ });
255
263
  }
256
264
  else {
257
- // Stream copy
258
- const ret = source.codecpar.copy(stream.codecpar);
259
- FFmpegError.throwIfError(ret, 'Failed to copy codec parameters');
260
- // Store the input stream's timebase as source (we'll need it for rescaling)
261
- sourceTimeBase = source.timeBase;
262
- // Output stream uses input stream's timebase (or custom if specified)
263
- stream.timeBase = options?.timeBase ? new Rational(options.timeBase.num, options.timeBase.den) : source.timeBase;
264
- stream.codecpar.codecTag = 0; // Important for format compatibility
265
- isStreamCopy = true;
265
+ this.streams.set(stream.index, {
266
+ initialized: false,
267
+ stream,
268
+ source,
269
+ timeBase: options?.timeBase,
270
+ sourceTimeBase: undefined, // Will be set on initialization
271
+ isStreamCopy: false,
272
+ bufferedPackets: [],
273
+ });
266
274
  }
267
- this.streams.set(stream.index, {
268
- stream,
269
- timeBase: stream.timeBase,
270
- isStreamCopy,
271
- sourceTimeBase,
272
- });
273
275
  return stream.index;
274
276
  }
275
277
  /**
276
278
  * Write a packet to the output.
277
279
  *
278
280
  * Writes muxed packet to the specified stream.
279
- * Automatically handles timestamp rescaling.
280
- * Must be called after writeHeader() and before writeTrailer().
281
+ * Automatically handles:
282
+ * - Stream initialization on first packet (lazy initialization)
283
+ * - Codec parameter configuration from encoder or input stream
284
+ * - Header writing on first packet
285
+ * - Timestamp rescaling between source and output timebases
286
+ *
287
+ * For encoder sources, the encoder must have processed at least one frame
288
+ * before packets can be written (encoder must be initialized).
281
289
  *
282
- * Direct mapping to av_interleaved_write_frame().
290
+ * Direct mapping to avformat_write_header() (on first packet) and av_interleaved_write_frame().
283
291
  *
284
292
  * @param packet - Packet to write
285
293
  * @param streamIndex - Target stream index
286
- * @throws {Error} If stream invalid or called at wrong time
294
+ * @throws {Error} If stream invalid or encoder not initialized
287
295
  *
288
296
  * @throws {FFmpegError} If write fails
289
297
  *
290
298
  * @example
291
299
  * ```typescript
292
- * // Write encoded packet
300
+ * // Write encoded packet - header written automatically on first packet
293
301
  * const packet = await encoder.encode(frame);
294
302
  * if (packet) {
295
303
  * await output.writePacket(packet, videoIdx);
@@ -309,119 +317,93 @@ export class MediaOutput {
309
317
  * ```
310
318
  *
311
319
  * @see {@link addStream} For adding streams
312
- * @see {@link writeHeader} Must be called first
313
320
  */
314
321
  async writePacket(packet, streamIndex) {
315
- if (this.closed) {
322
+ if (this.isClosed) {
316
323
  throw new Error('MediaOutput is closed');
317
324
  }
318
- if (!this.headerWritten) {
319
- throw new Error('Header must be written before packets');
320
- }
321
325
  if (this.trailerWritten) {
322
- throw new Error('Cannot write packets after trailer');
326
+ throw new Error('Cannot write packets after output is finalized');
323
327
  }
324
- const streamInfo = this.streams.get(streamIndex);
325
- if (!streamInfo) {
328
+ if (!this.streams.get(streamIndex)) {
326
329
  throw new Error(`Invalid stream index: ${streamIndex}`);
327
330
  }
328
- // Set stream index
329
- packet.streamIndex = streamIndex;
330
- // Rescale packet timestamps if source and output timebases differ
331
- // Note: The stream's timebase may have been changed by writeHeader (e.g., MP4 uses 1/time_scale)
332
- if (streamInfo.sourceTimeBase) {
333
- const outputStream = this.formatContext.streams?.[streamIndex];
334
- if (outputStream) {
335
- // Only rescale if timebases actually differ
336
- const srcTb = streamInfo.sourceTimeBase;
337
- const dstTb = outputStream.timeBase;
338
- if (srcTb.num !== dstTb.num || srcTb.den !== dstTb.den) {
339
- packet.rescaleTs(streamInfo.sourceTimeBase, outputStream.timeBase);
331
+ // Initialize any encoder streams that are ready
332
+ for (const streamInfo of this.streams.values()) {
333
+ if (!streamInfo.initialized && streamInfo.source instanceof Encoder) {
334
+ const encoder = streamInfo.source;
335
+ const codecContext = encoder.getCodecContext();
336
+ // Skip if encoder not ready yet
337
+ if (!encoder.isEncoderInitialized || !codecContext) {
338
+ continue;
340
339
  }
340
+ // This encoder is ready, initialize it now
341
+ const ret = streamInfo.stream.codecpar.fromContext(codecContext);
342
+ FFmpegError.throwIfError(ret, 'Failed to copy codec parameters from encoder');
343
+ // Update the timebase from the encoder
344
+ streamInfo.sourceTimeBase = codecContext.timeBase;
345
+ // Output stream uses encoder's timebase (or custom if specified)
346
+ streamInfo.stream.timeBase = streamInfo.timeBase ? new Rational(streamInfo.timeBase.num, streamInfo.timeBase.den) : codecContext.timeBase;
347
+ // Mark as initialized
348
+ streamInfo.initialized = true;
341
349
  }
342
350
  }
343
- // Write the packet
344
- const ret = await this.formatContext.interleavedWriteFrame(packet);
345
- FFmpegError.throwIfError(ret, 'Failed to write packet');
346
- }
347
- /**
348
- * Write file header.
349
- *
350
- * Writes format header with stream configuration.
351
- * Must be called after adding all streams and before writing packets.
352
- * Finalizes stream parameters and initializes muxer.
353
- *
354
- * Direct mapping to avformat_write_header().
355
- *
356
- * @throws {Error} If already written or output closed
357
- *
358
- * @throws {FFmpegError} If write fails
359
- *
360
- * @example
361
- * ```typescript
362
- * // Standard workflow
363
- * const output = await MediaOutput.open('output.mp4');
364
- * output.addStream(encoder);
365
- * await output.writeHeader();
366
- * // Now ready to write packets
367
- * ```
368
- *
369
- * @see {@link addStream} Must add streams first
370
- * @see {@link writePacket} Can write packets after
371
- * @see {@link writeTrailer} Must call at end
372
- */
373
- async writeHeader() {
374
- if (this.closed) {
375
- throw new Error('MediaOutput is closed');
376
- }
377
- if (this.headerWritten) {
378
- throw new Error('Header already written');
379
- }
380
- const ret = await this.formatContext.writeHeader();
381
- FFmpegError.throwIfError(ret, 'Failed to write header');
382
- this.headerWritten = true;
383
- }
384
- /**
385
- * Write file trailer.
386
- *
387
- * Writes format trailer and finalizes the file.
388
- * Must be called after all packets are written.
389
- * Flushes any buffered data and updates file headers.
390
- *
391
- * Direct mapping to av_write_trailer().
392
- *
393
- * @throws {Error} If header not written or already written
394
- *
395
- * @throws {FFmpegError} If write fails
396
- *
397
- * @example
398
- * ```typescript
399
- * // Finalize output
400
- * await output.writeTrailer();
401
- * await output.close();
402
- * ```
403
- *
404
- * @see {@link writeHeader} Must be called first
405
- * @see {@link close} For cleanup after trailer
406
- */
407
- async writeTrailer() {
408
- if (this.closed) {
409
- throw new Error('MediaOutput is closed');
351
+ const streamInfo = this.streams.get(streamIndex);
352
+ // Check if any streams are still uninitialized
353
+ const uninitialized = Array.from(this.streams.values()).some((s) => !s.initialized);
354
+ if (uninitialized) {
355
+ const clonedPacket = packet.clone();
356
+ packet.free();
357
+ if (clonedPacket) {
358
+ streamInfo.bufferedPackets.push(clonedPacket);
359
+ }
360
+ return;
410
361
  }
362
+ // Automatically write header if not written yet
363
+ // Use a promise to ensure only one thread writes the header
411
364
  if (!this.headerWritten) {
412
- throw new Error('Cannot write trailer without header');
365
+ this.headerWritePromise ??= (async () => {
366
+ const ret = await this.formatContext.writeHeader();
367
+ FFmpegError.throwIfError(ret, 'Failed to write header');
368
+ this.headerWritten = true;
369
+ })();
370
+ // All threads wait for the header to be written
371
+ await this.headerWritePromise;
413
372
  }
414
- if (this.trailerWritten) {
415
- throw new Error('Trailer already written');
373
+ // Set stream index
374
+ packet.streamIndex = streamIndex;
375
+ const write = async (pkt) => {
376
+ // Rescale packet timestamps if source and output timebases differ
377
+ // Note: The stream's timebase may have been changed by writeHeader (e.g., MP4 uses 1/time_scale)
378
+ if (streamInfo.sourceTimeBase) {
379
+ const outputStream = this.formatContext.streams?.[streamIndex];
380
+ if (outputStream) {
381
+ // Only rescale if timebases actually differ
382
+ const srcTb = streamInfo.sourceTimeBase;
383
+ const dstTb = outputStream.timeBase;
384
+ if (srcTb.num !== dstTb.num || srcTb.den !== dstTb.den) {
385
+ pkt.rescaleTs(streamInfo.sourceTimeBase, outputStream.timeBase);
386
+ }
387
+ }
388
+ }
389
+ // Write the packet
390
+ const ret = await this.formatContext.interleavedWriteFrame(pkt);
391
+ FFmpegError.throwIfError(ret, 'Failed to write packet');
392
+ };
393
+ // Write any buffered packets first
394
+ for (const bufferedPacket of streamInfo.bufferedPackets) {
395
+ await write(bufferedPacket);
396
+ bufferedPacket.free();
416
397
  }
417
- const ret = await this.formatContext.writeTrailer();
418
- FFmpegError.throwIfError(ret, 'Failed to write trailer');
419
- this.trailerWritten = true;
398
+ streamInfo.bufferedPackets = [];
399
+ // Write the current packet
400
+ await write(packet);
420
401
  }
421
402
  /**
422
403
  * Close media output and free resources.
423
404
  *
424
- * Writes trailer if needed and releases all resources.
405
+ * Automatically writes trailer if header was written.
406
+ * Closes the output file and releases all resources.
425
407
  * Safe to call multiple times.
426
408
  * Automatically called by Symbol.asyncDispose.
427
409
  *
@@ -429,7 +411,7 @@ export class MediaOutput {
429
411
  * ```typescript
430
412
  * const output = await MediaOutput.open('output.mp4');
431
413
  * try {
432
- * // Use output
414
+ * // Use output - trailer written automatically on close
433
415
  * } finally {
434
416
  * await output.close();
435
417
  * }
@@ -438,14 +420,23 @@ export class MediaOutput {
438
420
  * @see {@link Symbol.asyncDispose} For automatic cleanup
439
421
  */
440
422
  async close() {
441
- if (this.closed) {
423
+ if (this.isClosed) {
442
424
  return;
443
425
  }
444
- this.closed = true;
426
+ this.isClosed = true;
427
+ // Free any buffered packets
428
+ for (const streamInfo of this.streams.values()) {
429
+ // Free any buffered packets
430
+ for (const pkt of streamInfo.bufferedPackets) {
431
+ pkt.free();
432
+ }
433
+ streamInfo.bufferedPackets = [];
434
+ }
445
435
  // Try to write trailer if header was written but trailer wasn't
446
436
  try {
447
437
  if (this.headerWritten && !this.trailerWritten) {
448
438
  await this.formatContext.writeTrailer();
439
+ this.trailerWritten = true;
449
440
  }
450
441
  }
451
442
  catch {
@@ -486,69 +477,6 @@ export class MediaOutput {
486
477
  }
487
478
  }
488
479
  }
489
- /**
490
- * Get stream information.
491
- *
492
- * Returns internal stream info for the specified index.
493
- *
494
- * @param streamIndex - Stream index
495
- * @returns Stream info or undefined
496
- *
497
- * @example
498
- * ```typescript
499
- * const info = output.getStreamInfo(0);
500
- * console.log(`Stream 0 timebase: ${info?.timeBase.num}/${info?.timeBase.den}`);
501
- * ```
502
- */
503
- getStreamInfo(streamIndex) {
504
- return this.streams.get(streamIndex);
505
- }
506
- /**
507
- * Get all stream indices.
508
- *
509
- * Returns array of all added stream indices.
510
- *
511
- * @returns Array of stream indices
512
- *
513
- * @example
514
- * ```typescript
515
- * const indices = output.getStreamIndices();
516
- * console.log(`Output has ${indices.length} streams`);
517
- * ```
518
- */
519
- getStreamIndices() {
520
- return Array.from(this.streams.keys());
521
- }
522
- /**
523
- * Check if header has been written.
524
- *
525
- * @returns true if header written
526
- *
527
- * @example
528
- * ```typescript
529
- * if (!output.isHeaderWritten()) {
530
- * await output.writeHeader();
531
- * }
532
- * ```
533
- */
534
- isHeaderWritten() {
535
- return this.headerWritten;
536
- }
537
- /**
538
- * Check if trailer has been written.
539
- *
540
- * @returns true if trailer written
541
- *
542
- * @example
543
- * ```typescript
544
- * if (!output.isTrailerWritten()) {
545
- * await output.writeTrailer();
546
- * }
547
- * ```
548
- */
549
- isTrailerWritten() {
550
- return this.trailerWritten;
551
- }
552
480
  /**
553
481
  * Get underlying format context.
554
482
  *
@@ -1 +1 @@
1
- {"version":3,"file":"media-output.js","sourceRoot":"","sources":["../../src/api/media-output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media-output.js","sourceRoot":"","sources":["../../src/api/media-output.ts"],"names":[],"mappings":"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"}
@@ -93,7 +93,7 @@ export declare function pipeline(source: MediaInput, decoder: Decoder, filter: F
93
93
  * @example
94
94
  * ```typescript
95
95
  * const decoder = await Decoder.create(input.video());
96
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, decoder.getOutputStreamInfo());
96
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
97
97
  * const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb');
98
98
  * const control = pipeline(input, decoder, encoder, bsf, output);
99
99
  * await control.completion;
@@ -114,8 +114,8 @@ export declare function pipeline(source: MediaInput, decoder: Decoder, encoder:
114
114
  * @example
115
115
  * ```typescript
116
116
  * const decoder = await Decoder.create(input.video());
117
- * const filter = await FilterAPI.create('scale=640:480');
118
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, decoder.getOutputStreamInfo());
117
+ * const filter = await FilterAPI.create('scale=640:480', { ... });
118
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
119
119
  * const bsf = await BitStreamFilterAPI.create('h264_mp4toannexb');
120
120
  * const control = pipeline(input, decoder, filter, encoder, bsf, output);
121
121
  * await control.completion;
@@ -136,9 +136,9 @@ export declare function pipeline(source: MediaInput, decoder: Decoder, filter: F
136
136
  * @example
137
137
  * ```typescript
138
138
  * const decoder = await Decoder.create(input.video());
139
- * const scaleFilter = await FilterAPI.create('scale=640:480');
140
- * const cropFilter = await FilterAPI.create('crop=640:360');
141
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, decoder.getOutputStreamInfo());
139
+ * const scaleFilter = await FilterAPI.create('scale=640:480', { ... });
140
+ * const cropFilter = await FilterAPI.create('crop=640:360', { ... });
141
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
142
142
  * const control = pipeline(input, decoder, scaleFilter, cropFilter, encoder, output);
143
143
  * await control.completion;
144
144
  * ```
@@ -189,8 +189,8 @@ export declare function pipeline(source: MediaInput, bsf: BitStreamFilterAPI | B
189
189
  * ```typescript
190
190
  * // Process frames from custom source
191
191
  * const frameSource = generateFrames(); // Your async frame generator
192
- * const filter = await FilterAPI.create('scale=1920:1080');
193
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, streamInfo);
192
+ * const filter = await FilterAPI.create('scale=1920:1080', { ... });
193
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
194
194
  * const control = pipeline(frameSource, filter, encoder, output);
195
195
  * await control.completion;
196
196
  * ```
@@ -208,7 +208,7 @@ export declare function pipeline(source: AsyncIterable<Frame>, filter: FilterAPI
208
208
  * ```typescript
209
209
  * // Encode raw frames directly
210
210
  * const frameSource = generateFrames(); // Your async frame generator
211
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, streamInfo);
211
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
212
212
  * const control = pipeline(frameSource, encoder, output);
213
213
  * await control.completion;
214
214
  * ```
@@ -245,7 +245,7 @@ export declare function pipeline(source: MediaInput, decoder: Decoder): AsyncGen
245
245
  * ```typescript
246
246
  * // Get filtered frames for custom processing
247
247
  * const decoder = await Decoder.create(input.video());
248
- * const filter = await FilterAPI.create('scale=640:480');
248
+ * const filter = await FilterAPI.create('scale=640:480', { ... });
249
249
  * const frames = pipeline(input, decoder, filter);
250
250
  * for await (const frame of frames) {
251
251
  * // Process filtered frame
@@ -267,8 +267,8 @@ export declare function pipeline(source: MediaInput, decoder: Decoder, filter: F
267
267
  * ```typescript
268
268
  * // Get encoded packets for custom output handling
269
269
  * const decoder = await Decoder.create(input.video());
270
- * const filter = await FilterAPI.create('scale=640:480');
271
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, decoder.getOutputStreamInfo());
270
+ * const filter = await FilterAPI.create('scale=640:480', { ... });
271
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
272
272
  * const packets = pipeline(input, decoder, filter, encoder);
273
273
  * for await (const packet of packets) {
274
274
  * // Handle encoded packet
@@ -289,7 +289,7 @@ export declare function pipeline(source: MediaInput, decoder: Decoder, filter: F
289
289
  * ```typescript
290
290
  * // Transcode to packets for custom output
291
291
  * const decoder = await Decoder.create(input.video());
292
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, decoder.getOutputStreamInfo());
292
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
293
293
  * const packets = pipeline(input, decoder, encoder);
294
294
  * for await (const packet of packets) {
295
295
  * // Handle transcoded packet
@@ -309,7 +309,7 @@ export declare function pipeline(source: MediaInput, decoder: Decoder, encoder:
309
309
  * ```typescript
310
310
  * // Filter frames from custom source
311
311
  * const frameSource = generateFrames();
312
- * const filter = await FilterAPI.create('scale=640:480');
312
+ * const filter = await FilterAPI.create('scale=640:480', { ... });
313
313
  * const filteredFrames = pipeline(frameSource, filter);
314
314
  * for await (const frame of filteredFrames) {
315
315
  * // Process filtered frame
@@ -329,7 +329,7 @@ export declare function pipeline(source: AsyncIterable<Frame>, filter: FilterAPI
329
329
  * ```typescript
330
330
  * // Encode frames to packets
331
331
  * const frameSource = generateFrames();
332
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, streamInfo);
332
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
333
333
  * const packets = pipeline(frameSource, encoder);
334
334
  * for await (const packet of packets) {
335
335
  * // Handle encoded packet
@@ -350,8 +350,8 @@ export declare function pipeline(source: AsyncIterable<Frame>, encoder: Encoder)
350
350
  * ```typescript
351
351
  * // Process frames with filter and encode to packets
352
352
  * const frameSource = generateFrames();
353
- * const filter = await FilterAPI.create('scale=640:480');
354
- * const encoder = await Encoder.create(FF_ENCODER_LIBX264, streamInfo);
353
+ * const filter = await FilterAPI.create('scale=640:480', { ... });
354
+ * const encoder = await Encoder.create(FF_ENCODER_LIBX264, { ... });
355
355
  * const packets = pipeline(frameSource, filter, encoder);
356
356
  * for await (const packet of packets) {
357
357
  * // Handle encoded packet