From 92e0f42e8ce5f1ab5e4023900b8194627231a11b Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 11 Dec 2019 09:51:17 +0100 Subject: [PATCH] Don't use the max quality file when transcoding to a new resolution --- server/lib/video-transcoding.ts | 2 +- server/models/video/video.ts | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/server/lib/video-transcoding.ts b/server/lib/video-transcoding.ts index 03bc21559..4fd1d62a9 100644 --- a/server/lib/video-transcoding.ts +++ b/server/lib/video-transcoding.ts @@ -105,7 +105,7 @@ async function mergeAudioVideofile (video: MVideoWithAllFiles, resolution: Video const transcodeDirectory = CONFIG.STORAGE.TMP_DIR const newExtname = '.mp4' - const inputVideoFile = video.getMaxQualityFile() + const inputVideoFile = video.getMinQualityFile() const audioInputPath = getVideoFilePath(video, inputVideoFile) const videoTranscodedPath = join(transcodeDirectory, video.id + '-transcoded' + newExtname) diff --git a/server/models/video/video.ts b/server/models/video/video.ts index 73e0d2345..af6fae0b6 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts @@ -1,5 +1,5 @@ import * as Bluebird from 'bluebird' -import { maxBy } from 'lodash' +import { maxBy, minBy } from 'lodash' import { join } from 'path' import { CountOptions, @@ -1802,9 +1802,9 @@ export class VideoModel extends Model { this.VideoChannel.Account.isBlocked() } - getMaxQualityFile (this: T): MVideoFileVideo | MVideoFileStreamingPlaylistVideo { + getQualityFileBy (this: T, fun: (files: MVideoFile[], it: (file: MVideoFile) => number) => MVideoFile) { if (Array.isArray(this.VideoFiles) && this.VideoFiles.length !== 0) { - const file = maxBy(this.VideoFiles, file => file.resolution) + const file = fun(this.VideoFiles, file => file.resolution) return Object.assign(file, { Video: this }) } @@ -1813,13 +1813,21 @@ export class VideoModel extends Model { if (Array.isArray(this.VideoStreamingPlaylists) && this.VideoStreamingPlaylists.length !== 0) { const streamingPlaylistWithVideo = Object.assign(this.VideoStreamingPlaylists[0], { Video: this }) - const file = maxBy(streamingPlaylistWithVideo.VideoFiles, file => file.resolution) + const file = fun(streamingPlaylistWithVideo.VideoFiles, file => file.resolution) return Object.assign(file, { VideoStreamingPlaylist: streamingPlaylistWithVideo }) } return undefined } + getMaxQualityFile (this: T): MVideoFileVideo | MVideoFileStreamingPlaylistVideo { + return this.getQualityFileBy(maxBy) + } + + getMinQualityFile (this: T): MVideoFileVideo | MVideoFileStreamingPlaylistVideo { + return this.getQualityFileBy(minBy) + } + getWebTorrentFile (this: T, resolution: number): MVideoFileVideo { if (Array.isArray(this.VideoFiles) === false) return undefined