From 15a4c4f1f39571fd948a6055d332bc8e5b6d75d4 Mon Sep 17 00:00:00 2001 From: Rigel Kent Date: Wed, 23 Dec 2020 03:38:38 +0100 Subject: [PATCH] add script printing command to generate a resolution for a given file --- package.json | 1 + scripts/print-transcode-command.ts | 52 ++++++++++++++++++++++++++++++ server/helpers/ffmpeg-utils.ts | 34 ++++++++++--------- 3 files changed, 71 insertions(+), 16 deletions(-) create mode 100644 scripts/print-transcode-command.ts diff --git a/package.json b/package.json index ed4ac380a6f..8ba67b0d8ab 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "update-host": "node ./dist/scripts/update-host.js", "create-transcoding-job": "node ./dist/scripts/create-transcoding-job.js", "create-import-video-file-job": "node ./dist/scripts/create-import-video-file-job.js", + "print-transcode-command": "node ./dist/scripts/print-transcode-command.js", "test": "scripty", "help": "scripty", "generate-cli-doc": "scripty", diff --git a/scripts/print-transcode-command.ts b/scripts/print-transcode-command.ts new file mode 100644 index 00000000000..b75b711a4c7 --- /dev/null +++ b/scripts/print-transcode-command.ts @@ -0,0 +1,52 @@ +import { registerTSPaths } from '../server/helpers/register-ts-paths' +registerTSPaths() + +import * as program from 'commander' +import * as ffmpeg from 'fluent-ffmpeg' +import { availableEncoders } from '@server/lib/video-transcoding-profiles' +import { buildx264VODCommand, runCommand, TranscodeOptions } from '@server/helpers/ffmpeg-utils' +import { exit } from 'process' + +program + .arguments('') + .requiredOption('-r, --resolution [resolution]', 'video resolution') + .action((path, cmd) => { + if (cmd.resolution !== undefined && Number.isNaN(+cmd.resolution)) { + console.error('The resolution must be an integer (example: 1080).') + process.exit(-1) + } + + run(path, cmd) + .then(() => process.exit(0)) + .catch(err => { + console.error(err) + process.exit(-1) + }) + }) + .parse(process.argv) + +async function run (path: string, cmd: any) { + const options = { + type: 'video' as 'video', + inputPath: path, + outputPath: '/dev/null', + + availableEncoders, + profile: 'default', + + resolution: +cmd.resolution, + isPortraitMode: false + } as TranscodeOptions + + let command = ffmpeg(options.inputPath) + .output(options.outputPath) + + command = await buildx264VODCommand(command, options) + + command.on('start', (cmdline) => { + console.log(cmdline) + exit() + }) + + await runCommand(command) +} diff --git a/server/helpers/ffmpeg-utils.ts b/server/helpers/ffmpeg-utils.ts index bf6408d3e1c..1f5e8d8f6ff 100644 --- a/server/helpers/ffmpeg-utils.ts +++ b/server/helpers/ffmpeg-utils.ts @@ -311,22 +311,6 @@ function buildStreamSuffix (base: string, streamNum?: number) { return base } -// --------------------------------------------------------------------------- - -export { - getLiveTranscodingCommand, - getLiveMuxingCommand, - buildStreamSuffix, - convertWebPToJPG, - processGIF, - generateImageFromVideoFile, - TranscodeOptions, - TranscodeOptionsType, - transcode -} - -// --------------------------------------------------------------------------- - // --------------------------------------------------------------------------- // Default options // --------------------------------------------------------------------------- @@ -642,3 +626,21 @@ async function runCommand (command: ffmpeg.FfmpegCommand, onEnd?: Function) { command.run() }) } + +// --------------------------------------------------------------------------- + +export { + getLiveTranscodingCommand, + getLiveMuxingCommand, + buildStreamSuffix, + convertWebPToJPG, + processGIF, + generateImageFromVideoFile, + TranscodeOptions, + TranscodeOptionsType, + transcode, + runCommand, + + // builders + buildx264VODCommand +}