변환

형식 간 트랜스코딩

동영상 출력 및 캡션 생성 시 생성하고자 하는 출력 오디오 및 동영상 형식을 살펴보겠습니다 예를 들어, 다음 코드는 H.264/AVC 동영상 및 AAC 오디오를 출력하도록 Transformer를 구성합니다.

Kotlin자바
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는 transmuxing으로 자동 전환되어 압축된 샘플을 입력 컨테이너에서 출력 컨테이너로 있습니다. 이를 통해 시스템의 전산 비용과 잠재적 품질 손실을 디코딩 및 다시 인코딩하는 데 사용됩니다.

오디오 또는 동영상 삭제

EditedMediaItem.Builder를 사용하여 오디오 또는 동영상을 삭제합니다. 예를 들면 다음과 같습니다.

Kotlin자바
EditedMediaItem.Builder(inputMediaItem).setRemoveAudio(true).build()
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()
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()
new Transformer.Builder(context)
   
.experimentalSetTrimOptimizationEnabled(true)
   
.build();

이렇게 하면 최소한의 동영상만 디코딩하고 다시 인코딩하여 내보내기 속도가 빨라집니다. 다시 인코딩된 데이터를 원본의 나머지 부분과 연결하여 있습니다. 최적화는 입력 파일의 일부를 병합할 수 있어야 합니다. 즉, 인코더의 출력 형식과 입력 형식이 호환 가능해야 합니다. 예를 들어 파일이 원래 인코더 구현이 다른 기기에서 제작된 경우 최적화를 적용할 수 없습니다. 최적화에 성공하려면 인코더가 EncoderFactory에는 입력 형식과 호환되는 수준 및 프로필이 있어야 합니다.

이 최적화는 90도로 나눌 수 있는 회전 동영상 효과 없음 최적화가 실패하면 Transformer는 자동으로 정상 내보내기로 대체하고 ExportResult.OptimizationResult의 최적화 결과

이 기능은 현재 검증 중이며 비실험용 기능이 될 것으로 예상됩니다. 향후 출시 버전에서 사용할 수 있습니다.

동영상 수정사항

EditedMediaItems에는 적용할 오디오 프로세서 및 동영상 효과 목록이 있습니다. 있습니다. 라이브러리에는 일반적인 사용 사례를 위한 동영상 효과 구현이 포함되어 있습니다. 또는 사용자 지정 효과를 작성하여 편집된 미디어를 빌드할 때 전달할 수 있습니다. 개의 항목이 있습니다.

미디어 크기를 재조정할 수 있어 처리 리소스를 절약하고 매우 높은 해상도 입력(예: 4k 또는 8k 비디오)을 처리할 때 더 높은 대역폭을 사용할 수 있습니다. 예를 들어 480픽셀 높이에 비례하여 크기를 조절하는 방법은 다음과 같습니다.

Kotlin자바
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();

또는 특정 계수에 따라 배율을 조정할 수도 있습니다. 예를 들어 다음과 같이 크기를 절반으로 줄일 수 있습니다.

Kotlin자바
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();

동일한 방법으로 회전을 구성할 수 있습니다.

Kotlin자바
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: 오디오 수정사항을 미리 볼 수 있습니다.