| | |
| | 'use strict'; |
| |
|
| | var utils = require('../utils'); |
| |
|
| |
|
| | |
| | |
| | |
| |
|
| | module.exports = function(proto) { |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | proto.addOutput = |
| | proto.output = function(target, pipeopts) { |
| | var isFile = false; |
| |
|
| | if (!target && this._currentOutput) { |
| | |
| | throw new Error('Invalid output'); |
| | } |
| |
|
| | if (target && typeof target !== 'string') { |
| | if (!('writable' in target) || !(target.writable)) { |
| | throw new Error('Invalid output'); |
| | } |
| | } else if (typeof target === 'string') { |
| | var protocol = target.match(/^([a-z]{2,}):/i); |
| | isFile = !protocol || protocol[0] === 'file'; |
| | } |
| |
|
| | if (target && !('target' in this._currentOutput)) { |
| | |
| | this._currentOutput.target = target; |
| | this._currentOutput.isFile = isFile; |
| | this._currentOutput.pipeopts = pipeopts || {}; |
| | } else { |
| | if (target && typeof target !== 'string') { |
| | var hasOutputStream = this._outputs.some(function(output) { |
| | return typeof output.target !== 'string'; |
| | }); |
| |
|
| | if (hasOutputStream) { |
| | throw new Error('Only one output stream is supported'); |
| | } |
| | } |
| |
|
| | this._outputs.push(this._currentOutput = { |
| | target: target, |
| | isFile: isFile, |
| | flags: {}, |
| | pipeopts: pipeopts || {} |
| | }); |
| |
|
| | var self = this; |
| | ['audio', 'audioFilters', 'video', 'videoFilters', 'sizeFilters', 'options'].forEach(function(key) { |
| | self._currentOutput[key] = utils.args(); |
| | }); |
| |
|
| | if (!target) { |
| | |
| | delete this._currentOutput.target; |
| | } |
| | } |
| |
|
| | return this; |
| | }; |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | proto.seekOutput = |
| | proto.seek = function(seek) { |
| | this._currentOutput.options('-ss', seek); |
| | return this; |
| | }; |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | proto.withDuration = |
| | proto.setDuration = |
| | proto.duration = function(duration) { |
| | this._currentOutput.options('-t', duration); |
| | return this; |
| | }; |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | proto.toFormat = |
| | proto.withOutputFormat = |
| | proto.outputFormat = |
| | proto.format = function(format) { |
| | this._currentOutput.options('-f', format); |
| | return this; |
| | }; |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | proto.map = function(spec) { |
| | this._currentOutput.options('-map', spec.replace(utils.streamRegexp, '[$1]')); |
| | return this; |
| | }; |
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | proto.updateFlvMetadata = |
| | proto.flvmeta = function() { |
| | this._currentOutput.flags.flvmeta = true; |
| | return this; |
| | }; |
| | }; |
| |
|