Melakukan transcoding antarformat
Anda dapat menentukan format audio dan video output yang ingin dihasilkan saat mem-build Transformer. Misalnya, kode berikut menunjukkan cara mengonfigurasi Transformer untuk menghasilkan output video H.264/AVC dan audio AAC:
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();
Jika format media input sudah sesuai dengan konfigurasi untuk audio atau video, Transformer akan otomatis beralih ke transmuxing, yaitu menyalin sampel terkompresi dari penampung input ke penampung output tanpa perubahan. Hal ini akan menghindari biaya komputasi dan potensi hilangnya kualitas decoding dan encoding ulang dalam format yang sama.
Hapus audio atau video
Hapus audio atau video menggunakan EditedMediaItem.Builder
, misalnya:
Kotlin
EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(true).build()
Java
new EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(true).build();
Memangkas klip
Anda dapat menghapus media apa pun di luar stempel waktu awal dan akhir yang ditentukan dengan menyetel konfigurasi kliping pada item media input. Misalnya, untuk menghasilkan klip yang hanya berisi media antara 10 detik dan 20 detik:
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();
Pengeditan video
EditedMediaItems
memiliki daftar pemroses audio dan efek video untuk diterapkan
secara berurutan. Library ini menyertakan implementasi efek video untuk kasus penggunaan umum,
atau Anda dapat menulis efek kustom dan meneruskannya saat membuat item media
yang diedit.
Anda dapat menskalakan ulang media, yang dapat berguna untuk menghemat resource atau bandwidth pemrosesan saat menangani input resolusi sangat tinggi, seperti video 4K atau 8K. Misalnya, untuk menskalakan secara proporsional ke tinggi 480 piksel:
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();
Atau, Anda dapat menskalakan berdasarkan faktor tertentu, misalnya, untuk membagi ukuran menjadi dua:
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();
Anda dapat mengonfigurasi rotasi dengan cara yang sama:
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();
Efek video kustom
Konstruktor Effects
menerima daftar efek audio dan video untuk diterapkan.
Secara internal, framework efek Transformer mengonversi daftar efek video
menjadi urutan program shader GL yang diterapkan secara berurutan. Dalam beberapa kasus,
framework efek dapat menerapkan beberapa efek dengan satu program shader.
Misalnya, satu program shader dapat menerapkan beberapa transformasi matriks
berurutan, yang akan meningkatkan efisiensi dan kualitas.
Efek video juga didukung untuk pratinjau di ExoPlayer, menggunakan
ExoPlayer.setVideoEffects
.
Aplikasi demo menyertakan contoh efek video kustom.
Pengeditan audio
Efek audio diimplementasikan dengan menerapkan urutan instance AudioProcessor
ke audio mentah (PCM). ExoPlayer mendukung penerusan prosesor audio ke
DefaultAudioSink.Builder
, yang memungkinkan pratinjau pengeditan audio.