변환

형식 간 트랜스코딩

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