Media3 Transformer увеличивает битрейтAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Media3 Transformer увеличивает битрейт

Сообщение Anonymous »

Я хочу кодировать видео с помощью 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»