各種格式之間的轉碼
您可以指定在建構 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
,以允許預覽音訊編輯內容。