變形

各種格式之間的轉碼

您可以指定在建構 Transformer 時要產生的輸出音訊和影片格式。例如,以下程式碼顯示如何設定 Transformer 以輸出 H.264/AVC 視訊和 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();

如果輸入媒體格式與音訊或視訊的設定相符,Transformer 會自動切換至 transmuxing。也就是說,將壓縮的樣本從輸入容器複製到輸出容器不會進行任何修改。避免以相同格式進行解碼及重新編碼,造成運算成本和可能品質損失。

移除音訊或視訊

使用 EditedMediaItem.Builder 移除音訊或影片,例如:

Kotlin

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

Java

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

剪輯短片

您可以對輸入媒體項目進行剪輯設定,藉此移除指定開始和結束時間戳記以外的任何媒體。舉例來說,如要產生只包含 10 秒至 20 秒媒體的剪輯:

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

影片編輯

EditedMediaItems 包含要依序套用的音訊處理器和影片效果清單。這個程式庫提供常見用途的視訊效果實作,或者您可以編寫自訂效果,並在建構編輯的媒體項目時傳入。

您可以重新調整媒體大小,這樣在處理非常高解析度的輸入內容 (例如 4K 或 8K 影片) 時,可以節省處理資源或頻寬。舉例來說,如要按比例調整至高至 480 像素:

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

或者,您也可以按指定係數進行縮放,例如用來減半大小:

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

您可以透過下列方式設定輪播:

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

自訂影片效果

Effects 建構函式接受要套用的音訊和影片效果清單。Transformer 的效果架構會在內部將視訊效果清單轉換為依序套用的一系列 GL 著色器程式。在某些情況下,效果架構可以透過單一著色器程式套用多種效果。舉例來說,一個著色器程式可套用多個連續矩陣轉換作業,進而提升效率和品質。

ExoPlayer 可使用 ExoPlayer.setVideoEffects 預覽影片效果。

試用版應用程式包含自訂影片效果的範例。

音訊編輯

將一系列 AudioProcessor 例項套用至原始 (PCM) 音訊,即可實作音訊效果。ExoPlayer 支援將音訊處理器傳遞至 DefaultAudioSink.Builder,以允許預覽音訊編輯內容。