變形

在不同格式之間轉碼

您可以指定要在何時產生的輸出音訊和影片格式 建構 Transformer舉例來說,以下程式碼顯示 設定 Transformer 輸出 H.264/AVC 視訊和 AAC 音訊:

KotlinJava
Transformer.Builder(context)
   
.setVideoMimeType(MimeTypes.VIDEO_H264)
   
.setAudioMimeType(MimeTypes.AUDIO_AAC)
   
.build()
new Transformer.Builder(context)
   
.setVideoMimeType(MimeTypes.VIDEO_H264)
   
.setAudioMimeType(MimeTypes.AUDIO_AAC)
   
.build();

如果輸入媒體格式已經與音訊設定相符 Transformer 會自動切換成「平移」,也就是 從輸入容器到輸出容器的壓縮樣本 修改內容。這樣可以避免計算費用,避免 以相同格式重新編碼和重新編碼

移除音訊或視訊

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

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

剪輯短片

你可以移除指定開始與結束時間戳記以外的任何媒體,只要設定即可 調整輸入媒體項目的裁剪設定舉例來說,如果想 僅包含 10 秒至 20 秒之間媒體的短片:

KotlinJava
val inputMediaItem = MediaItem.Builder()
   
.setUri(uri)
   
.setClippingConfiguration(
       
ClippingConfiguration.Builder()
           
.setStartPositionMs(10_000)
           
.setEndPositionMs(20_000)
           
.build())
   
.build()
MediaItem inputMediaItem =
   
new MediaItem.Builder()
       
.setUri(uri)
       
.setClippingConfiguration(
           
new MediaItem.ClippingConfiguration.Builder()
               
.setStartPositionMs(10_000)
               
.setEndPositionMs(20_000)
               
.build())
       
.build();

最佳化剪輯

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

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

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

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

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

影片編輯

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

您可以重新縮放媒體,這有助於節省處理資源 頻寬。 舉例來說,如要按比例調整為 480 像素的高度:

KotlinJava
EditedMediaItem.Builder(MediaItem.fromUri(uri))
   
.setEffects(Effects(
       
/* audioProcessors= */ listOf(),
       
/* videoEffects= */ listOf(Presentation.createForHeight(480))
   
)).build()
new EditedMediaItem.Builder(MediaItem.fromUri(uri))
   
.setEffects(new Effects(
       
/* audioProcessors= */ ImmutableList.of(),
       
/* videoEffects= */ ImmutableList.of(Presentation.createForHeight(480))))
   
.build();

或者,您也可以透過指定係數縮放,例如將大小減半:

KotlinJava
val editedMediaItem = EditedMediaItem.Builder(MediaItem.fromUri(uri))
   
.setEffects(Effects(
       
/* audioProcessors= */ listOf(),
       
/* videoEffects= */ listOf(
           
ScaleAndRotateTransformation.Builder().setScale(.5f, .5f).build())
   
)).build()
new EditedMediaItem.Builder(MediaItem.fromUri(uri))
   
.setEffects(new Effects(
       
/* audioProcessors= */ ImmutableList.of(),
       
/* videoEffects= */ ImmutableList.of(
           
new ScaleAndRotateTransformation.Builder().setScale(.5f, .5f).build())))
   
.build();

您可以採用相同的方式設定旋轉功能:

KotlinJava
EditedMediaItem.Builder(MediaItem.fromUri(uri))
   
.setEffects(Effects(
       
/* audioProcessors= */ listOf(),
       
/* videoEffects= */ listOf(
           
ScaleAndRotateTransformation.Builder()
               
.setRotationDegrees(90f)
               
.build())
   
)).build()
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,允許預覽音訊編輯。