A fluent API to FFMPEG for audio and video manipulation with chainable methods
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
Input management capabilities for configuring source files, streams, formats, and processing parameters in fluent-ffmpeg.
Add input files or streams to the FFmpeg command.
/**
* Add input file or stream to command
* @param source - File path or readable stream
* @returns FfmpegCommand instance for chaining
*/
input(source) // → FfmpegCommand
// Aliases: addInput, mergeAddUsage Examples:
const ffmpeg = require('fluent-ffmpeg');
// File input
ffmpeg('video.mp4').save('output.mp4');
// Stream input
const fs = require('fs');
const inputStream = fs.createReadStream('input.avi');
ffmpeg(inputStream).save('output.mp4');
// Multiple inputs
ffmpeg()
.input('video1.mp4')
.input('video2.mp4')
.input('audio.mp3')
.save('combined.mp4');Specify the format of input files when FFmpeg cannot auto-detect.
/**
* Specify input format for the last added input
* @param format - Input format name (e.g., 'avi', 'mov', 'rawvideo')
* @returns FfmpegCommand instance for chaining
*/
inputFormat(format) // → FfmpegCommand
// Aliases: withInputFormat, fromFormatUsage Examples:
// Raw video input
ffmpeg('rawvideo.yuv')
.inputFormat('rawvideo')
.inputFps(25)
.size('640x480')
.save('output.mp4');
// Specify format for ambiguous files
ffmpeg('data.bin')
.inputFormat('h264')
.save('output.mp4');Set frame rate for raw video inputs or override detected frame rate.
/**
* Set input frame rate (for raw video formats)
* @param fps - Input frames per second
* @returns FfmpegCommand instance for chaining
*/
inputFps(fps) // → FfmpegCommand
// Aliases: withInputFps, withInputFPS, withFpsInput, withFPSInput,
// inputFPS, fpsInput, FPSInputUsage Examples:
// Raw video with specific FPS
ffmpeg('raw_video.yuv')
.inputFormat('rawvideo')
.inputFps(30)
.size('1920x1080')
.save('output.mp4');
// Override detected frame rate
ffmpeg('variable_fps.avi')
.inputFps(25)
.save('constant_fps.mp4');Use the native frame rate of the input without conversion.
/**
* Use native framerate for input (no frame rate conversion)
* @returns FfmpegCommand instance for chaining
*/
native() // → FfmpegCommand
// Aliases: nativeFramerate, withNativeFramerateUsage Example:
// Preserve original frame rate
ffmpeg('variable_fps_video.mp4')
.native()
.videoCodec('libx264')
.save('output.mp4');Set the starting position for input processing.
/**
* Set input seek time (start processing from specific position)
* @param seek - Time in seconds or '[hh:[mm:]]ss[.xxx]' format
* @returns FfmpegCommand instance for chaining
*/
seekInput(seek) // → FfmpegCommand
// Aliases: setStartTimeUsage Examples:
// Seek to 30 seconds
ffmpeg('long_video.mp4')
.seekInput(30)
.duration(60) // Take 60 seconds from that position
.save('clip.mp4');
// Seek using time format
ffmpeg('movie.mkv')
.seekInput('01:30:00') // Start at 1 hour 30 minutes
.save('from_middle.mp4');
// Precise seeking with milliseconds
ffmpeg('video.mp4')
.seekInput('00:02:30.500') // 2 minutes 30.5 seconds
.save('precise_clip.mp4');Configure input looping for continuous processing.
/**
* Loop over input (repeat input stream)
* @param duration - Optional loop duration
* @returns FfmpegCommand instance for chaining
*/
loop(duration?) // → FfmpegCommandUsage Examples:
// Loop indefinitely until other constraints stop it
ffmpeg('short_clip.mp4')
.loop()
.duration(300) // Loop for 5 minutes total
.save('looped_output.mp4');
// Loop with specific duration
ffmpeg('logo.png')
.loop(60) // Loop the image for 60 seconds
.fps(25)
.save('logo_video.mp4');Add custom FFmpeg input options not covered by other methods.
/**
* Add custom input options
* @param options - Option string(s) or array of option strings
* @returns FfmpegCommand instance for chaining
*/
inputOptions(...options) // → FfmpegCommand
// Aliases: addInputOption, addInputOptions, withInputOption,
// withInputOptions, inputOptionUsage Examples:
// Hardware decoding
ffmpeg('input.mp4')
.inputOptions([
'-hwaccel', 'cuda',
'-hwaccel_output_format', 'cuda'
])
.save('output.mp4');
// Custom pixel format
ffmpeg('input.yuv')
.inputOptions('-pix_fmt', 'yuv420p')
.inputFormat('rawvideo')
.save('output.mp4');
// Multiple custom options
ffmpeg('rtsp://camera.local/stream')
.inputOptions([
'-rtsp_transport', 'tcp',
'-fflags', '+genpts',
'-thread_queue_size', '512'
])
.save('recorded.mp4');/**
* Supported input source types
*/
type InputSource = string | ReadableStream;
/**
* Input format names (common examples)
*/
type InputFormat =
| 'avi' | 'mp4' | 'mkv' | 'mov' | 'wmv' | 'flv' // Video containers
| 'mp3' | 'aac' | 'wav' | 'flac' | 'ogg' // Audio formats
| 'rawvideo' | 'yuv4mpegpipe' | 'image2' // Raw/image formats
| 'h264' | 'hevc' | 'mpeg2video' // Video codecs
| string; // Any FFmpeg format
/**
* Time specification formats
*/
type TimeSpec = number | string; // Seconds as number or 'HH:MM:SS.mmm' format