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.