동영상 공유 권장사항

많은 사용자가 Android 기기를 사용하여 동영상을 공유합니다. 수신된 원본보다 열악한 경우가 많음 할 수 있습니다. 이 문서에서는 동영상 처리와 관련하여 피해야 할 일반적인 실수에 대해 알아보겠습니다. 최적화 자세한 내용은 이 페이지에서는 변환기 모듈을 사용하여 HDR을 SDR로 트랜스코딩합니다.

해야 할 일은 해상도를 일정하게 유지하고 동영상 화질을 유지하는 것입니다. 동영상 공유를 준비하는 동안 가능한 한 길게 표시되도록 하는 것이 좋습니다.

공유 파이프라인

그림 1은 동영상 공유의 일반적인 흐름을 보여줍니다.

동영상 파이프라인 공유그림 1. 동영상 공유 파이프라인

파이프라인에는 다음 단계가 포함됩니다.

  1. 동영상을 캡처 및 인코딩하며, 캡처 중에 효과를 추가할 수도 있습니다. 또는 사용자가 이 단계를 건너뛰고 저장소에서 동영상을 선택할 수 있습니다. 다른 앱에서 사전 녹음된 동영상을 볼 수 있습니다
  2. 동영상을 수정, 필터링, 보정 또는 처리합니다.
  3. 트랜스코딩을 준비하여 동영상 크기를 조절합니다.
  4. 공유할 동영상을 트랜스코딩합니다. 2단계의 필터링은 보통 다음과 같이 적용됩니다. 이 단계의 일부에 불과합니다.

파이프라인에는 2가지 단계가 있는데 이는 동영상 품질을 결정하는 매개변수입니다. 즉, 초기 트랜스코드, 녹화, 트랜스코딩이 가능합니다. 또한 다음과 같은 작업이 필요할 수도 있습니다. 최종 트랜스코드 단계 전에 동영상의 크기를 재조정해야 하며 이는 품질에도 영향을 줄 수 있습니다.

권장사항

표 1은 동영상 품질에 대한 5가지 주요 매개변수 및 이를 사용할 수 있는 단계를 나타냅니다.

매개변수 촬영하기 공유
프로필 Y Y
해상도 Y Y
비트 전송률 Y Y
양자화 매개변수 (QP) (드물게 나옴) Y
B 프레임 N Y

표 1. 동영상 품질을 결정하는 기본 매개변수

프로필

더 나은 결과를 얻으려면 특정 필터에서 제공하는 고급 프로필을 사용하십시오. 코덱을 지원합니다. AVC 인코딩의 경우 높은 프로필 및 수준 4를 선택합니다.

해상도, 자르기, 크기 조정

크기 조정 단계에서 캡처된 동영상의 초기 해상도를 변경할 수 있습니다. 확장하기 때문에 데이터의 품질이 저하될 수 있습니다. 처음에 해상도를 조정하지 않고 인코딩하는 방법을 배우게 될 것입니다. 또한 익스플로이트가 특히 잘린 이미지를 확대하는 경우에는 이미지의 품질이 낮아집니다. 이미지 다음 가이드라인을 준수하세요.

  • 최종 공유 해상도 이상의 해상도를 선택하세요.
  • 캡처 해상도가 공유 해상도를 크게 초과하면 안 됩니다. 모든 중간 단계가 더 큰 규모의 초기 캡처 시 더 높은 비트 전송률 등).

    • 공유 인코딩이 720x1280 해상도를 생성한다면 720x1280 캡처 해상도
    • 캡처와 공유 사이의 중간 단계에 자르기가 포함된 경우 1080x1920과 같이 더 높은 캡처 해상도를 사용하고 캡처하여 추가 픽셀을 처리합니다.
  • 이미지를 너무 많이 자르면 이미지 품질이 낮아집니다. 특히 잘린 이미지가 이미지가 확대됩니다.

  • 낮은 해상도에서 고해상도로 확대하지 마세요. 업스케일링 시도 존재하지 않는 세부정보를 만들 수 있습니다 원하는 고해상도 사용 진행될 수 있습니다.

  • 확대해야 하는 경우 인코딩 매개변수를 조정하세요. 예를 들어 업스케일링된 해상도는 픽셀이 두 배, 비트 전송률은 두 배입니다.

