]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/lib/video-transcoding-profiles.ts
Upgrade sequelize to v6
[github/Chocobozzz/PeerTube.git] / server / lib / video-transcoding-profiles.ts
index 03c26f236bda0654ff62959fbf822e80bb4d4551..338f4de4a28e7244595dc481488fe5917f1c6c5d 100644 (file)
@@ -1,5 +1,5 @@
 import { logger } from '@server/helpers/logger'
-import { getTargetBitrate } from '../../shared/models/videos'
+import { getTargetBitrate, VideoResolution } from '../../shared/models/videos'
 import { AvailableEncoders, buildStreamSuffix, EncoderOptionsBuilder } from '../helpers/ffmpeg-utils'
 import {
   canDoQuickAudioTranscode,
@@ -23,21 +23,12 @@ import { VIDEO_TRANSCODING_FPS } from '../initializers/constants'
 //  * https://trac.ffmpeg.org/wiki/Limiting%20the%20output%20bitrate
 
 const defaultX264VODOptionsBuilder: EncoderOptionsBuilder = async ({ input, resolution, fps }) => {
-  let targetBitrate = getTargetBitrate(resolution, fps, VIDEO_TRANSCODING_FPS)
-
-  const probe = await ffprobePromise(input)
-
-  const videoStream = await getVideoStreamFromFile(input, probe)
-  if (!videoStream) {
-    return { outputOptions: [ ] }
-  }
-
-  // Don't transcode to an higher bitrate than the original file
-  const fileBitrate = await getVideoFileBitrate(input, probe)
-  targetBitrate = Math.min(targetBitrate, fileBitrate)
+  const targetBitrate = await buildTargetBitrate({ input, resolution, fps })
+  if (!targetBitrate) return { outputOptions: [ ] }
 
   return {
     outputOptions: [
+      `-r ${fps}`,
       `-maxrate ${targetBitrate}`,
       `-bufsize ${targetBitrate * 2}`
     ]
@@ -49,6 +40,7 @@ const defaultX264LiveOptionsBuilder: EncoderOptionsBuilder = async ({ resolution
 
   return {
     outputOptions: [
+      `${buildStreamSuffix('-r:v', streamNum)} ${fps}`,
       `${buildStreamSuffix('-b:v', streamNum)} ${targetBitrate}`,
       `-maxrate ${targetBitrate}`,
       `-bufsize ${targetBitrate * 2}`
@@ -115,3 +107,20 @@ export {
 }
 
 // ---------------------------------------------------------------------------
+async function buildTargetBitrate (options: {
+  input: string
+  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 targetBitrate = getTargetBitrate(resolution, fps, VIDEO_TRANSCODING_FPS)
+
+  // Don't transcode to an higher bitrate than the original file
+  const fileBitrate = await getVideoFileBitrate(input, probe)
+  return Math.min(targetBitrate, fileBitrate)
+}