From efafa02f6820a31df5dded620cf0f6ef30454e0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=81=8B=E3=81=A3=E3=81=93=E3=81=8B=E3=82=8A?= <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sun, 31 Mar 2024 12:43:39 +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=20(#13568)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * enhance(backend): ビデオファイルにビデオトラックがあるかを確認するように (cherry picked from commit 23d38a2d6492a2b24e9b2c031d66c3e8a5d382ef) * Update Changelog * Update Changelog * Revert "Update Changelog" This reverts commit 93fd996932b87ef550c38b48bd0678060f3ed1af. * fix(test) ffmpegをインストールするように * 入れる方間違えた * fix test * 拡張子変わらなかったのでそのまま行く * ログを出力するように * msg * remove unused import * add log * attempt to fix test error * Revert "attempt to fix test error" This reverts commit d9d6524cadd655e6d8e9398b26fdfef332f30f4d. * Update FileInfoService.ts * oggも検査の対象にする --- .github/workflows/test-backend.yml | 2 + CHANGELOG.md | 1 + packages/backend/src/core/FileInfoService.ts | 49 +++++++++++++++++- .../backend/test/resources/kick_gaba7.m4a | Bin 0 -> 9817 bytes packages/backend/test/unit/FileInfoService.ts | 27 ++++++++-- 5 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 packages/backend/test/resources/kick_gaba7.m4a diff --git a/.github/workflows/test-backend.yml b/.github/workflows/test-backend.yml index 49a6a39805..a803db4508 100644 --- a/.github/workflows/test-backend.yml +++ b/.github/workflows/test-backend.yml @@ -45,6 +45,8 @@ jobs: with: version: 8 run_install: false + - name: Install FFmpeg + uses: FedericoCarboni/setup-ffmpeg@v3 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v4.0.2 with: diff --git a/CHANGELOG.md b/CHANGELOG.md index 390639bd69..f6b9cf0939 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -41,6 +41,7 @@ (Cherry-picked from https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/440) - Fix: エンドポイント`notes/translate`のエラーを改善 - Fix: CleanRemoteFilesProcessorService report progress from 100% (#13632) +- Fix: 一部の音声ファイルが映像ファイルとして扱われる問題を修正 ## 2024.3.1 diff --git a/packages/backend/src/core/FileInfoService.ts b/packages/backend/src/core/FileInfoService.ts index b8babcb3a7..169285f033 100644 --- a/packages/backend/src/core/FileInfoService.ts +++ b/packages/backend/src/core/FileInfoService.ts @@ -14,11 +14,12 @@ import FFmpeg from 'fluent-ffmpeg'; import isSvg from 'is-svg'; import probeImageSize from 'probe-image-size'; import { type predictionType } from 'nsfwjs'; -import sharp from 'sharp'; import { sharpBmp } from '@misskey-dev/sharp-read-bmp'; import { encode } from 'blurhash'; import { createTempDir } from '@/misc/create-temp.js'; import { AiService } from '@/core/AiService.js'; +import { LoggerService } from '@/core/LoggerService.js'; +import type Logger from '@/logger.js'; import { bindThis } from '@/decorators.js'; export type FileInfo = { @@ -49,9 +50,13 @@ const TYPE_SVG = { @Injectable() export class FileInfoService { + private logger: Logger; + constructor( private aiService: AiService, + private loggerService: LoggerService, ) { + this.logger = this.loggerService.getLogger('file-info'); } /** @@ -317,6 +322,34 @@ export class FileInfoService { return mime; } + /** + * ビデオファイルにビデオトラックがあるかどうかチェック + * (ない場合:m4a, webmなど) + * + * @param path ファイルパス + * @returns ビデオトラックがあるかどうか(エラー発生時は常に`true`を返す) + */ + @bindThis + private hasVideoTrackOnVideoFile(path: string): Promise { + const sublogger = this.logger.createSubLogger('ffprobe'); + sublogger.info(`Checking the video file. File path: ${path}`); + return new Promise((resolve) => { + try { + FFmpeg.ffprobe(path, (err, metadata) => { + if (err) { + sublogger.warn(`Could not check the video file. Returns true. File path: ${path}`, err); + resolve(true); + return; + } + resolve(metadata.streams.some((stream) => stream.codec_type === 'video')); + }); + } catch (err) { + sublogger.warn(`Could not check the video file. Returns true. File path: ${path}`, err as Error); + resolve(true); + } + }); + } + /** * Detect MIME Type and extension */ @@ -339,6 +372,20 @@ export class FileInfoService { return TYPE_SVG; } + if ((type.mime.startsWith('video') || type.mime === 'application/ogg') && !(await this.hasVideoTrackOnVideoFile(path))) { + const newMime = `audio/${type.mime.split('/')[1]}`; + if (newMime === 'audio/mp4') { + return { + mime: 'audio/mp4', + ext: 'm4a', + }; + } + return { + mime: newMime, + ext: type.ext, + }; + } + return { mime: this.fixMime(type.mime), ext: type.ext, diff --git a/packages/backend/test/resources/kick_gaba7.m4a b/packages/backend/test/resources/kick_gaba7.m4a new file mode 100644 index 0000000000000000000000000000000000000000..321df6349f016358b24b7bac2df8273ec5c448e5 GIT binary patch literal 9817 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 d`5 { ], providers: [ AiService, + LoggerService, FileInfoService, ], }) @@ -323,8 +325,26 @@ describe('FileInfoService', () => { }); }); - /* - * video/webmとして検出されてしまう + test('MPEG-4 AUDIO (M4A)', async () => { + const path = `${resources}/kick_gaba7.m4a`; + const info = await fileInfoService.getFileInfo(path, { skipSensitiveDetection: true }) as any; + delete info.warnings; + delete info.blurhash; + delete info.sensitive; + delete info.porn; + delete info.width; + delete info.height; + delete info.orientation; + assert.deepStrictEqual(info, { + size: 9817, + md5: '74c9279a4abe98789565f1dc1a541a42', + type: { + mime: 'audio/mp4', + ext: 'm4a', + }, + }); + }); + test('WEBM AUDIO', async () => { const path = `${resources}/kick_gaba7.webm`; const info = await fileInfoService.getFileInfo(path, { skipSensitiveDetection: true }) as any; @@ -337,13 +357,12 @@ describe('FileInfoService', () => { delete info.orientation; assert.deepStrictEqual(info, { size: 8879, - md5: '3350083dec312419cfdc06c16413aca7', + md5: '53bc1adcb6acbbda67ff9bd484896438', type: { mime: 'audio/webm', ext: 'webm', }, }); }); - */ }); });