Esta página mostra alguns exemplos de configuração para codificação de um arquivo de mídia de
entrada (ou seja, um
ElementaryStream
).
Stream de vídeo
As propriedades de
VideoStream
não têm dependências umas com as outras. É possível definir propriedades como
resolução (altura e largura), taxa de bits e frame rate de forma independente.
{
"videoStream": {
"h264": {
"profile": "high",
"preset": "veryfast",
"heightPixels": 360,
"widthPixels": 640,
"pixelFormat": "yuv420p",
"bitrateBps": 550000,
"rateControlMode": "vbr",
"crfLevel": 21,
"vbvSizeBits": 550000,
"vbvFullnessBits": 495000,
"gopDuration": "3s",
"entropyCoder": "cabac",
"bFrameCount": 3,
"frameRate": 30,
"aqStrength": 1
}
},
"key": "video-stream0"
}
Stream de áudio
Determinadas propriedades
AudioStream
dependem umas das outras. O valor da propriedade channelCount
precisa ser
igual ao número de layouts na matriz channelLayout
. Esse valor também precisa ser
igual ao número de canais em um
stream de entrada mapeada.
Stream de áudio básico
Veja a seguir um exemplo de stream de áudio não combinado e não mapeado.
{
"audioStream": {
"codec": "aac",
"bitrateBps": 64000,
"channelCount": 2,
"channelLayout": [
"fl",
"fr"
],
"sampleRateHertz": 48000
},
"key": "audio-stream0"
}
Stream de áudio com mapeamento
Veja a seguir um exemplo de stream de áudio mapeado por entrada. O AudioStream
de saída estéreo
é composto das seguintes entradas:
- Faixa 1
- Canal 0
- Faixa 1
- Canal 1
O valor da propriedade channelCount
precisa ser igual ao número de objetos definidos em mapping
, cada um com o próprio outputChannel
.
{
"key": "audio-stream0",
"audioStream": {
"codec": "aac",
"bitrateBps": 64000,
"channelCount": 2,
"channelLayout": [
"fl",
"fr"
],
"sampleRateHertz": 48000,
"mapping": [
{
"atomKey": "atom0",
"inputKey": "video_and_stereo_audio",
"inputTrack": 1,
"inputChannel": 0,
"outputChannel": 0,
"gainDb": 0
},
{
"atomKey": "atom0",
"inputKey": "video_and_stereo_audio",
"inputTrack": 1,
"inputChannel": 1,
"outputChannel": 1,
"gainDb": 0
}
]
}
}
Stream de áudio com mixagem
Veja a seguir um exemplo de stream de áudio mixado. O AudioStream
de saída estéreo
é composto das seguintes entradas:
- Faixa 2
- Canal 0
- Canal 2
- Canal 4
- Faixa 2
- Canal 1
- Canal 3
- Canal 5
{
"key": "audio-stream0",
"audioStream": {
"codec": "aac",
"bitrateBps": 128000,
"channelCount": 2,
"mapping": [
{
"atomKey": "atom0",
"inputKey": "video_and_stereo_audio",
"inputTrack": 2,
"inputChannel": 0,
"outputChannel": 0,
"gainDb": 0
},
{
"atomKey": "atom0",
"inputKey": "video_and_stereo_audio",
"inputTrack": 2,
"inputChannel": 2,
"outputChannel": 0,
"gainDb": 0
},
{
"atomKey": "atom0",
"inputKey": "video_and_stereo_audio",
"inputTrack": 2,
"inputChannel": 4,
"outputChannel": 0,
"gainDb": 0
},
{
"atomKey": "atom0",
"inputKey": "video_and_stereo_audio",
"inputTrack": 2,
"inputChannel": 1,
"outputChannel": 1,
"gainDb": 0
},
{
"atomKey": "atom0",
"inputKey": "video_and_stereo_audio",
"inputTrack": 2,
"inputChannel": 3,
"outputChannel": 1,
"gainDb": 0
},
{
"atomKey": "atom0",
"inputKey": "video_and_stereo_audio",
"inputTrack": 2,
"inputChannel": 5,
"outputChannel": 1,
"gainDb": 0
},
"sampleRateHertz": 44100
}
}
Stream de texto
As propriedades de
TextStream
não têm dependências umas com as outras. É possível definir propriedades de
maneira independente.
Os streams de texto podem usar uma lista de edição para modificar o arquivo de saída. As seções a seguir destacam o uso da lista de edição para fornecer legendas.
O exemplo a seguir mostra um stream de texto com um atom na lista de edição.
{
"editList":[
{
"key":"atom0",
"inputs":[
"video_input0",
"caption_input0"
],
"startTimeOffset":"0s",
"endTimeOffset":"300s"
}
],
"elementaryStreams":[
{
"key": "cea-stream0",
"textStream": {
"codec": "cea708",
"mapping": [
{
"atomKey": "atom0",
"inputKey": "caption_input0",
"inputTrack": 0
}
]
}
}
]
}
O exemplo a seguir mostra um stream de texto com dois atoms na lista de edição.
{
"editList":[
{
"key":"atom0",
"inputs":[
"video_input0",
"caption_input0"
],
"startTimeOffset":"0s",
"endTimeOffset":"300s"
},
{
"key":"atom1",
"inputs":[
"video_input1",
"caption_input1"
],
"startTimeOffset":"0s",
"endTimeOffset":"300s"
}
],
"elementaryStreams":[
{
"key": "cea-stream0",
"textStream": {
"codec": "cea708",
"mapping": [
{
"atomKey": "atom0",
"inputKey": "caption_input0",
"inputTrack": 0
},
{
"atomKey": "atom1",
"inputKey": "caption_input1",
"inputTrack": 0
}
]
}
}
]
}
Avançado
As seções a seguir descrevem várias configurações avançadas.
MuxStream e fmp4
Um MuxStream
que usa o contêiner fmp4 pode conter apenas um único ElementaryStream
.
Para esse contêiner, use dois MuxStreams
: um para áudio e outro para vídeo:
"muxStreams":[
{
"key": "hd3-video",
"container": "fmp4",
"elementaryStreams":["video-stream1"]
},
{
"key": "hd3-audio",
"container": "fmp4",
"elementaryStreams":["audio-stream1"]
}
],
Como reutilizar streams em vários manifestos
O exemplo de configuração a seguir mostra duas codificações de vídeo e uma de áudio usadas nos manifestos HLS e DASH:
{
"config": {
"inputs": [
{
"key": "input0",
"uri": "gs://GCS_BUCKET_NAME/GCS_INPUT_VIDEO"
}
],
"elementaryStreams": [
{
"videoStream": {
"h264": {
"heightPixels": 360,
"widthPixels": 640,
"bitrateBps": 500000,
"frameRate": 30
}
},
"key": "video-stream0"
},
{
"videoStream": {
"h264": {
"heightPixels": 720,
"widthPixels": 1280,
"bitrateBps": 3200000,
"frameRate": 30
}
},
"key": "video-stream1"
},
{
"audioStream": {
"codec": "aac",
"bitrateBps": 64000,
"sampleRateHertz": 48000
},
"key": "audio-stream0"
}
],
"muxStreams": [
{
"key": "video-only-sd",
"container": "fmp4",
"elementaryStreams": [
"video-stream0"
]
},
{
"key": "video-only-hd",
"container": "fmp4",
"elementaryStreams": [
"video-stream1"
]
},
{
"key": "audio-only",
"container": "fmp4",
"elementaryStreams": [
"audio-stream0"
]
}
],
"manifests": [
{
"fileName": "manifest.m3u8",
"type": "HLS",
"muxStreams": [
"video-only-sd",
"video-only-hd",
"audio-only"
]
},
{
"fileName": "manifest.mpd",
"type": "DASH",
"muxStreams": [
"video-only-sd",
"video-only-hd",
"audio-only"
]
}
],
"output": {
"uri": "gs://GCS_BUCKET_NAME/GCS_OUTPUT_VIDEO"
}
}
}