Dönüşümler

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.