From 187822421489ae811d118d15aa2d8361183250c2 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 10 Jul 2020 14:54:11 +0200 Subject: Handle webp images from youtube-dl --- server/helpers/ffmpeg-utils.ts | 18 ++++++++++++++++++ server/helpers/image-utils.ts | 21 ++++++++++++++++----- 2 files changed, 34 insertions(+), 5 deletions(-) (limited to 'server/helpers') diff --git a/server/helpers/ffmpeg-utils.ts b/server/helpers/ffmpeg-utils.ts index 557fb5e3a..0cfc51775 100644 --- a/server/helpers/ffmpeg-utils.ts +++ b/server/helpers/ffmpeg-utils.ts @@ -338,11 +338,29 @@ function getClosestFramerateStandard (fps: number, type: 'HD_STANDARD' | 'STANDA .sort((a, b) => fps % a - fps % b)[0] } +function convertWebPToJPG (path: string, destination: string): Promise { + return new Promise(async (res, rej) => { + try { + const command = ffmpeg(path).output(destination) + + command.on('error', (err, stdout, stderr) => { + logger.error('Error in ffmpeg webp convert process.', { stdout, stderr }) + return rej(err) + }) + .on('end', () => res()) + .run() + } catch (err) { + return rej(err) + } + }) +} + // --------------------------------------------------------------------------- export { getVideoStreamCodec, getAudioStreamCodec, + convertWebPToJPG, getVideoStreamSize, getVideoFileResolution, getMetadataFromFile, diff --git a/server/helpers/image-utils.ts b/server/helpers/image-utils.ts index b1c7d3d47..f2f6a004f 100644 --- a/server/helpers/image-utils.ts +++ b/server/helpers/image-utils.ts @@ -1,6 +1,7 @@ -import 'multer' -import { readFile, remove } from 'fs-extra' +import { remove, rename } from 'fs-extra' +import { convertWebPToJPG } from './ffmpeg-utils' import { logger } from './logger' + const Jimp = require('jimp') async function processImage ( @@ -15,9 +16,19 @@ async function processImage ( logger.debug('Processing image %s to %s.', path, destination) - // Avoid sharp cache - const buf = await readFile(path) - const jimpInstance = await Jimp.read(buf) + let jimpInstance: any + + try { + jimpInstance = await Jimp.read(path) + } catch (err) { + logger.debug('Cannot read %s with jimp. Try to convert the image using ffmpeg first.', { err }) + + const newName = path + '.jpg' + await convertWebPToJPG(path, newName) + await rename(newName, path) + + jimpInstance = await Jimp.read(path) + } await remove(destination) -- cgit v1.2.3