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:
parent
7e0f50d6e0
commit
84cae54e7a
26 changed files with 303 additions and 87 deletions
|
@ -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,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue