1
0
Fork 0
mirror of https://github.com/Chocobozzz/PeerTube.git synced 2025-10-04 10:19:35 +02:00

Add option to not transcode original resolution

This commit is contained in:
Chocobozzz 2022-08-05 10:36:19 +02:00
parent 7e0f50d6e0
commit 84cae54e7a
No known key found for this signature in database
GPG key ID: 583A612D890159BE
26 changed files with 303 additions and 87 deletions

View file

@ -1,5 +1,6 @@
import { Job } from 'bull'
import { TranscodeVODOptionsType } from '@server/helpers/ffmpeg'
import { Hooks } from '@server/lib/plugins/hooks'
import { addTranscodingJob, getTranscodingJobPriority } from '@server/lib/video'
import { VideoPathManager } from '@server/lib/video-path-manager'
import { moveToFailedTranscodingState, moveToNextState } from '@server/lib/video-state'
@ -16,7 +17,7 @@ import {
VideoTranscodingPayload
} from '@shared/models'
import { retryTransactionWrapper } from '../../../helpers/database-utils'
import { computeLowerResolutionsToTranscode } from '../../../helpers/ffmpeg'
import { computeResolutionsToTranscode } from '../../../helpers/ffmpeg'
import { logger, loggerTagsFactory } from '../../../helpers/logger'
import { CONFIG } from '../../../initializers/config'
import { VideoModel } from '../../../models/video/video'
@ -26,7 +27,6 @@ import {
optimizeOriginalVideofile,
transcodeNewWebTorrentResolution
} from '../../transcoding/transcoding'
import { Hooks } from '@server/lib/plugins/hooks'
type HandlerFunction = (job: Job, payload: VideoTranscodingPayload, video: MVideoFullLight, user: MUser) => Promise<void>
@ -99,7 +99,6 @@ async function handleHLSJob (job: Job, payload: HLSTranscodingPayload, video: MV
videoInputPath,
resolution: payload.resolution,
copyCodecs: payload.copyCodecs,
isPortraitMode: payload.isPortraitMode || false,
job
})
})
@ -117,7 +116,7 @@ async function handleNewWebTorrentResolutionJob (
) {
logger.info('Handling WebTorrent transcoding job for %s.', video.uuid, lTags(video.uuid))
await transcodeNewWebTorrentResolution(video, payload.resolution, payload.isPortraitMode || false, job)
await transcodeNewWebTorrentResolution({ video, resolution: payload.resolution, job })
logger.info('WebTorrent transcoding job for %s ended.', video.uuid, lTags(video.uuid))
@ -127,7 +126,7 @@ async function handleNewWebTorrentResolutionJob (
async function handleWebTorrentMergeAudioJob (job: Job, payload: MergeAudioTranscodingPayload, video: MVideoFullLight, user: MUserId) {
logger.info('Handling merge audio transcoding job for %s.', video.uuid, lTags(video.uuid))
await mergeAudioVideofile(video, payload.resolution, job)
await mergeAudioVideofile({ video, resolution: payload.resolution, job })
logger.info('Merge audio transcoding job for %s ended.', video.uuid, lTags(video.uuid))
@ -137,7 +136,7 @@ async function handleWebTorrentMergeAudioJob (job: Job, payload: MergeAudioTrans
async function handleWebTorrentOptimizeJob (job: Job, payload: OptimizeTranscodingPayload, video: MVideoFullLight, user: MUserId) {
logger.info('Handling optimize transcoding job for %s.', video.uuid, lTags(video.uuid))
const { transcodeType } = await optimizeOriginalVideofile(video, video.getMaxQualityFile(), job)
const { transcodeType } = await optimizeOriginalVideofile({ video, inputVideoFile: video.getMaxQualityFile(), job })
logger.info('Optimize transcoding job for %s ended.', video.uuid, lTags(video.uuid))
@ -161,7 +160,6 @@ async function onHlsPlaylistGeneration (video: MVideoFullLight, user: MUser, pay
video,
user,
videoFileResolution: payload.resolution,
isPortraitMode: payload.isPortraitMode,
hasAudio: payload.hasAudio,
isNewVideo: payload.isNewVideo ?? true,
type: 'hls'
@ -178,7 +176,7 @@ async function onVideoFirstWebTorrentTranscoding (
transcodeType: TranscodeVODOptionsType,
user: MUserId
) {
const { resolution, isPortraitMode, audioStream } = await videoArg.probeMaxQualityFile()
const { resolution, audioStream } = await videoArg.probeMaxQualityFile()
// Maybe the video changed in database, refresh it
const videoDatabase = await VideoModel.loadFull(videoArg.uuid)
@ -189,7 +187,6 @@ async function onVideoFirstWebTorrentTranscoding (
const originalFileHLSPayload = {
...payload,
isPortraitMode,
hasAudio: !!audioStream,
resolution: videoDatabase.getMaxQualityFile().resolution,
// If we quick transcoded original file, force transcoding for HLS to avoid some weird playback issues
@ -202,7 +199,6 @@ async function onVideoFirstWebTorrentTranscoding (
user,
videoFileResolution: resolution,
hasAudio: !!audioStream,
isPortraitMode,
type: 'webtorrent',
isNewVideo: payload.isNewVideo ?? true
})
@ -235,7 +231,6 @@ async function createHlsJobIfEnabled (user: MUserId, payload: {
videoUUID: string
resolution: number
hasAudio: boolean
isPortraitMode?: boolean
copyCodecs: boolean
isMaxQuality: boolean
isNewVideo?: boolean
@ -250,7 +245,7 @@ async function createHlsJobIfEnabled (user: MUserId, payload: {
type: 'new-resolution-to-hls',
autoDeleteWebTorrentIfNeeded: true,
...pick(payload, [ 'videoUUID', 'resolution', 'isPortraitMode', 'copyCodecs', 'isMaxQuality', 'isNewVideo', 'hasAudio' ])
...pick(payload, [ 'videoUUID', 'resolution', 'copyCodecs', 'isMaxQuality', 'isNewVideo', 'hasAudio' ])
}
await addTranscodingJob(hlsTranscodingPayload, jobOptions)
@ -262,16 +257,15 @@ async function createLowerResolutionsJobs (options: {
video: MVideoFullLight
user: MUserId
videoFileResolution: number
isPortraitMode: boolean
hasAudio: boolean
isNewVideo: boolean
type: 'hls' | 'webtorrent'
}) {
const { video, user, videoFileResolution, isPortraitMode, isNewVideo, hasAudio, type } = options
const { video, user, videoFileResolution, isNewVideo, hasAudio, type } = options
// Create transcoding jobs if there are enabled resolutions
const resolutionsEnabled = await Hooks.wrapObject(
computeLowerResolutionsToTranscode(videoFileResolution, 'vod'),
computeResolutionsToTranscode({ inputResolution: videoFileResolution, type: 'vod', includeInputResolution: false }),
'filter:transcoding.auto.lower-resolutions-to-transcode.result',
options
)
@ -289,7 +283,6 @@ async function createLowerResolutionsJobs (options: {
type: 'new-resolution-to-webtorrent',
videoUUID: video.uuid,
resolution,
isPortraitMode,
hasAudio,
createHLSIfNeeded: true,
isNewVideo
@ -303,7 +296,6 @@ async function createLowerResolutionsJobs (options: {
type: 'new-resolution-to-hls',
videoUUID: video.uuid,
resolution,
isPortraitMode,
hasAudio,
copyCodecs: false,
isMaxQuality: false,