트랜스머싱 가이드

이 주제는트랜스 먹싱 , 비디오를 MP4로 인코딩 한 다음 HLS 출력으로 다시 패키징 할 수있는 프로세스입니다.

개요

Zencoder를 사용하면 비디오를 MP4로 인코딩 한 다음 "트랜스 코딩"이라고하는 프로세스를 통해 HLS 출력으로 다시 패키징 할 수 있습니다. Transmuxing은 비디오 파일을 다시 인코딩하지 않고도 기존 MP4 비디오를 HLS (HTTP Live Streaming)에 필요한 MPEG TS 세그먼트로 다시 패키징합니다. 종속 출력을 사용하면 H.264 파일과 세그먼트 화 된 파일을 모두 단일 작업으로 생성하여 더 낮은 비용으로 더 빠른 처리 시간을 생성 할 수 있습니다. 트랜스 먹싱 된 출력은 인코딩 비용의 1/4로 청구됩니다. 결과 작업은 6 개의 출력을 생성합니다. 2 개는 계정의 일반 요율로 청구되고 3 개는 인코딩 비용의 1/4로 변환되고 1 개의 재생 목록은 무료입니다.

이를 위해 두 개의 주요 출력 세트 (및 재생 목록)가있는 단일 작업을 생성합니다. 첫 번째 출력 세트는 HLS 출력용 소스 파일로 작동 할 수 있도록 몇 가지 특수 설정이있는 일반 H.264 / AAC MP4 파일입니다. 두 번째 출력 세트는 해당 MP4 파일을 "소스"입력으로 사용하여 콘텐츠를 HLS 출력으로 변환합니다. 이들은 종속 출력이기 때문에 처리 일정을 잡기 전에 해당 소스가 완료 될 때까지 기다립니다.

프로세스의 핵심 부분은source , Zencoder API V2의 새로운 옵션입니다. 소스는 입력 파일 대신 처리를 위해 작업의 다른 출력에서 생성 된 파일을 사용하도록 출력에 지시합니다. 이 상황에서 Zencoder는 요청 된 비트 전송률로 입력 파일을 기반으로 H.264 파일을 생성합니다. 각 출력이 완료되면 출력에서 세그먼트 화 된 버전이 생성됩니다.

비디오 해상도

아래 표는 몇 가지 일반적인 비디오 해상도를 보여줍니다.

해상도 유형 일반 이름 종횡비 픽셀 크기
SD(표준 화질) 480p 4:3 640 x 480
HD(고화질) 720p 16:9 1280 x 720
풀HD(FHD) 1080p 16:9 1920년 x 80
QHD(쿼드 HD) 1440p 16:9 2560x1440
2K 비디오 1080p 1:1.77 2048x1080
4K 비디오 또는 Ultra HD(UHD) 4K 또는 2160p 1:1.9 3840x2160
8K 비디오 또는 Full Ultra HD 8K 또는 4320p 16∶9 7680x4320

출력에 대한 비디오 해상도를 고려할 때 시청자가 가장 많이 사용할 장치를 고려해야 합니다. (어떤 종류의 분석이 있다면 이것을 결정하는 데 도움이 될 것입니다.) 모바일 장치가 대상인 경우 "세로" 비디오가 점점 인기를 얻고 있음을 고려할 수 있습니다. 수직 비디오를 생성하려면 일반적으로 너비와 높이 값을 교환합니다.

H.264 출력

높은 비트 전송률과 낮은 비트 전송률을 대상으로하는 2 개의 H.264 파일을 만드는 것부터 시작하겠습니다.

{
    "label": "low",
    "format": "mp4",
    "video_bitrate": 200,
    "decoder_bitrate_cap": 300,
    "decoder_buffer_size": 1200,
    "audio_sample_rate": 44100,
    "height": "288",
    "url": "s3://example-bucket/low.mp4",
    "h264_reference_frames": 1,
    "forced_keyframe_rate": "0.1",
    "audio_bitrate": 56,
    "decimate": 2
},
{
    "label": "high",
    "format": "mp4",
    "video_bitrate": 1000,
    "decoder_bitrate_cap": 1500,
    "decoder_buffer_size": 6000,
    "audio_sample_rate": 44100,
    "height": "432",
    "url": "s3://example-bucket/high.mp4",
    "h264_reference_frames": "auto",
    "h264_profile": "main",
    "forced_keyframe_rate": "0.1",
    "audio_bitrate": 56
}

이러한 출력의 결과 파일은 다양한 장치에서 재생할 수 있습니다. 각기 다른 비트 전송률과 해상도를 목표로하므로 사용자에게 적절한 파일을 보낼 수 있습니다. 또한 각각은 HTTP 라이브 스트리밍을위한 세그먼트 화 및 적응 형 비트 레이트 스트림 역할을하는 데 적합합니다.

위 요청의 몇 가지 옵션은 다음과 같습니다.

  • forced_keyframe_rate 0.1로. 이렇게하면 비디오가 10 초마다 키 프레임을 갖게됩니다. 분할 된 파일의 길이는 10 초이므로 각 세그먼트가 키 프레임으로 시작되도록합니다.
  • decoder_bitrate_cap파일의 목표 비트 전송률의 1.5 배로 설정됩니다. decoder_buffer_size파일의 대상 비트 전송률의 3.5x에서 5x로 설정됩니다. 이러한 설정은 파일 전체에서 일관된 비트 전송률을 유지하는 데 도움이 되므로 세그먼트화된 세그먼트의 크기와 비트 전송률이 너무 많이 변하지 않습니다.

