From e82ead49e3aa62fcc8cc69cc0636165d73f4aa3d Mon Sep 17 00:00:00 2001 From: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Tue, 12 Mar 2024 21:50:46 +0900 Subject: [PATCH] =?UTF-8?q?enhance(backend):=20=E3=83=93=E3=83=87=E3=82=AA?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AB=E3=83=93=E3=83=87?= =?UTF-8?q?=E3=82=AA=E3=83=88=E3=83=A9=E3=83=83=E3=82=AF=E3=81=8C=E3=81=82?= =?UTF-8?q?=E3=82=8B=E3=81=8B=E3=82=92=E7=A2=BA=E8=AA=8D=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 23d38a2d6492a2b24e9b2c031d66c3e8a5d382ef) --- packages/backend/src/core/FileInfoService.ts | 41 +++++++++++++++++++ packages/backend/test/unit/FileInfoService.ts | 3 -- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/packages/backend/src/core/FileInfoService.ts b/packages/backend/src/core/FileInfoService.ts index b8babcb3a7..82b731c609 100644 --- a/packages/backend/src/core/FileInfoService.ts +++ b/packages/backend/src/core/FileInfoService.ts @@ -317,6 +317,27 @@ export class FileInfoService { return mime; } + /** + * ビデオファイルにビデオトラックがあるかどうかチェック + * (ない場合:m4a, webmなど) + */ + @bindThis + private hasVideoTrackOnVideoFile(path: string): Promise { + return new Promise((resolve, reject) => { + try { + FFmpeg.ffprobe(path, (err, metadata) => { + if (err) { + resolve(true); + return; + } + resolve(metadata.streams.some((stream) => stream.codec_type === 'video')); + }); + } catch (e) { + resolve(true); + } + }); + } + /** * Detect MIME Type and extension */ @@ -339,6 +360,26 @@ export class FileInfoService { return TYPE_SVG; } + if (type.mime.startsWith('video') && !(await this.hasVideoTrackOnVideoFile(path))) { + const newMime = `audio/${type.mime.split('/')[1]}`; + if (newMime === 'audio/mp4') { + return { + mime: 'audio/aac', + ext: 'm4a', + }; + } + if (newMime === 'audio/webm') { + return { + mime: 'audio/webm', + ext: 'webm', + }; + } + return { + mime: newMime, + ext: type.ext, + }; + } + return { mime: this.fixMime(type.mime), ext: type.ext, diff --git a/packages/backend/test/unit/FileInfoService.ts b/packages/backend/test/unit/FileInfoService.ts index 2eec80d763..a33a6024f4 100644 --- a/packages/backend/test/unit/FileInfoService.ts +++ b/packages/backend/test/unit/FileInfoService.ts @@ -323,8 +323,6 @@ describe('FileInfoService', () => { }); }); - /* - * video/webmとして検出されてしまう test('WEBM AUDIO', async () => { const path = `${resources}/kick_gaba7.webm`; const info = await fileInfoService.getFileInfo(path, { skipSensitiveDetection: true }) as any; @@ -344,6 +342,5 @@ describe('FileInfoService', () => { }, }); }); - */ }); });