형식 간 트랜스코딩
동영상 출력 및 캡션 생성 시 생성하고자 하는 출력 오디오 및 동영상 형식을 살펴보겠습니다 예를 들어, 다음 코드는 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
: 오디오 수정사항을 미리 볼 수 있습니다.