or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

audio-processing.mdconfiguration.mdindex.mdinput-management.mdoutput-management.mdprocessing-control.mdspecial-features.mdvideo-processing.md
tile.json

output-management.mddocs/

Output Management

Output management capabilities for configuring destinations, formats, seeking, duration, and stream mapping.

Capabilities

Output Target Configuration

Configure output destinations including files and streams.

/**
 * Add output target (file or stream)
 * @param target - Output file path or writable stream
 * @param pipeopts - Optional pipe options for streams
 * @returns FfmpegCommand instance for chaining
 */
output(target?, pipeopts?) // → FfmpegCommand
// Aliases: addOutput

Usage Examples:

const ffmpeg = require('fluent-ffmpeg');
const fs = require('fs');

// File output
ffmpeg('input.avi')
  .output('output.mp4')
  .run();

// Stream output
const outputStream = fs.createWriteStream('stream_output.mp4');
ffmpeg('input.avi')
  .output(outputStream)
  .run();

// Multiple outputs
ffmpeg('input.mkv')
  .output('high_quality.mp4').videoBitrate('5000k')
  .output('low_quality.mp4').videoBitrate('1000k')
  .run();

// Output with pipe options
ffmpeg('input.avi')
  .output(outputStream, { end: true })
  .run();

Output Format

Specify the container format for output files.

/**
 * Set output format/container
 * @param format - Format name (e.g., 'mp4', 'avi', 'mkv')
 * @returns FfmpegCommand instance for chaining
 */
format(format) // → FfmpegCommand
// Aliases: toFormat, withOutputFormat, outputFormat

Usage Examples:

// Explicit format specification
ffmpeg('input.avi').format('mp4').save('output.mp4');
ffmpeg('input.mp4').format('webm').save('output.webm');

// Format override (when filename doesn't match)
ffmpeg('input.mov')
  .format('mp4')  // Force MP4 container
  .save('output.video');  // Extension doesn't matter

// Streaming formats
ffmpeg('input.mp4')
  .format('flv')
  .save('rtmp://server/live/stream');

Output Seeking and Duration

Control output timing and duration limits.

/**
 * Set output seek time (skip beginning of output)
 * @param seek - Time in seconds or '[hh:[mm:]]ss[.xxx]' format
 * @returns FfmpegCommand instance for chaining
 */
seek(seek) // → FfmpegCommand
// Aliases: seekOutput

/**
 * Set maximum output duration
 * @param duration - Duration in seconds or time format
 * @returns FfmpegCommand instance for chaining
 */
duration(duration) // → FfmpegCommand
// Aliases: withDuration, setDuration

Usage Examples:

// Extract middle portion
ffmpeg('long_video.mp4')
  .seekInput(60)    // Start from 1 minute in input
  .duration(30)     // Take 30 seconds
  .save('clip.mp4');

// Skip first part of output
ffmpeg('input.avi')
  .seek(10)         // Skip first 10 seconds of output
  .save('trimmed.mp4');

// Precise timing
ffmpeg('presentation.mp4')
  .seek('00:02:30.500')      // Start at 2:30.5
  .duration('00:05:00')      // 5 minutes duration
  .save('segment.mp4');

// Time-based splitting
ffmpeg('movie.mkv')
  .seek(0).duration(1800)    // First 30 minutes
  .output('part1.mp4')
  .seek(1800).duration(1800) // Second 30 minutes  
  .output('part2.mp4')
  .run();

Stream Mapping

Map specific input streams to outputs.

/**
 * Add stream mapping
 * @param spec - Stream specification (e.g., '0:v:0', '1:a', '-1:s')
 * @returns FfmpegCommand instance for chaining
 */
map(spec) // → FfmpegCommand

Stream Specification Format:

  • 'input:type:index' - Select specific stream
  • 'input:type' - Select all streams of type from input
  • '-1:type' - Exclude streams of type

Usage Examples:

// Select specific streams
ffmpeg('movie.mkv')
  .map('0:v:0')     // First video stream
  .map('0:a:1')     // Second audio stream
  .map('0:s:0')     // First subtitle stream
  .save('remapped.mp4');

// Multiple audio tracks
ffmpeg('multilang.mkv')
  .map('0:v')       // All video streams
  .map('0:a:0')     // English audio
  .map('0:a:2')     // Spanish audio
  .save('dual_audio.mp4');

// Exclude streams
ffmpeg('input.mkv')
  .map('0')         // Map all streams
  .map('-1:s')      // Exclude subtitles
  .save('no_subs.mp4');

// Complex mapping with multiple inputs
ffmpeg()
  .input('video.mp4')      // Input 0
  .input('audio.mp3')      // Input 1
  .input('subtitles.srt')  // Input 2
  .map('0:v')              // Video from input 0
  .map('1:a')              // Audio from input 1
  .map('2:s')              // Subtitles from input 2
  .save('combined.mkv');

