little-media-box
Convenient atomicized classes for representing digital multimedia assets in distributed Node.js DSP pipelines. NOTE: This is an audio-centric fork of the original little-media-box repository. For the baseline module, see
@little-core-labs/little-media-box
Background
At Storyboard, we have strong opinions on how to handle audio, especially when
it is UGC sourced from the web. Leveraging our expertise in the handling of
multimedia assets in distributed cloud pipelines, we have built out and extended
little-media-box to meet audio-centric use cases.
Installation
$ npm install @storyboard-fm/little-media-box
Status
Development/Testing/Documentation
Usage
const { Delivery, Source } = require('@storyboard-fm/little-media-box')
const uri = 'http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_60fps_normal.mp4'
const delivery = new Delivery()
delivery.ready(() => {
delivery.source(uri)
delivery.probe(console.log)
//delivery.demux(console.log).on('progress', console.log)
// {
// 'http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_60fps_normal.mp4': // {
// streams: [ [Object], [Object], [Object] ],
// format: {
// filename: 'bbb_sunflower_1080p_60fps_normal.mp4',
// nb_streams: 3,
// nb_programs: 0,
// format_name: 'mov,mp4,m4a,3gp,3g2,mj2',
// format_long_name: 'QuickTime / MOV',
// start_time: 0,
// duration: 634.533333,
// size: 'N/A',
// bit_rate: 'N/A',
// probe_score: 100,
// tags: [Object]
// },
// chapters: []
// }
// }
})
See examples for additional use-cases.
API
const lmb = require('@storyboard-fm/little-media-box')
Import little-media-box.
demuxStream = lmb.createDemuxStream(source, [opts])
Extracts the media track from the given source and returns it as a
stream.Readable.
delivery = new lmb.Delivery([opts])
An object, which provides one or more Source objects. Extends nanoresource-pool.
lmb.demux(source, [opts], callback)
Extracts one or more media tracks from the given source, and saves each to its own individual Matroska container.
lmb.mux(sources, [opts], callback)
The callback receives error and output arguments.
{ bin } = lmb.settings
A settings object containing a bin object with the following properties:
{
x264: X264_BIN_PATH,
ffmpeg: FFMPEG_BIN_PATH,
ffprobe: FFPROBE_BIN_PATH,
mkvmerge: MKVMERGE_BIN_PATH,
}
settings = new lmb.configure([opts])
lmb.constants
Contains many constants used in various operations.
{1: iso6391, 2: iso6392, 2: iso6393} = lmb.iso639
lmb.extensions
An extended Array that contains a set of lexicographically-sorted unique file
extension names. Provides various methods like checking the file type for an
extension.
asset = new lmb.Asset(uri, [opts])
Extends nanoresource.
source = new lmb.Source(uri, [opts])
Extends nanoresource.
track = new lmb.Track(source, [opts])
Extends nanoresource.
subtitleTrack = new lmb.SubtitleTrack(source, [opts]
Extends Track.
videoTrack = new lmb.VideoTrack(source, [opts])
Extends Track.
audioTrack = new lmb.AudioTrack(source, [opts])
Extends Track.
lmb.TrackError
Track errors. Contains the following custom properties:
{
track,
code: 'TRACK_ERROR'
}
lmb.TrackPropertiesError
code: TRACK_PROPERTIES_ERROR.
lmb.TrackPropertiesMissingFormatError
code: TRACK_FORMAT_NOT_FOUND.
lmb.TrackPropertiesMissingStreamError
code: TRACK_STREAM_NOT_FOUND.
lmb.TrackValidationError
code: TRACK_STREAM_NOT_FOUND.
lmb.ffmpeg = require('fluent-ffmpeg')
Forward require of fluent-ffmpeg.
lmb.FFPROBE_BIN_PATH
Path to ffprobe bin.
lmb.FFMPEG_BIN_PATH
Path to ffmpeg bin.
lmb.MKVMERGE_BIN_PATH
Path to static binary for mkvmerge.
lmb.X264_BIN_PATH
Path to static binary x264.
License
MIT