From 7a86ad95b4a9f321a05cd90fbc0039d47a7def73 Mon Sep 17 00:00:00 2001 From: waveringana Date: Tue, 31 Oct 2023 13:13:22 -0400 Subject: [PATCH] move ffprobe to ffmpeg.ts --- app/lib/ffmpeg.ts | 11 ++++++++++- app/routes/index.ts | 21 +++++++-------------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/app/lib/ffmpeg.ts b/app/lib/ffmpeg.ts index 8e09371..6c5dad3 100644 --- a/app/lib/ffmpeg.ts +++ b/app/lib/ffmpeg.ts @@ -1,6 +1,6 @@ import { extension, videoExtensions, imageExtensions } from "./lib"; -import ffmpeg from 'fluent-ffmpeg'; +import ffmpeg, { FfprobeData, ffprobe } from 'fluent-ffmpeg'; import ffmpegInstaller from '@ffmpeg-installer/ffmpeg'; import ffprobeInstaller from '@ffprobe-installer/ffprobe'; import which from 'which'; @@ -173,4 +173,13 @@ export const ffmpegConvert = (path: string, filename: string, extension: string) .on("error", (e) => reject(e)) .run(); }); +} + +export const ffProbe = (path: string, filename: string, extension: string) => { + return new Promise((resolve, reject) => { + ffprobe(path, (err, data) => { + if (err) reject (err); + resolve(data); + }); + }); } \ No newline at end of file diff --git a/app/routes/index.ts b/app/routes/index.ts index fc19091..180d38d 100644 --- a/app/routes/index.ts +++ b/app/routes/index.ts @@ -1,13 +1,9 @@ import type {RequestHandler as Middleware, Request, Response, NextFunction} from "express"; import multer from "multer"; import express from "express"; -import ffmpeg from "fluent-ffmpeg"; import imageProbe from "probe-image-size"; -import ffmpegpath from "@ffmpeg-installer/ffmpeg"; -import ffprobepath from "@ffprobe-installer/ffprobe"; -ffmpeg.setFfmpegPath(ffmpegpath.path); -ffmpeg.setFfprobePath(ffprobepath.path); +import {ffProbe} from "../lib/ffmpeg"; import fs from "fs"; @@ -57,15 +53,12 @@ router.get("/gifv/:file", async (req: Request, res: Response, next: NextFunction const nameAndExtension = extension(`uploads/${req.params.file}`); if (nameAndExtension[1] == ".mp4" || nameAndExtension[1] == ".mov" || nameAndExtension[1] == ".webm" || nameAndExtension[1] == ".gif") { - ffmpeg() - .input(`uploads/${req.params.file}`) - .inputFormat(nameAndExtension[1].substring(1)) - .ffprobe((err: Error, data: ffmpeg.FfprobeData) => { - if (err) return next(err); - width = data.streams[0].width; - height = data.streams[0].height; - return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); - }); + let imageData = ffProbe(`uploads/${req.params.file}`, nameAndExtension[0], nameAndExtension[1]); + + width = (await imageData).streams[0].width; + height = (await imageData).streams[0].height; + + return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: width, height: height }); } else { const imageData = await imageProbe(fs.createReadStream(`uploads/${req.params.file}`)); return res.render("gifv", { url: url, host: `${req.protocol}://${req.get("host")}`, width: imageData.width, height: imageData.height });