From c826f34a45757b324a20f71665b44ed10e6953b5 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 6 Aug 2021 10:39:40 +0200 Subject: Limit live bitrate --- .../lib/transcoding/video-transcoding-profiles.ts | 33 ++++++++-------------- 1 file changed, 11 insertions(+), 22 deletions(-) (limited to 'server/lib/transcoding') diff --git a/server/lib/transcoding/video-transcoding-profiles.ts b/server/lib/transcoding/video-transcoding-profiles.ts index c5ea72a5f..2309f38d4 100644 --- a/server/lib/transcoding/video-transcoding-profiles.ts +++ b/server/lib/transcoding/video-transcoding-profiles.ts @@ -1,14 +1,7 @@ import { logger } from '@server/helpers/logger' import { AvailableEncoders, EncoderOptionsBuilder, getTargetBitrate, VideoResolution } from '../../../shared/models/videos' import { buildStreamSuffix, resetSupportedEncoders } from '../../helpers/ffmpeg-utils' -import { - canDoQuickAudioTranscode, - ffprobePromise, - getAudioStream, - getMaxAudioBitrate, - getVideoFileBitrate, - getVideoStreamFromFile -} from '../../helpers/ffprobe-utils' +import { canDoQuickAudioTranscode, ffprobePromise, getAudioStream, getMaxAudioBitrate } from '../../helpers/ffprobe-utils' import { VIDEO_TRANSCODING_FPS } from '../../initializers/constants' /** @@ -22,8 +15,8 @@ import { VIDEO_TRANSCODING_FPS } from '../../initializers/constants' // * https://slhck.info/video/2017/03/01/rate-control.html // * https://trac.ffmpeg.org/wiki/Limiting%20the%20output%20bitrate -const defaultX264VODOptionsBuilder: EncoderOptionsBuilder = async ({ input, resolution, fps }) => { - const targetBitrate = await buildTargetBitrate({ input, resolution, fps }) +const defaultX264VODOptionsBuilder: EncoderOptionsBuilder = async ({ inputBitrate, resolution, fps }) => { + const targetBitrate = buildTargetBitrate({ inputBitrate, resolution, fps }) if (!targetBitrate) return { outputOptions: [ ] } return { @@ -36,8 +29,8 @@ const defaultX264VODOptionsBuilder: EncoderOptionsBuilder = async ({ input, reso } } -const defaultX264LiveOptionsBuilder: EncoderOptionsBuilder = async ({ resolution, fps, streamNum }) => { - const targetBitrate = getTargetBitrate(resolution, fps, VIDEO_TRANSCODING_FPS) +const defaultX264LiveOptionsBuilder: EncoderOptionsBuilder = async ({ resolution, fps, inputBitrate, streamNum }) => { + const targetBitrate = buildTargetBitrate({ inputBitrate, resolution, fps }) return { outputOptions: [ @@ -237,20 +230,16 @@ export { } // --------------------------------------------------------------------------- -async function buildTargetBitrate (options: { - input: string + +function buildTargetBitrate (options: { + inputBitrate: number resolution: VideoResolution fps: number }) { - const { input, resolution, fps } = options - const probe = await ffprobePromise(input) - - const videoStream = await getVideoStreamFromFile(input, probe) - if (!videoStream) return undefined + const { inputBitrate, resolution, fps } = options const targetBitrate = getTargetBitrate(resolution, fps, VIDEO_TRANSCODING_FPS) + if (!inputBitrate) return targetBitrate - // Don't transcode to an higher bitrate than the original file - const fileBitrate = await getVideoFileBitrate(input, probe) - return Math.min(targetBitrate, fileBitrate) + return Math.min(targetBitrate, inputBitrate) } -- cgit v1.2.3