變形

在不同格式之間轉碼

您可以指定要在何時產生的輸出音訊和影片格式 建構 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 會自動切換成「平移」,也就是 從輸入容器到輸出容器的壓縮樣本 修改內容。這樣可以避免計算費用,避免 以相同格式重新編碼和重新編碼

移除音訊或視訊

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

最佳化剪輯

如要縮短剪輯影片開頭的延遲時間,請啟用剪輯功能 最佳化

Kotlin

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

Java

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

大幅加快匯出速度, 則可將重新編碼的資料與 影片。要最佳化,就必須先能夠拼接部分輸入檔案 新編碼的輸出內容,這意味著編碼器的輸出格式和 輸入格式必須相容。舉例來說,假設檔案原本為 若是採用其他編碼器的裝置 就無法套用最佳化 為使最佳化效果良好,透過 EncoderFactory 的等級和設定檔必須與輸入格式相容。

這項最佳化功能僅適用於單一素材資源 MP4 輸入,不含任何影響 無阻光視訊效果,且可旋轉 90 度。如果最佳化 轉換器失敗時,轉換器會自動恢復為一般匯出作業,並將 ExportResult.OptimizationResult中的最佳化結果。

我們正在驗證此功能,並期望其成為非實驗性質 將在後續版本中提供具體支援

影片編輯

EditedMediaItems 列有可套用的音訊處理器和影片特效 順序。這個程式庫提供了常見用途的影片效果實作 也可以撰寫自訂特效,並在製作已編輯的媒體時傳遞 項目。

您可以重新縮放媒體,這有助於節省處理資源 頻寬。 舉例來說,如要按比例調整為 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,允許預覽音訊編輯。