이제 H.264 파일이 생성되었으므로 추가 인코딩을 수행 할 필요없이 소스에서 HTTP 라이브 스트리밍 세그먼트 파일을 생성하기위한 추가 출력을 요청에 추가 할 수 있습니다.

분할 된 출력

위의 각 H.264 비디오 및 오디오 출력에는labels API 옵션에서. 이 레이블은 다음과 함께 사용할 수 있습니다. source입력 파일이 아닌 지정된 레이블이있는 출력에서 생성 된 비디오를 사용하도록 Zencoder에 지시하는 옵션입니다. H.264 파일은 이미 HLS에 적합한 설정이므로 추가 인코딩이 필요하지 않습니다.

{
    "source": "low",
    "format": "ts",
    "copy_audio": "true",
    "copy_video": "true",
    "url": "s3://example-bucket/hls-low/hls-low.m3u8",
    "label": "hls-low",
    "type": "segmented"
}
{
    "source": "high",
    "format": "ts",
    "copy_audio": "true",
    "copy_video": "true",
    "url": "s3://example-bucket/hls-high/hls-high.m3u8",
    "label": "hls-high",
    "type": "segmented"
}
{
    "streams": [
    {
        "path": "hls-low/hls-low.m3u8",
        "bandwidth": 256
    },
    {
        "path": "hls-high/hls-high.m3u8",
        "bandwidth": 1056
    }
    ],
    "type": "playlist",
    "url": "s3://example-bucket/playlist.m3u8"
}

이러한 출력의 결과 파일은 다양한 대역폭을 대상으로하는 세그먼트 출력과 재생 장치가 사용 가능한 스트림을 알 수있는 재생 목록 파일입니다.

분할 된 각 출력에는source , 이전에 나열된 출력 중 하나를 지정합니다. 그들은 또한 포함합니다copy_audiocopy_video옵션은 Zencoder에게 소스 파일의 오디오 및 비디오 스트림을 사용하고 트랜스 코딩하는 대신 새 컨테이너에 다시 패키징하도록 지시합니다. 마지막으로 출력은type세그먼트 및format ts의 플러스 a url확장자가 .m3u8이므로 Zencoder는 분할 된 HLS 파일을 생성 할 수 있습니다.

마지막으로 세그먼트 화 된 각 출력을 참조하는 재생 목록도 생성됩니다. 재생 목록에서 참조 된 첫 번째 파일은 낮은 비트 전송률 비디오입니다. 동영상을 재생하는 기기는 일반적으로 처음에 재생 목록에 나열된 첫 번째 스트림을로드하고 필요에 따라 다른 스트림으로 전환합니다. 이는 재생의 처음 10 초가이 스트림을 사용한다는 것을 의미하며, 그 후 장치는 재생할 적절한 스트림을 선택하기에 충분한 정보를 갖게됩니다.

참고 사항

  • HLS 재생 목록 생성은 현재 작업에있는 다른 출력의 정보를 사용하지 않지만 올바른 형식의 적응 형 비트 레이트 재생 목록을 쉽게 생성하고 다른 파일과 함께 업로드하는 방법입니다.
  • iOS 장치에서 생성 된 적응 비트 전송률 재생 목록을 재생하지만 VLC는 상대 URL 처리 오류로 인해 발생하지 않습니다. 매니페스트 파일의 디렉토리가 아닌 재생 목록 파일과 동일한 디렉토리에서 세그먼트 파일을 찾습니다.

전체 요청

이제 각 주요 출력 섹션을 살펴 보았으므로이를 단일 API 요청으로 가져와 보겠습니다.

{
    "input": "s3://zencodertesting/test.mov",
    "outputs": [
    {
        "label": "low",
        "format": "mp4",
        "video_bitrate": 200,
        "decoder_bitrate_cap": 300,
        "decoder_buffer_size": 1200,
        "audio_sample_rate": 44100,
        "height": "288",
        "url": "s3://example-bucket/low.mp4",
        "h264_reference_frames": 1,
        "forced_keyframe_rate": "0.1",
        "audio_bitrate": 56,
        "decimate": 2
    },
    {
        "label": "high",
        "format": "mp4",
        "video_bitrate": 1000,
        "decoder_bitrate_cap": 1500,
        "decoder_buffer_size": 6000,
        "audio_sample_rate": 44100,
        "height": "432",
        "url": "s3://example-bucket/high.mp4",
        "h264_reference_frames": "auto",
        "h264_profile": "main",
        "forced_keyframe_rate": "0.1",
        "audio_bitrate": 56
    },
    {
        "source": "low",
        "format": "ts",
        "copy_audio": "true",
        "copy_video": "true",
        "url": "s3://example-bucket/hls-low/hls-low.m3u8",
        "label": "hls-low",
        "type": "segmented"
    }
    {
        "source": "high",
        "format": "ts",
        "copy_audio": "true",
        "copy_video": "true",
        "url": "s3://example-bucket/hls-high/hls-high.m3u8",
        "label": "hls-high",
        "type": "segmented"
    }
    {
        "streams": [
        {
            "path": "hls-low/hls-low.m3u8",
            "bandwidth": 256
        },
        {
            "path": "hls-high/hls-high.m3u8",
            "bandwidth": 1056
        }
        ],
        "type": "playlist",
        "url": "s3://example-bucket/playlist.m3u8"
    }
    ]
}