해상도와 비트 전송률은 서로 관련되어 있습니다. 예를 들어, 고해상도 노트북을 낮은 비트 전송률로 트랜스코딩되는 공유 파이프라인을 통해 낮은 해상도로 시작할 때보다 낮은 품질의 이미지를 생성합니다. 이 비트 전송률이 감소하고, 더 작은 해상도가 시작하는 크로스오버 지점이 있음 다음과 같이 하세요.

비트 전송률 해상도
5Mbps 이상 1080x1920
1.5~5Mbps 이상 720x1280
1.5Mbps 이하 SD와 동등합니다. 9:16 가로세로 비율에서 동일한 픽셀 수는 약 416x736입니다.

표 2. 비트 전송률 및 해상도

인기 있는 앱 중 상당수는 해상도 720p 이하의 동영상을 공유합니다. 데이터는 1.5 사이의 비트 전송률 타겟에 720p 해상도가 적절한 선택임을 5Mbps입니다

비트 전송률

녹화

높은 인코딩 비트 전송률을 사용하면 동영상이 가장 크게 향상됩니다. 있습니다. 기본 카메라 앱과 일치하는 비트 전송률을 선택하는 것이 좋습니다. 해상도 720x1280인 경우 캡처 비트 전송률은 10Mbps가 좋습니다.

캡처 인코딩은 기기 내에서 수행되므로 더 높은 비트 전송률을 사용하여 대부분의 공유 단계 변환을 영향을 줄 수 있습니다 크기가 더 큰 결과 파일은 기기 내 조작에만 사용됩니다.

표 2에 표시된 것처럼 최종 트랜스코딩 단계에서 비트 전송률을 줄일 수 있습니다.

공유

비트 전송률은 업로드할 동영상의 크기입니다. 동영상 사이에 장단점이 있음 클라우드 스토리지 비용을 절감할 수 있습니다

인코딩 프로필, B-프레임 및 QP 경계 값을 선택하는 것도 이 단계에서 더 중요할 수도 있습니다.

최상의 성능을 위해서는 4-5Mbps (720x1280 해상도의 경우)의 비트 전송률이 있습니다.

양자화 매개변수 (QP)

Android 12 이상에서는 QP 키가 표준화되어 있으며 MediaFormat 드림 API 및 NDK 미디어 라이브러리. 이전 Android 버전에서는 프레임워크를 통해서만 QP 조작을 사용할 수 있습니다. 함수를 MediaFormat 구성에서 사용

녹화

동영상 캡처 중에 QP 설정 대신 비트 전송률 컨트롤을 사용하세요. 이 설정은 항상 사용할 수 있는 것은 아닙니다.

캡처 비트 전송률 10Mbps의 QP 설정은 조정하지 않는 것이 좋습니다. (720x1280) 캡처 비트 전송률이 현저히 낮은 경우 720x1280, QP 설정을 40으로 설정하면 품질 향상과 코덱이 타겟 비트 전송률을 너무 자주 초과하도록 강제하지 않도록 하는 것이 좋습니다.

공유

특히 비트 전송률이 4Mbps 미만인 경우 최대 QP 경계를 40으로 설정하는 것이 좋습니다. 이렇게 하면 인코딩된 동영상의 최소 품질이 보장되지만 더 높은 비트 전송률이 생성됩니다. 비트 전송률의 증가는 복잡하기 때문입니다. 공유 앱이 비트 전송률이더라도 특정 임곗값에 집중할 수 있습니다

YouTube TV를 시청할 수 있도록 동영상을 다시 인코딩하여 덜 제한적인 (더 높은) 최대 QP 바운드입니다. 따라서 코덱이 더 자유롭게 화질이 떨어지고 동영상의 다른 부분은 보존됩니다. 포드를 다시 인코딩하여 트랜스코딩 작업이기 때문에 동영상을 공유할 수 있습니다. 이미 사용자가 공유할 동영상을 캡처했음을 의미합니다.

단점은 이와 같이 서로 다른 입력 시퀀스로 트랜스코딩 단계를 매개변수를 사용하면 동영상을 공유하는 데 걸리는 시간이 늘어납니다. 한 가지 방법은 이 지연 시간은 부분적으로 트랜스코딩된 동영상을 확인하여 허용 범위 내에 있어야 합니다. 그렇지 않은 경우 더 적절한 QP 매개변수로 다시 시도합니다.

B-프레임 및 인코딩 프로필

