]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Move b frame strategy in transcoding profile
authorChocobozzz <me@florianbigard.com>
Tue, 14 Dec 2021 09:39:52 +0000 (10:39 +0100)
committerChocobozzz <me@florianbigard.com>
Tue, 14 Dec 2021 09:46:31 +0000 (10:46 +0100)
We may use a too high value for some encoders and it allows to specify
custom values/strategy

server/helpers/ffmpeg-utils.ts
server/lib/transcoding/video-transcoding-profiles.ts

index ab29d46913f02f76322ab401f2f296d53d4b400c..78ee5fa7f9a12f5f03f52cab8def28c9daab3731 100644 (file)
@@ -287,8 +287,8 @@ async function getLiveTranscodingCommand (options: {
       addDefaultEncoderParams({ command, encoder: builderResult.encoder, fps: resolutionFPS, streamNum: i })
 
       logger.debug(
-        'Apply ffmpeg live video params from %s using %s profile.', builderResult.encoder, profile, builderResult,
-        { fps: resolutionFPS, resolution, ...lTags() }
+        'Apply ffmpeg live video params from %s using %s profile.', builderResult.encoder, profile,
+        { builderResult, fps: resolutionFPS, resolution, ...lTags() }
       )
 
       command.outputOption(`${buildStreamSuffix('-c:v', i)} ${builderResult.encoder}`)
@@ -314,8 +314,8 @@ async function getLiveTranscodingCommand (options: {
       addDefaultEncoderParams({ command, encoder: builderResult.encoder, fps: resolutionFPS, streamNum: i })
 
       logger.debug(
-        'Apply ffmpeg live audio params from %s using %s profile.', builderResult.encoder, profile, builderResult,
-        { fps: resolutionFPS, resolution, ...lTags() }
+        'Apply ffmpeg live audio params from %s using %s profile.', builderResult.encoder, profile,
+        { builderResult, fps: resolutionFPS, resolution, ...lTags() }
       )
 
       command.outputOption(`${buildStreamSuffix('-c:a', i)} ${builderResult.encoder}`)
@@ -368,10 +368,6 @@ function addDefaultEncoderGlobalParams (options: {
   command.outputOption('-max_muxing_queue_size 1024')
          // strip all metadata
          .outputOption('-map_metadata -1')
-         // NOTE: b-strategy 1 - heuristic algorithm, 16 is optimal B-frames for it
-         .outputOption('-b_strategy 1')
-         // NOTE: Why 16: https://github.com/Chocobozzz/PeerTube/pull/774. b-strategy 2 -> B-frames<16
-         .outputOption('-bf 16')
          // allows import of source material with incompatible pixel formats (e.g. MJPEG video)
          .outputOption('-pix_fmt yuv420p')
 }
@@ -627,8 +623,8 @@ async function presetVideo (options: {
 
     logger.debug(
       'Apply ffmpeg params from %s for %s stream of input %s using %s profile.',
-      builderResult.encoder, streamType, input, profile, builderResult,
-      { resolution, fps, ...lTags() }
+      builderResult.encoder, streamType, input, profile,
+      { builderResult, resolution, fps, ...lTags() }
     )
 
     if (streamType === 'video') {
@@ -734,7 +730,7 @@ async function runCommand (options: {
     command.on('start', cmdline => { shellCommand = cmdline })
 
     command.on('error', (err, stdout, stderr) => {
-      if (silent !== true) logger.error('Error in ffmpeg.', { stdout, stderr, ...lTags() })
+      if (silent !== true) logger.error('Error in ffmpeg.', { stdout, stderr, shellCommand, ...lTags() })
 
       rej(err)
     })
index 34a364415efdcd62a49c65591a98b8421676d004..dcc8d4c5cdb87cf6612606a6fbf4d0d5aca8026b 100644 (file)
@@ -23,10 +23,9 @@ const defaultX264VODOptionsBuilder: EncoderOptionsBuilder = (options: EncoderOpt
 
   return {
     outputOptions: [
-      `-preset veryfast`,
-      `-r ${fps}`,
-      `-maxrate ${targetBitrate}`,
-      `-bufsize ${targetBitrate * 2}`
+      ...getCommonOutputOptions(targetBitrate),
+
+      `-r ${fps}`
     ]
   }
 }
@@ -38,11 +37,10 @@ const defaultX264LiveOptionsBuilder: EncoderOptionsBuilder = (options: EncoderOp
 
   return {
     outputOptions: [
-      `-preset veryfast`,
+      ...getCommonOutputOptions(targetBitrate),
+
       `${buildStreamSuffix('-r:v', streamNum)} ${fps}`,
-      `${buildStreamSuffix('-b:v', streamNum)} ${targetBitrate}`,
-      `-maxrate ${targetBitrate}`,
-      `-bufsize ${targetBitrate * 2}`
+      `${buildStreamSuffix('-b:v', streamNum)} ${targetBitrate}`
     ]
   }
 }
@@ -257,3 +255,16 @@ function capBitrate (inputBitrate: number, targetBitrate: number) {
 
   return Math.min(targetBitrate, inputBitrateWithMargin)
 }
+
+function getCommonOutputOptions (targetBitrate: number) {
+  return [
+    `-preset veryfast`,
+    `-maxrate ${targetBitrate}`,
+    `-bufsize ${targetBitrate * 2}`,
+
+    // NOTE: b-strategy 1 - heuristic algorithm, 16 is optimal B-frames for it
+    `-b_strategy 1`,
+    // NOTE: Why 16: https://github.com/Chocobozzz/PeerTube/pull/774. b-strategy 2 -> B-frames<16
+    `-bf 16`
+  ]
+}