Я хочу кодировать видео с помощью API трансформаторов Media3, он работает правильно, но выводит битрейт больше, чем входной битрейт. Хотя я использую сниженную частоту кадров, разрешение, битрейт, но он не работает правильно, и в видео Metada 1024x576 с 90 вращением. Как я могу это исправить? Заранее спасибо. < /P>
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")
< /code>
Но когда я добавляю < /p>
.setBitrateMode(BITRATE_MODE_CBR)
< /code>
В журнале отображается < /p>
Ошибка видеокодера: 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 , Ограниченный диапазон, SDR SMPTE 170M, FALSE, 8 -битный LUMA, 8 -битный Chroma) и My Log GetTheVideOmData
E Фактический битрейт 1138922
E Фактическая частота кадров 30
< Br /> e Target Bitrate 1000000
e Целевая частота кадров 30 < /p>
< /blockquote>
Подробнее здесь: https://stackoverflow.com/questions/789 ... es-bitrate