B 프레임은 공유 단계에서, 그리고 실행 중일 때만 사용하는 것이 좋습니다. Android 10 이상

앱은 다음을 사용하여 지원되는 인코딩 프로필을 확인해야 합니다. CodecCapabilities님, 기본 또는 하이 프로필을 지원하지 않는 기기도 있기 때문입니다. 가장 높은 프로필 사용 지원: 높음 > 기본 > 기준. 가장 안전한 결과를 얻기 위해 B-프레임 구성 (KEY_LATENCY 또는 KEY_MAX_B_FRAMES) 기준 사용 시 일부 인코더가 구성에 실패할 수 있기 때문입니다.

다음 코드 세그먼트는 다음에 사용될 'MediaFormat format'를 가정합니다. AVC 인코더를 구성하여

Android 10

API 29 이상

지원되는 가장 높은 프로필을 사용하고 B-frame 매개변수를 1로 설정합니다.

format.setInt32(KEY_PROFILE, AVCProfileHigh);
format.setInt32(KEY_MAX_B_FRAMES, 1);

이러한 상황에서는 KEY_LATENCY를 설정하지 마세요.

Android 8, 8.1, 9

API 26, 27, 28

지원되는 가장 높은 프로필을 사용하되 B-프레임 생성을 사용 중지합니다. 이 일부 제한사항을 이 시스템 버전의 MediaMuxer

format.setInt32(KEY_PROFILE, AVCProfileHigh);
format.setInt32(KEY_LATENCY, 1);

KEY_LATENCY 값은 코덱이 B-프레임을 생성하는 것을 금지하지만 다른 코덱 효율성을 활용합니다.

앱이 MediaMuxer를 사용하여 최종 출력 파일을 어셈블하지 않는 경우 다음을 실행할 수 있습니다. KEY_LATENCY 값을 1이 아닌 2로 설정하여 B-프레임을 사용 설정합니다. 이렇게 해야 코덱이 B-프레임을 생성할 수 있게 합니다.

Android 7.1 이하

API 25 이하

가장 안전한 결과를 얻으려면 기준 프로필을 사용하세요.

format.setInt32(KEY_PROFILE, AVCProfileBaseline);

버전 7 이전의 Android AOSP는 기준 프로필만 지원합니다. 하지만 OEM이 일부 기기에서 기본/하이 프로필을 사용 설정했을 수 있습니다. 공급업체별 프로필을 사용합니다

앱에서 MediaMuxer를 사용하지 않는다면 다음과 같은 경우에 기본 또는 하이 프로필을 사용할 수 있습니다. 코덱이 이를 지원합니다. B- 있습니다.

Transformer 모듈을 사용하여 HDR을 SDR로 트랜스코딩

Android 13 (API 수준 33)부터 Jetpack Media3의 트랜스포머 HDR 콘텐츠를 공유하지 않는 앱, 서비스 및 기기에 HDR을 지원해야 합니다. Transformer 모듈은 HDR 동영상 스트림을 SDR에 입력하고 결과를 MP4로 저장하여 디테일이나 이미지 밝기의 손실 없이 정상적으로 재생됩니다.

참고: Android 12 (API 수준 32) 사이의 시스템 버전을 타겟팅하는 기기 Transformer 모듈은 Android 7.0 (API 수준 24)까지 작동 방식이 다릅니다. 만약 기기가 HDR을 지원하는 경우 앱이 톤 매핑 없이 콘텐츠를 재생합니다. 기기에서 HDR을 지원하지 않는 경우 HDR을 지원하지 않음을 나타내는 오류가 발생합니다. 톤 매핑은 지원되지 않습니다.

다음 코드는 입력을 SDR에 톤 매핑하고 다음 입력 형식 (예: H.264/AVC)으로 다시 인코딩합니다.

Kotlin

val transformer = Transformer.Builder(context)
    .setTransformationRequest(
        TransformationRequest.Builder()
            .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR)
            .build())
    .addListener(/* ... */)
    .build()

자바

Transformer transformer = new Transformer.Builder(context)
    .setTransformationRequest(
        new TransformationRequest.Builder()
            .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR)
            .build())
    .addListener(/* ... */)
    .build();

톤 매핑 기능을 사용해 보려면 Transformer 데모 앱

톤 매핑도 설정할 수 있는데 MediaCodec를 지원하지만, 구현은 더 복잡해집니다 자세한 내용은 MediaCodec 참조 문서