Преглед изворни кода

fix(server): h264 and hevc not respecting max bitrate (#3052)

* added `-bufsize` flag

* updated test
Mert пре 2 година
родитељ
комит
b1fcf02d13

+ 1 - 0
server/src/domain/media/media.service.spec.ts

@@ -396,6 +396,7 @@ describe(MediaService.name, () => {
             '-preset ultrafast',
             '-crf 23',
             '-maxrate 4500k',
+            '-bufsize 9000k',
           ],
           twoPass: false,
         },

+ 8 - 1
server/src/domain/media/media.service.ts

@@ -284,7 +284,14 @@ export class MediaService {
     } else if (constrainMaximumBitrate || isVP9) {
       // for vp9, these flags work for both one-pass and two-pass
       options.push(`-crf ${ffmpeg.crf}`);
-      options.push(`${isVP9 ? '-b:v' : '-maxrate'} ${maxBitrateValue}${bitrateUnit}`);
+      if (isVP9) {
+        options.push(`-b:v ${maxBitrateValue}${bitrateUnit}`);
+      } else {
+        options.push(`-maxrate ${maxBitrateValue}${bitrateUnit}`);
+        // -bufsize is the peak possible bitrate at any moment, while -maxrate is the max rolling average bitrate
+        // needed for -maxrate to be enforced
+        options.push(`-bufsize ${maxBitrateValue * 2}${bitrateUnit}`);
+      }
     } else {
       options.push(`-crf ${ffmpeg.crf}`);
     }