From 6b67897e2eab96978daee40aeaf716835856d65d Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 24 Nov 2020 16:29:39 +0100 Subject: Add transcoding module comments --- server/lib/video-transcoding-profiles.ts | 35 +++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'server/lib/video-transcoding-profiles.ts') diff --git a/server/lib/video-transcoding-profiles.ts b/server/lib/video-transcoding-profiles.ts index 91a5c65f2..03c26f236 100644 --- a/server/lib/video-transcoding-profiles.ts +++ b/server/lib/video-transcoding-profiles.ts @@ -1,11 +1,22 @@ +import { logger } from '@server/helpers/logger' import { getTargetBitrate } from '../../shared/models/videos' import { AvailableEncoders, buildStreamSuffix, EncoderOptionsBuilder } from '../helpers/ffmpeg-utils' -import { ffprobePromise, getAudioStream, getMaxAudioBitrate, getVideoFileBitrate, getVideoStreamFromFile } from '../helpers/ffprobe-utils' +import { + canDoQuickAudioTranscode, + ffprobePromise, + getAudioStream, + getMaxAudioBitrate, + getVideoFileBitrate, + getVideoStreamFromFile +} from '../helpers/ffprobe-utils' import { VIDEO_TRANSCODING_FPS } from '../initializers/constants' -// --------------------------------------------------------------------------- -// Available encoders profiles -// --------------------------------------------------------------------------- +/** + * + * Available encoders and profiles for the transcoding jobs + * These functions are used by ffmpeg-utils that will get the encoders and options depending on the chosen profile + * + */ // Resources: // * https://slhck.info/video/2017/03/01/rate-control.html @@ -27,7 +38,8 @@ const defaultX264VODOptionsBuilder: EncoderOptionsBuilder = async ({ input, reso return { outputOptions: [ - `-maxrate ${targetBitrate}`, `-bufsize ${targetBitrate * 2}` + `-maxrate ${targetBitrate}`, + `-bufsize ${targetBitrate * 2}` ] } } @@ -45,7 +57,14 @@ const defaultX264LiveOptionsBuilder: EncoderOptionsBuilder = async ({ resolution } const defaultAACOptionsBuilder: EncoderOptionsBuilder = async ({ input, streamNum }) => { - const parsedAudio = await getAudioStream(input) + const probe = await ffprobePromise(input) + + if (await canDoQuickAudioTranscode(input, probe)) { + logger.debug('Copy audio stream %s by AAC encoder.', input) + return { copy: true, outputOptions: [] } + } + + const parsedAudio = await getAudioStream(input, probe) // We try to reduce the ceiling bitrate by making rough matches of bitrates // Of course this is far from perfect, but it might save some space in the end @@ -54,11 +73,13 @@ const defaultAACOptionsBuilder: EncoderOptionsBuilder = async ({ input, streamNu const bitrate = getMaxAudioBitrate(audioCodecName, parsedAudio.bitrate) + logger.debug('Calculating audio bitrate of %s by AAC encoder.', input, { bitrate: parsedAudio.bitrate, audioCodecName }) + if (bitrate !== undefined && bitrate !== -1) { return { outputOptions: [ buildStreamSuffix('-b:a', streamNum), bitrate + 'k' ] } } - return { copy: true, outputOptions: [] } + return { outputOptions: [ ] } } const defaultLibFDKAACVODOptionsBuilder: EncoderOptionsBuilder = ({ streamNum }) => { -- cgit v1.2.3