diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java
index 8f273e81d8..e1d4c159f3 100644
--- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java
+++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java
@@ -502,11 +502,24 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory {
&& allowedMimeTypes.contains(mimeType);
}
- /** Computes the video bit rate using the Kush Gauge. */
+ /**
+ * Computes the video bit rate using the Kush Gauge.
+ *
+ *
{@code kushGaugeBitrate = height * width * frameRate * 0.07 * motionFactor}.
+ *
+ *
Motion factors:
+ *
+ *
+ * - Low motion video - 1
+ *
- Medium motion video - 2
+ *
- High motion video - 4
+ *
+ */
private static int getSuggestedBitrate(int width, int height, float frameRate) {
// TODO(b/210591626) Implement bitrate estimation.
- // 1080p30 -> 6.2Mbps, 720p30 -> 2.7Mbps.
- return (int) (width * height * frameRate * 0.1);
+ // Assume medium motion factor.
+ // 1080p60 -> 16.6Mbps, 720p30 -> 3.7Mbps.
+ return (int) (width * height * frameRate * 0.07 * 2);
}
@RequiresNonNull("#1.sampleMimeType")
diff --git a/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactoryTest.java b/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactoryTest.java
index c7d239d2a7..249c231639 100644
--- a/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactoryTest.java
+++ b/library/transformer/src/test/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactoryTest.java
@@ -74,8 +74,8 @@ public class DefaultEncoderFactoryTest {
assertThat(actualVideoFormat.sampleMimeType).isEqualTo(MimeTypes.VIDEO_H264);
assertThat(actualVideoFormat.width).isEqualTo(1920);
assertThat(actualVideoFormat.height).isEqualTo(1080);
- // 1920 * 1080 * 30 * 0.1
- assertThat(actualVideoFormat.averageBitrate).isEqualTo(6_220_800);
+ // 1920 * 1080 * 30 * 0.07 * 2.
+ assertThat(actualVideoFormat.averageBitrate).isEqualTo(8_709_120);
}
@Test
@@ -92,8 +92,8 @@ public class DefaultEncoderFactoryTest {
assertThat(actualVideoFormat.sampleMimeType).isEqualTo(MimeTypes.VIDEO_H264);
assertThat(actualVideoFormat.width).isEqualTo(1920);
assertThat(actualVideoFormat.height).isEqualTo(1080);
- // 1920 * 1080 * 30 * 0.1
- assertThat(actualVideoFormat.averageBitrate).isEqualTo(6_220_800);
+ // 1920 * 1080 * 30 * 0.07 * 2.
+ assertThat(actualVideoFormat.averageBitrate).isEqualTo(8_709_120);
}
@Test