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