diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java
index 5ec10391ec..ff638e8eb8 100644
--- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java
+++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java
@@ -504,11 +504,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/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java
index 6fd88d043b..4078e3eeb4 100644
--- a/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java
+++ b/libraries/transformer/src/test/java/androidx/media3/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