Dönüşümler

Biçimler arasında kod dönüştürme

Oluşturduğunuz çıkıştaki ses ve video biçimlerini devreye giriyor. Örneğin, aşağıdaki kodda Transformer'ı, H.264/AVC video ve AAC ses çıkışı yapacak şekilde yapılandırmak için:

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ş medyası biçimi, ses yapılandırmalarıyla zaten eşleşiyorsa Dönüştürücü, otomatik olarak transmuxing'e, yani giriş kapsayıcısından çıkış kapsayıcısına geçmeden önce tıklayın. Böylece işlem maliyeti ve olası kalite kaybı ve yeniden kodlamaya yönelik bir yöntemdir.

Sesi veya videoyu kaldırma

EditedMediaItem.Builder kullanarak ses veya videoyu kaldırın. Örneğin:

Kotlin

EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(true).build()

Java

new EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(true).build();

Klip kırpma

Belirtilen başlangıç ve bitiş zaman damgalarının dışındaki medyaları kırpma yapılandırmasını devreye sokmaktır. Örneğin, Arkadaş Bitkiler projesinin 10 ile 20 saniye arasında medyayı içeren klip:

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();

Kırpma işlemlerini optimize etme

Videonun başlangıcını kırpmadaki gecikmeyi azaltmak için kırpmayı etkinleştirin optimize edebilirsiniz.

Kotlin

Transformer.Builder(context)
    .experimentalSetTrimOptimizationEnabled(true)
    .build()

Java

new Transformer.Builder(context)
    .experimentalSetTrimOptimizationEnabled(true)
    .build();

Bu, videonun mümkün olan en az bir kısmını yeniden kodlayarak yeniden kodlanan verileri orijinal orijinal öğenin geri kalanıyla birleştirerek videosunu izleyin. Optimizasyon, giriş dosyasının bir kısmını birleştirebilmek temel alınarak kodlayıcının çıkış biçimi ve kodlayıcının çıkış biçimi ile birlikte kodlayıcının giriş biçimi uyumlu olmalıdır. Örneğin, dosya ilk başta kodlayıcı uygulamasına sahip bir cihazda oluşturulmuşsa muhtemelen o cihazda optimizasyonun mümkün olmayacağını unutmayın. Optimizasyonun başarılı olması için kodlayıcı, EncoderFactory, giriş biçimiyle uyumlu bir seviye ve profile sahip olmalıdır.

Bu optimizasyon yalnızca tek öğeli MP4 girişiyle çalışır ve 90 dereceye bölünebilen işlem video efektleri ve döndürmeler yok. Optimizasyon başarısız olursa Transformer otomatik olarak normal dışa aktarmaya geri döner ve ExportResult.OptimizationResult aralığındaki optimizasyonun sonucudur.

Bu işlevi doğruluyoruz ve deneysel olmayan bir işleve dönüşmesini bekliyoruz. ileride ele alacağız.

Video düzenlemeleri

EditedMediaItems, uygulanacak ses işlemcilerinin ve video efektlerinin listelerine sahip sipariş. Kitaplıkta, yaygın kullanım alanlarına yönelik video efekti uygulamaları, ya da özel efektler yazıp düzenlenmiş medya öğeleri oluştururken bunları aktarabilirsiniz. öğeler.

Medyayı yeniden ölçeklendirebilirsiniz. Bu, işleme kaynaklarından tasarruf etmek veya bant genişliği bulunur. Örneğin, 480 piksel yüksekliğe orantılı olarak ö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, belirli bir faktöre göre ölçeklendirme yapabilirsiniz. Örneğin, boyutu yarıya inebilirsiniz:

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 efektleri listesini kabul eder. Dahili olarak Transformer'ın efektler çerçevesi video efektlerinin listesini dönüştürür programların bir sırasına uygulanır. Bazı durumlarda, efektler çerçevesi tek bir gölgelendirici programıyla birden çok efekt uygulayabilir. Örneğin, bir gölgelendirici programı birden fazla ardışık matris uygulayabilir dönüşümleri teşvik ediyor. Bu da verimliliği ve kaliteyi artırıyor.

Video efektleri, ExoPlayer.setVideoEffects

Demo uygulaması, özel video efekti örnekleri içerir.

Ses düzenlemeleri

Ses efektleri, AudioProcessor dizisi uygulanarak uygulanır. örnekleri ham (PCM) sese dönüştürür. ExoPlayer, ses işlemcilerinin DefaultAudioSink.Builder, ses düzenlemelerinin önizlenmesine olanak tanır.