Phép biến đổi

Chuyển mã giữa các định dạng

Bạn có thể chỉ định định dạng âm thanh và video đầu ra mà mình muốn tạo khi tạo Transformer. Ví dụ: Mã sau đây cho biết cách định cấu hình Transformer để xuất video H.264/AVC và âm thanh 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();

Nếu định dạng nội dung nghe nhìn đầu vào đã khớp với cấu hình cho âm thanh hoặc video, Transformer sẽ tự động chuyển sang chế độ truyền tải, tức là sao chép các mẫu nén từ vùng chứa đầu vào sang vùng chứa đầu ra mà không cần sửa đổi. Điều này giúp tránh chi phí tính toán và giảm chất lượng có thể xảy ra khi giải mã và mã hoá lại ở cùng một định dạng.

Xoá âm thanh hoặc video

Loại bỏ âm thanh hoặc video bằng EditedMediaItem.Builder, ví dụ:

Kotlin

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

Java

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

Cắt đoạn video

Bạn có thể xoá mọi nội dung nghe nhìn nằm ngoài dấu thời gian bắt đầu và kết thúc được chỉ định bằng cách đặt cấu hình cắt trên mục nội dung nghe nhìn đầu vào. Ví dụ: để tạo một đoạn video chỉ chứa nội dung nghe nhìn dài từ 10 giây đến 20 giây:

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

Chỉnh sửa video

EditedMediaItems có danh sách trình xử lý âm thanh và hiệu ứng video để áp dụng theo thứ tự. Thư viện này bao gồm các phương thức triển khai hiệu ứng video cho các trường hợp sử dụng phổ biến, hoặc bạn có thể viết hiệu ứng tuỳ chỉnh và truyền các hiệu ứng đó khi tạo các mục nội dung nghe nhìn đã chỉnh sửa.

Bạn có thể điều chỉnh tỷ lệ nội dung nghe nhìn. Việc này có thể hữu ích để tiết kiệm tài nguyên xử lý hoặc băng thông khi xử lý đầu vào có độ phân giải rất cao, chẳng hạn như video 4k hoặc 8k. Ví dụ: để mở rộng tỷ lệ tương ứng với chiều cao 480 pixel:

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

Ngoài ra, bạn có thể mở rộng quy mô theo một yếu tố nhất định, ví dụ: để giảm một nửa kích thước:

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

Bạn có thể định cấu hình xoay theo cách tương tự:

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

Hiệu ứng tuỳ chỉnh cho video

Hàm khởi tạo Effects chấp nhận một danh sách hiệu ứng âm thanh và video để áp dụng. Trong nội bộ, khung hiệu ứng của Transformer chuyển đổi danh sách hiệu ứng video thành một chuỗi các chương trình đổ bóng GL được áp dụng theo thứ tự. Trong một số trường hợp, khung hiệu ứng có thể áp dụng nhiều hiệu ứng bằng một chương trình đổ bóng. Ví dụ: một chương trình đổ bóng có thể áp dụng nhiều phép biến đổi ma trận liên tiếp, giúp cải thiện hiệu quả và chất lượng.

Bạn cũng có thể xem trước hiệu ứng video trong ExoPlayer bằng cách sử dụng ExoPlayer.setVideoEffects.

Ứng dụng minh hoạ có các ví dụ về hiệu ứng video tuỳ chỉnh.

Chỉnh sửa âm thanh

Hiệu ứng âm thanh được triển khai bằng cách áp dụng một chuỗi các thực thể AudioProcessor cho âm thanh thô (PCM). ExoPlayer hỗ trợ truyền trình xử lý âm thanh tới DefaultAudioSink.Builder, cho phép xem trước các nội dung chỉnh sửa âm thanh.