FLV Metadata Updates

Update FLV file metadata using flvtool2/flvmeta.

/**
 * Run flvtool2/flvmeta on output FLV files
 * @returns FfmpegCommand instance for chaining
 */
flvmeta() // → FfmpegCommand
// Aliases: updateFlvMetadata

Usage Example:

// Create FLV with proper metadata
ffmpeg('input.mp4')
  .format('flv')
  .flvmeta()  // Add keyframe metadata for seeking
  .save('output.flv');

Custom Output Options

Add custom FFmpeg output options not covered by other methods.

/**
 * Add custom output options
 * @param options - Option string(s) or array of option strings  
 * @returns FfmpegCommand instance for chaining
 */
outputOptions(...options) // → FfmpegCommand
// Aliases: addOutputOption, addOutputOptions, addOption, addOptions,
//          withOutputOption, withOutputOptions, withOption, withOptions, outputOption

Usage Examples:

// Custom encoding options
ffmpeg('input.avi')
  .outputOptions([
    '-crf', '18',           // Constant rate factor
    '-preset', 'slow',      // Encoding preset
    '-profile:v', 'high',   // H.264 profile
    '-level', '4.1'         // H.264 level
  ])
  .save('high_quality.mp4');

// Streaming options
ffmpeg('input.mp4')
  .outputOptions([
    '-movflags', '+faststart',  // Web-optimized MP4
    '-pix_fmt', 'yuv420p'       // Compatibility pixel format
  ])
  .save('web_ready.mp4');

// Custom container options
ffmpeg('input.avi')
  .outputOptions([
    '-avoid_negative_ts', 'make_zero',
    '-fflags', '+genpts'
  ])
  .format('mp4')
  .save('fixed_timing.mp4');

// Multi-pass encoding
ffmpeg('input.avi')
  .outputOptions([
    '-pass', '1',
    '-b:v', '2000k',
    '-f', 'null'
  ])
  .output('/dev/null')  // First pass
  .run()
  .then(() => {
    return ffmpeg('input.avi')
      .outputOptions([
        '-pass', '2', 
        '-b:v', '2000k'
      ])
      .save('2pass_output.mp4');
  });

Advanced Output Management

Output Per-Stream Options

Apply options to specific output streams.

/**
 * Apply codec options to specific streams using output options
 */
outputOptions(['-c:v:0', 'libx264', '-c:a:0', 'aac']) // → FfmpegCommand

Usage Examples:

// Different codecs for multiple streams
ffmpeg('input.mkv')
  .outputOptions([
    '-c:v:0', 'libx264',    // H.264 for first video
    '-c:v:1', 'libx265',    // H.265 for second video
    '-c:a:0', 'aac',        // AAC for first audio
    '-c:a:1', 'mp3'         // MP3 for second audio
  ])
  .save('multi_codec.mkv');

// Per-stream bitrates
ffmpeg('input.avi')
  .outputOptions([
    '-b:v:0', '2000k',      // 2Mbps for video
    '-b:a:0', '128k',       // 128kbps for audio
    '-maxrate:v:0', '2500k', // Max video bitrate
    '-bufsize:v:0', '5000k'  // Buffer size
  ])
  .save('bitrate_controlled.mp4');

Conditional Output

Create outputs based on conditions.

Usage Example:

const command = ffmpeg('input.mp4');

// Add outputs conditionally
if (needHighQuality) {
  command.output('hq_output.mp4').videoBitrate('5000k');
}

if (needLowQuality) {
  command.output('lq_output.mp4').videoBitrate('1000k');
}

command.run();

Output Types

/**
 * Output target types
 */
type OutputTarget = string | WritableStream;

/**
 * Pipe options for stream outputs
 */
interface PipeOptions {
  end?: boolean;        // End stream when ffmpeg finishes (default: true)
}

/**
 * Common output format names
 */
type OutputFormat = 
  | 'mp4' | 'avi' | 'mkv' | 'mov' | 'wmv'     // Video containers
  | 'mp3' | 'aac' | 'wav' | 'flac' | 'ogg'    // Audio formats
  | 'webm' | 'ogv'                            // Web formats
  | 'flv' | 'f4v'                             // Flash formats  
  | 'ts' | 'mpegts'                           // Transport streams
  | 'hls' | 'dash'                            // Adaptive streaming
  | 'null'                                    // Null output (testing)
  | string;                                   // Any FFmpeg format

/**
 * Stream mapping specification
 */
type StreamSpec = string; // Format: 'input:type:index' or variations

/**
 * Time specification for seek/duration
 */
type TimeSpec = number | string; // Seconds as number or 'HH:MM:SS.mmm' format