From 9f1005d5a88089baf4ab5500bfaf8c34439442d3 Mon Sep 17 00:00:00 2001 From: MikeKoval Date: Thu, 30 Apr 2020 17:22:48 +0300 Subject: [PATCH 1/2] - Added possibility to provide not just styles but also "Script Info" and other .ass properties including PlayResX that is highly important for correct Margin in .ass - Added possibility to pass subtitleOptions including fontsdir --- lib/options.js | 3 ++- lib/render.js | 37 ++++++++++++++++++++++++++----------- lib/substation.js | 9 ++++----- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/lib/options.js b/lib/options.js index 4c32804..5a3a273 100644 --- a/lib/options.js +++ b/lib/options.js @@ -14,7 +14,8 @@ var defaults = exports.defaults = { audioChannels: 2, format: 'mp4', useSubripSubtitles: false, - subtitleStyle: null + subtitleStyle: null, + subtitleOptions: null, } exports.define = function (options) { diff --git a/lib/render.js b/lib/render.js index 6fc8054..cd18320 100644 --- a/lib/render.js +++ b/lib/render.js @@ -134,13 +134,24 @@ function renderVideo(videoshow, options, forwardEvent, cb) { }) if (subtitles) { - options.push('-vf subtitles=\'' + subtitles + '\'') + const subtitleOptions = [ + '\'' + subtitles + '\'', + ] + if (params.subtitleOptions) { + Object.keys(params.subtitleOptions).forEach(key => { + subtitleOptions.push(key + '=' + '\'' + params.subtitleOptions[key] + '\''); + }); + } + console.log({ subtitleOptions }); + options.push(`-vf subtitles=` + subtitleOptions.join(':')) } if (videoOptions.pixelFormat) { options.push("-pix_fmt " + videoOptions.pixelFormat); } + console.log({ options }); + video .outputOptions(options) .on('error', clean(end)) @@ -222,15 +233,15 @@ function getImageSubtitles(videoshow) { var length = 0 var subtitles = videoshow.images - .map(function (image, index) { - var offset = calculateOffsetDelay(index) - if (image.caption) { - return renderCaption(image, length++, offset, params) - } - }) - .filter(function (caption) { - return caption != null - }) + .map(function (image, index) { + var offset = calculateOffsetDelay(index) + if (image.caption) { + return renderCaption(image, length++, offset, params) + } + }) + .filter(function (caption) { + return caption != null + }) if (!subtitles.length) { return @@ -240,7 +251,11 @@ function getImageSubtitles(videoshow) { extension = '.srt' subtitles = subrip.stringify(subtitles) } else { - subtitles = substation.stringify(subtitles, params.subtitleStyle) + subtitles = substation.stringify(subtitles, { + 'V4 Styles': { + 'Style': params.subtitleStyle, + } + }) } filepath = randomName() + extension diff --git a/lib/substation.js b/lib/substation.js index fc1314c..17b1a87 100644 --- a/lib/substation.js +++ b/lib/substation.js @@ -83,8 +83,8 @@ var defaultParams = { } } -exports.stringify = function (captions, styles) { - var params = mergeParams(styles) +exports.stringify = function (captions, params) { + var params = mergeParams(params) captions.forEach(function (caption) { var subtitle = merge({}, captionParams, { @@ -103,9 +103,8 @@ exports.stringify = function (captions, styles) { return substation(params) } -function mergeParams(styles) { - var params = merge({}, defaultParams) - merge(params['V4 Styles'].Style, styles) +function mergeParams(params) { + var params = merge({}, defaultParams, params); return Object.keys(params).map(function (key) { var body = params[key] From 312d6453b56a70cf4396f270c8d6ec4ee6a3dfb8 Mon Sep 17 00:00:00 2001 From: MikeKoval Date: Thu, 30 Apr 2020 17:24:37 +0300 Subject: [PATCH 2/2] removed console.log --- lib/render.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/render.js b/lib/render.js index cd18320..9539769 100644 --- a/lib/render.js +++ b/lib/render.js @@ -142,7 +142,7 @@ function renderVideo(videoshow, options, forwardEvent, cb) { subtitleOptions.push(key + '=' + '\'' + params.subtitleOptions[key] + '\''); }); } - console.log({ subtitleOptions }); + options.push(`-vf subtitles=` + subtitleOptions.join(':')) } @@ -150,8 +150,6 @@ function renderVideo(videoshow, options, forwardEvent, cb) { options.push("-pix_fmt " + videoOptions.pixelFormat); } - console.log({ options }); - video .outputOptions(options) .on('error', clean(end))