| |
| 'use strict'; |
|
|
| var path = require('path'); |
| var util = require('util'); |
| var EventEmitter = require('events').EventEmitter; |
|
|
| var utils = require('./utils'); |
| var ARGLISTS = ['_global', '_audio', '_audioFilters', '_video', '_videoFilters', '_sizeFilters', '_complexFilters']; |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| function FfmpegCommand(input, options) { |
| |
| if (!(this instanceof FfmpegCommand)) { |
| return new FfmpegCommand(input, options); |
| } |
|
|
| EventEmitter.call(this); |
|
|
| if (typeof input === 'object' && !('readable' in input)) { |
| |
| options = input; |
| } else { |
| |
| options = options || {}; |
| options.source = input; |
| } |
|
|
| |
| this._inputs = []; |
| if (options.source) { |
| this.input(options.source); |
| } |
|
|
| |
| this._outputs = []; |
| this.output(); |
|
|
| |
| var self = this; |
| ['_global', '_complexFilters'].forEach(function(prop) { |
| self[prop] = utils.args(); |
| }); |
|
|
| |
| options.stdoutLines = 'stdoutLines' in options ? options.stdoutLines : 100; |
| options.presets = options.presets || options.preset || path.join(__dirname, 'presets'); |
| options.niceness = options.niceness || options.priority || 0; |
|
|
| |
| this.options = options; |
|
|
| |
| this.logger = options.logger || { |
| debug: function() {}, |
| info: function() {}, |
| warn: function() {}, |
| error: function() {} |
| }; |
| } |
| util.inherits(FfmpegCommand, EventEmitter); |
| module.exports = FfmpegCommand; |
|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| FfmpegCommand.prototype.clone = function() { |
| var clone = new FfmpegCommand(); |
| var self = this; |
|
|
| |
| clone.options = this.options; |
| clone.logger = this.logger; |
|
|
| |
| clone._inputs = this._inputs.map(function(input) { |
| return { |
| source: input.source, |
| options: input.options.clone() |
| }; |
| }); |
|
|
| |
| if ('target' in this._outputs[0]) { |
| |
| clone._outputs = []; |
| clone.output(); |
| } else { |
| |
| clone._outputs = [ |
| clone._currentOutput = { |
| flags: {} |
| } |
| ]; |
|
|
| ['audio', 'audioFilters', 'video', 'videoFilters', 'sizeFilters', 'options'].forEach(function(key) { |
| clone._currentOutput[key] = self._currentOutput[key].clone(); |
| }); |
|
|
| if (this._currentOutput.sizeData) { |
| clone._currentOutput.sizeData = {}; |
| utils.copy(this._currentOutput.sizeData, clone._currentOutput.sizeData); |
| } |
|
|
| utils.copy(this._currentOutput.flags, clone._currentOutput.flags); |
| } |
|
|
| |
| ['_global', '_complexFilters'].forEach(function(prop) { |
| clone[prop] = self[prop].clone(); |
| }); |
|
|
| return clone; |
| }; |
|
|
|
|
| |
|
|
| require('./options/inputs')(FfmpegCommand.prototype); |
| require('./options/audio')(FfmpegCommand.prototype); |
| require('./options/video')(FfmpegCommand.prototype); |
| require('./options/videosize')(FfmpegCommand.prototype); |
| require('./options/output')(FfmpegCommand.prototype); |
| require('./options/custom')(FfmpegCommand.prototype); |
| require('./options/misc')(FfmpegCommand.prototype); |
|
|
|
|
| |
|
|
| require('./processor')(FfmpegCommand.prototype); |
|
|
|
|
| |
|
|
| require('./capabilities')(FfmpegCommand.prototype); |
|
|
| FfmpegCommand.setFfmpegPath = function(path) { |
| (new FfmpegCommand()).setFfmpegPath(path); |
| }; |
|
|
| FfmpegCommand.setFfprobePath = function(path) { |
| (new FfmpegCommand()).setFfprobePath(path); |
| }; |
|
|
| FfmpegCommand.setFlvtoolPath = function(path) { |
| (new FfmpegCommand()).setFlvtoolPath(path); |
| }; |
|
|
| FfmpegCommand.availableFilters = |
| FfmpegCommand.getAvailableFilters = function(callback) { |
| (new FfmpegCommand()).availableFilters(callback); |
| }; |
|
|
| FfmpegCommand.availableCodecs = |
| FfmpegCommand.getAvailableCodecs = function(callback) { |
| (new FfmpegCommand()).availableCodecs(callback); |
| }; |
|
|
| FfmpegCommand.availableFormats = |
| FfmpegCommand.getAvailableFormats = function(callback) { |
| (new FfmpegCommand()).availableFormats(callback); |
| }; |
|
|
| FfmpegCommand.availableEncoders = |
| FfmpegCommand.getAvailableEncoders = function(callback) { |
| (new FfmpegCommand()).availableEncoders(callback); |
| }; |
|
|
|
|
| |
|
|
| require('./ffprobe')(FfmpegCommand.prototype); |
|
|
| FfmpegCommand.ffprobe = function(file) { |
| var instance = new FfmpegCommand(file); |
| instance.ffprobe.apply(instance, Array.prototype.slice.call(arguments, 1)); |
| }; |
|
|
| |
|
|
| require('./recipes')(FfmpegCommand.prototype); |
|
|