From 21be77cc28be60f6e6a76d479846b1683f2ee410 Mon Sep 17 00:00:00 2001 From: Mikael Finstad Date: Thu, 29 Oct 2020 13:34:54 +0100 Subject: [PATCH] Add version check #34 --- ffmpeg.js | 20 ++++++++++++++++++++ index.js | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/ffmpeg.js b/ffmpeg.js index 1c4815a..82628cb 100644 --- a/ffmpeg.js +++ b/ffmpeg.js @@ -1,4 +1,7 @@ const fs = require('fs-extra'); +const execa = require('execa'); +const assert = require('assert'); +const gte = require('semver/functions/gte'); const getFfmpegCommonArgs = ({ enableFfmpegLog }) => (enableFfmpegLog ? [] : ['-hide_banner', '-loglevel', 'error']); @@ -11,9 +14,26 @@ async function createConcatFile(segments, concatFilePath) { await fs.writeFile(concatFilePath, segments.map((seg) => `file '${seg.replace(/'/g, "'\\''")}'`).join('\n')); } +async function testFf(exePath, name) { + const requiredVersion = '4.3.1'; + + try { + const { stdout } = await execa(exePath, ['-version']); + const firstLine = stdout.split('\n')[0]; + const match = firstLine.match(`${name} version ([0-9.]+)`); + assert(match, 'Unknown version string'); + const versionStr = match[1]; + console.log(`${name} version ${versionStr}`); + assert(gte(versionStr, requiredVersion), 'Version is outdated'); + } catch (err) { + console.error(`WARNING: ${name} issue:`, err.message); + } +} + module.exports = { getFfmpegCommonArgs, getCutFromArgs, getCutToArgs, createConcatFile, + testFf, }; diff --git a/index.js b/index.js index 1542b99..21a78d7 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,7 @@ const JSON5 = require('json5'); const fs = require('fs-extra'); const { nanoid } = require('nanoid'); +const { testFf } = require('./ffmpeg'); const { parseFps, multipleOf2 } = require('./util'); const { createFabricCanvas, rgbaToFabricImage, getNodeCanvasFromFabricCanvas } = require('./sources/fabric'); const { createFrameSource } = require('./sources/frameSource'); @@ -43,6 +44,9 @@ const Editly = async (config = {}) => { ffprobePath = 'ffprobe', } = config; + await testFf(ffmpegPath, 'ffmpeg'); + await testFf(ffprobePath, 'ffprobe'); + const isGif = outPath.toLowerCase().endsWith('.gif'); if (backgroundAudioPath) await assertFileValid(backgroundAudioPath, allowRemoteRequests);