在不同格式之間轉碼
您可以指定要在何時產生的輸出音訊和影片格式 建構 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
,允許預覽音訊編輯。