Biçimler arasında kod dönüştürme
Transformer'ı oluştururken oluşturmak istediğiniz ses çıkış ve video biçimlerini belirtebilirsiniz. Örneğin, aşağıdaki kodda Transformer'ın H.264/AVC video ve AAC ses çıkışı yapacak şekilde nasıl yapılandırılacağı gösterilmektedir:
Kotlin
Transformer.Builder(context) .setVideoMimeType(MimeTypes.VIDEO_H264) .setAudioMimeType(MimeTypes.AUDIO_AAC) .build()
Java
new Transformer.Builder(context) .setVideoMimeType(MimeTypes.VIDEO_H264) .setAudioMimeType(MimeTypes.AUDIO_AAC) .build();
Giriş medya biçimi, ses veya video yapılandırmalarıyla zaten eşleşiyorsa Dönüştürücü, otomatik olarak dönüştürmeye, yani sıkıştırılmış örnekleri herhangi bir değişiklik yapmadan giriş kapsayıcısından çıkış kapsayıcısına kopyalamaya geçer. Bu da hem işlem maliyetini hem de aynı biçimdeki kod çözme ve yeniden kodlama işlemlerinde potansiyel kalite kayıplarını önler.
Sesi veya videoyu kaldır
EditedMediaItem.Builder
kullanarak sesi veya videoyu kaldırın. Örneğin:
Kotlin
EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(true).build()
Java
new EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(true).build();
Klibi kırpma
Giriş medya öğesinde kırpma yapılandırmasını ayarlayarak belirtilen başlangıç ve bitiş zaman damgalarının dışındaki tüm medyaları kaldırabilirsiniz. Örneğin, yalnızca 10 saniye ile 20 saniye arasındaki medyayı içeren bir klip oluşturmak için:
Kotlin
val inputMediaItem = MediaItem.Builder() .setUri(uri) .setClippingConfiguration( ClippingConfiguration.Builder() .setStartPositionMs(10_000) .setEndPositionMs(20_000) .build()) .build()
Java
MediaItem inputMediaItem = new MediaItem.Builder() .setUri(uri) .setClippingConfiguration( new MediaItem.ClippingConfiguration.Builder() .setStartPositionMs(10_000) .setEndPositionMs(20_000) .build()) .build();
Video düzenlemeleri
EditedMediaItems
uygulamasında, sırayla uygulanacak ses işlemcileri ve video efektleri listeleri bulunur. Kitaplıkta yaygın kullanım alanları için video efekti uygulamaları bulunur veya özel efektler yazıp düzenlenmiş medya öğeleri oluştururken bunları aktarabilirsiniz.
Medyayı yeniden ölçeklendirebilirsiniz. Bu, 4K veya 8K video gibi çok yüksek çözünürlüklü girişlerle çalışırken işleme kaynaklarından veya bant genişliğinden tasarruf etmek için yararlı olabilir. Örneğin, orantısal olarak 480 piksel yüksekliğe ölçeklendirmek için:
Kotlin
EditedMediaItem.Builder(MediaItem.fromUri(uri)) .setEffects(Effects( /* audioProcessors= */ listOf(), /* videoEffects= */ listOf(Presentation.createForHeight(480)) )).build()
Java
new EditedMediaItem.Builder(MediaItem.fromUri(uri)) .setEffects(new Effects( /* audioProcessors= */ ImmutableList.of(), /* videoEffects= */ ImmutableList.of(Presentation.createForHeight(480)))) .build();
Alternatif olarak, örneğin boyutu yarıya indirmek için belirli bir faktöre göre ölçeklendirme yapabilirsiniz:
Kotlin
val editedMediaItem = EditedMediaItem.Builder(MediaItem.fromUri(uri)) .setEffects(Effects( /* audioProcessors= */ listOf(), /* videoEffects= */ listOf( ScaleAndRotateTransformation.Builder().setScale(.5f, .5f).build()) )).build()
Java
new EditedMediaItem.Builder(MediaItem.fromUri(uri)) .setEffects(new Effects( /* audioProcessors= */ ImmutableList.of(), /* videoEffects= */ ImmutableList.of( new ScaleAndRotateTransformation.Builder().setScale(.5f, .5f).build()))) .build();
Rotasyonu aynı şekilde yapılandırabilirsiniz:
Kotlin
EditedMediaItem.Builder(MediaItem.fromUri(uri)) .setEffects(Effects( /* audioProcessors= */ listOf(), /* videoEffects= */ listOf( ScaleAndRotateTransformation.Builder() .setRotationDegrees(90f) .build()) )).build()
Java
new EditedMediaItem.Builder(MediaItem.fromUri(uri)) .setEffects(new Effects( /* audioProcessors= */ ImmutableList.of(), /* videoEffects= */ ImmutableList.of( new ScaleAndRotateTransformation.Builder().setRotationDegrees(90f).build()))) .build();
Özel video efektleri
Effects
oluşturucu, uygulanacak ses ve video efektlerinin listesini kabul eder.
Transformer'ın efekt çerçevesi dahili olarak, video efektleri listesini sırayla uygulanan GL gölgelendirici programları sırasına dönüştürür. Efektler çerçevesi bazı durumlarda tek bir gölgelendirici programıyla birden fazla efekt uygulayabilir.
Örneğin, bir gölgelendirici programı, verimliliği ve kaliteyi artıran birden fazla ardışık matris dönüşümü uygulayabilir.
Video efektleri, ExoPlayer.setVideoEffects
kullanılarak ExoPlayer'da da önizleme için desteklenir.
Demo uygulamasında özel video efekti örnekleri bulunur.
Ses düzenlemeleri
Ses efektleri, ham (PCM) sese bir AudioProcessor
örneği dizisi uygulanarak uygulanır. ExoPlayer, ses işlemcilerinin DefaultAudioSink.Builder
'ye geçirilmesini destekler. Bu sayede ses düzenlemelerinin önizlenebilir.