I wan’t to encode videos using media3 transformers api, it works correctly but output bitrate bigger than input bitrate. althoug i am using the reducing frame rate, resolution, bitrate but it not works correctly, and it shows in video metada 1024×576 with 90 rotation. how can i fix that? Thanks in advance.
val mediaItemSp = MediaItem.fromUri(testUri).buildUpon()
.setClippingConfiguration(
MediaItem.ClippingConfiguration.Builder()
.setStartPositionMs(mStartPosition.toLong())
.setEndPositionMs(mEndPosition.toLong()).build()
).build()
val inputMediaItem = mediaItemSp
val overlayef: OverlayEffect? = myOverlayEf(myContext)
var targetBitrate: Int? = null
var targetFrameRate: Int? = null
var editedMediaItem = EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(false)
.build()
var videoEncoderSettings = VideoEncoderSettings.Builder()
.build()
if (actualFrame != null) {
if (actualFrame >= 30) {
targetFrameRate = 30
} else {
targetFrameRate = null
}
}
if (actualBitrate != null) {
if (actualBitrate >= 2000000) {
targetBitrate = 1800000
}
if (actualBitrate >= 1500000 && actualBitrate < 2000000) {
targetBitrate = 1500000
}
if (actualBitrate >= 1000000 && actualBitrate < 1500000) {
targetBitrate = 1000000
}
if (actualBitrate < 990000) {
targetBitrate = null
}
}
if (actualBitrate == null && actualFrame == null) {
targetFrameRate = null
targetBitrate = null
}
if (targetBitrate != null) {
videoEncoderSettings = VideoEncoderSettings.Builder()
.setBitrateMode(BITRATE_MODE_CBR)
.setBitrate(targetBitrate)
.build()
}
if (targetFrameRate != null) {
if (overlayef != null && actualFrame != null) {
editedMediaItem = EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(false)
.setEffects(
Effects(
listOf(),
listOf(
Presentation.createForWidthAndHeight(
576, 1024, LAYOUT_SCALE_TO_FIT
),
overlayef,
FrameDropEffect.createSimpleFrameDropEffect(
actualFrame.toFloat(),
targetFrameRate.toFloat()
)))).build()
}
} else {
if (overlayef != null && actualFrame != null) {
editedMediaItem = EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(false)
.setEffects(
Effects(
listOf(),
listOf(
Presentation.createForWidthAndHeight(
576, 1024, LAYOUT_SCALE_TO_FIT
),
overlayef,
))).build()
}
}
val compositionBuilder = Composition.Builder(EditedMediaItemSequence(editedMediaItem))
Log.e("getTheVideoMData", "actual bitrate $actualBitrate")
Log.e("getTheVideoMData", "actual frame rate $actualFrame")
Log.e("getTheVideoMData", "target bitrate $targetBitrate")
Log.e("getTheVideoMData", "target frame rate targetFrameRate")
`but when i add .setBitrateMode(BITRATE_MODE_CBR)
the log shows VideoEncoder error: format=Format(null, null, null, video/avc, avc1.4D401F, -1, null, [1024, 576, 29.97003, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false, 8bit Luma, 8bit Chroma)], [-1, -1]), colorInfo=ColorInfo(BT709, Limited range, SDR SMPTE 170M, false, 8bit Luma, 8bit Chroma) and my log getTheVideoMData
E actual bitrate 1138922
E actual frame rate 30
E target bitrate 1000000
E target frame rate 30
7