/*jshint node:true*/ | |
; | |
var utils = require('../utils'); | |
/* | |
*! Video-related methods | |
*/ | |
module.exports = function(proto) { | |
/** | |
* Disable video in the output | |
* | |
* @method FfmpegCommand#noVideo | |
* @category Video | |
* @aliases withNoVideo | |
* | |
* @return FfmpegCommand | |
*/ | |
proto.withNoVideo = | |
proto.noVideo = function() { | |
this._currentOutput.video.clear(); | |
this._currentOutput.videoFilters.clear(); | |
this._currentOutput.video('-vn'); | |
return this; | |
}; | |
/** | |
* Specify video codec | |
* | |
* @method FfmpegCommand#videoCodec | |
* @category Video | |
* @aliases withVideoCodec | |
* | |
* @param {String} codec video codec name | |
* @return FfmpegCommand | |
*/ | |
proto.withVideoCodec = | |
proto.videoCodec = function(codec) { | |
this._currentOutput.video('-vcodec', codec); | |
return this; | |
}; | |
/** | |
* Specify video bitrate | |
* | |
* @method FfmpegCommand#videoBitrate | |
* @category Video | |
* @aliases withVideoBitrate | |
* | |
* @param {String|Number} bitrate video bitrate in kbps (with an optional 'k' suffix) | |
* @param {Boolean} [constant=false] enforce constant bitrate | |
* @return FfmpegCommand | |
*/ | |
proto.withVideoBitrate = | |
proto.videoBitrate = function(bitrate, constant) { | |
bitrate = ('' + bitrate).replace(/k?$/, 'k'); | |
this._currentOutput.video('-b:v', bitrate); | |
if (constant) { | |
this._currentOutput.video( | |
'-maxrate', bitrate, | |
'-minrate', bitrate, | |
'-bufsize', '3M' | |
); | |
} | |
return this; | |
}; | |
/** | |
* Specify custom video filter(s) | |
* | |
* Can be called both with one or many filters, or a filter array. | |
* | |
* @example | |
* command.videoFilters('filter1'); | |
* | |
* @example | |
* command.videoFilters('filter1', 'filter2=param1=value1:param2=value2'); | |
* | |
* @example | |
* command.videoFilters(['filter1', 'filter2']); | |
* | |
* @example | |
* command.videoFilters([ | |
* { | |
* filter: 'filter1' | |
* }, | |
* { | |
* filter: 'filter2', | |
* options: 'param=value:param=value' | |
* } | |
* ]); | |
* | |
* @example | |
* command.videoFilters( | |
* { | |
* filter: 'filter1', | |
* options: ['value1', 'value2'] | |
* }, | |
* { | |
* filter: 'filter2', | |
* options: { param1: 'value1', param2: 'value2' } | |
* } | |
* ); | |
* | |
* @method FfmpegCommand#videoFilters | |
* @category Video | |
* @aliases withVideoFilter,withVideoFilters,videoFilter | |
* | |
* @param {...String|String[]|Object[]} filters video filter strings, string array or | |
* filter specification array, each with the following properties: | |
* @param {String} filters.filter filter name | |
* @param {String|String[]|Object} [filters.options] filter option string, array, or object | |
* @return FfmpegCommand | |
*/ | |
proto.withVideoFilter = | |
proto.withVideoFilters = | |
proto.videoFilter = | |
proto.videoFilters = function(filters) { | |
if (arguments.length > 1) { | |
filters = [].slice.call(arguments); | |
} | |
if (!Array.isArray(filters)) { | |
filters = [filters]; | |
} | |
this._currentOutput.videoFilters(utils.makeFilterStrings(filters)); | |
return this; | |
}; | |
/** | |
* Specify output FPS | |
* | |
* @method FfmpegCommand#fps | |
* @category Video | |
* @aliases withOutputFps,withOutputFPS,withFpsOutput,withFPSOutput,withFps,withFPS,outputFPS,outputFps,fpsOutput,FPSOutput,FPS | |
* | |
* @param {Number} fps output FPS | |
* @return FfmpegCommand | |
*/ | |
proto.withOutputFps = | |
proto.withOutputFPS = | |
proto.withFpsOutput = | |
proto.withFPSOutput = | |
proto.withFps = | |
proto.withFPS = | |
proto.outputFPS = | |
proto.outputFps = | |
proto.fpsOutput = | |
proto.FPSOutput = | |
proto.fps = | |
proto.FPS = function(fps) { | |
this._currentOutput.video('-r', fps); | |
return this; | |
}; | |
/** | |
* Only transcode a certain number of frames | |
* | |
* @method FfmpegCommand#frames | |
* @category Video | |
* @aliases takeFrames,withFrames | |
* | |
* @param {Number} frames frame count | |
* @return FfmpegCommand | |
*/ | |
proto.takeFrames = | |
proto.withFrames = | |
proto.frames = function(frames) { | |
this._currentOutput.video('-vframes', frames); | |
return this; | |
}; | |
}; | |