Audio Channel Mapping
Channel Selection
Audio channels are numbered (starting at 1) across all of the audio tracks in a container. For example in a container with two stereo tracks A1 and A2, the channels are numbered 1/2 and 3/4 respectively.
Use the select
operator to map specific audio channels to an input stream.
For example the following composition maps the first 8 audio channels from the input1
container to separate surround
and stereo
input streams:
---
input:
container:
- name: input1
audio:
- name: surround
channels: 6
select:
channel:
- 1
- 2
- 3
- 4
- 5
- 6
- name: stereo
channels: 2
select:
channel:
- 7
- 8
output:
container:
- name: output1
audio:
- name: surround
- name: stereo
{
"input": {
"container": [
{
"name": "input1",
"audio": [
{
"name": "surround",
"channels": 6,
"select": {
"channel": [
1,
2,
3,
4,
5,
6
]
}
},
{
"name": "stereo",
"channels": 2,
"select": {
"channel": [
7,
8
]
}
}
]
}
]
},
"output": {
"container": [
{
"name": "output1",
"audio": [
{
"name": "surround"
},
{
"name": "stereo"
}
]
}
]
}
}
Channel Routing
When a job is submitted the select
operator routes channels based on the number of audio tracks found in the input container.
If input1
from the previous example has a single audio track a1
with 8 channels the streams will be routed as shown below:
---
input:
container:
- name: input1
audio:
- name: a1
channels: 8
output:
container:
- name: output1
audio:
- name: surround
channels: 6
route:
name: a1
channel:
- 1
- 2
- 3
- 4
- 5
- 6
- name: output2
audio:
- name: stereo
channels: 2
route:
name: a1
channel:
- 7
- 8
{
"input": {
"container": [
{
"name": "input1",
"audio": [
{
"name": "a1",
"channels": 8
}
]
}
]
},
"output": {
"container": [
{
"name": "output1",
"audio": [
{
"name": "surround",
"channels": 6,
"route": {
"name": "a1",
"channel": [
1,
2,
3,
4,
5,
6
]
}
}
]
},
{
"name": "output2",
"audio": [
{
"name": "stereo",
"channels": 2,
"route": {
"name": "a1",
"channel": [
7,
8
]
}
}
]
}
]
}
}
Alternatively, if input1
has 8 discreet audio tracks the streams will be routed as follows:
---
input:
container:
- name: input1
audio:
- name: a1
- name: a2
- name: a3
- name: a4
- name: a5
- name: a6
- name: a7
- name: a8
output:
container:
- name: output1
audio:
- name: surround
channels: 6
route:
channel:
- name: a1
channel: 1
- name: a2
channel: 1
- name: a3
channel: 1
- name: a4
channel: 1
- name: a5
channel: 1
- name: a6
channel: 1
- name: stereo
channels: 2
route:
channel:
- name: a7
channel: 1
- name: a8
channel: 1
{
"input": {
"container": [
{
"name": "input1",
"audio": [
{
"name": "a1"
},
{
"name": "a2"
},
{
"name": "a3"
},
{
"name": "a4"
},
{
"name": "a5"
},
{
"name": "a6"
},
{
"name": "a7"
},
{
"name": "a8"
}
]
}
]
},
"output": {
"container": [
{
"name": "output1",
"audio": [
{
"name": "surround",
"channels": 6,
"route": {
"channel": [
{
"name": "a1",
"channel": 1
},
{
"name": "a2",
"channel": 1
},
{
"name": "a3",
"channel": 1
},
{
"name": "a4",
"channel": 1
},
{
"name": "a5",
"channel": 1
},
{
"name": "a6",
"channel": 1
}
]
}
},
{
"name": "stereo",
"channels": 2,
"route": {
"channel": [
{
"name": "a7",
"channel": 1
},
{
"name": "a8",
"channel": 1
}
]
}
}
]
}
]
}
}
Speaker Selection
The select
operator can map audio channels based on speaker labels present in the container:
---
input:
container:
- name: input1
audio:
- name: surround
channels: 6
select:
channel:
- label: L
- label: R
- label: C
- label: LFE
- label: Ls
- label: Rs
- name: stereo
channels: 2
select:
channel:
- label: Lt
- label: Rt
output:
container:
- name: output1
audio:
- name: surround
- name: stereo
{
"input": {
"container": [
{
"name": "input1",
"audio": [
{
"name": "surround",
"channels": 6,
"select": {
"label": [
"L",
"R",
"C",
"LFE",
"Ls",
"Rs"
]
}
},
{
"name": "stereo",
"channels": 2,
"select": {
"label": [
"Lt",
"Rt"
]
}
}
]
}
]
},
"output": {
"container": [
{
"name": "output1",
"audio": [
{
"name": "surround"
},
{
"name": "stereo"
}
]
}
]
}
}
When a job is submitted the operator will route and, if necessary, reorder the channels to match the label
selection.
Speaker Assignment
If speaker labels are not present (or incorrect) they can be assigned (or overridden) using the label
property:
---
input:
container:
- name: input1
audio:
- name: surround
channels: 6
select:
channel:
- 1
- 2
- 3
- 4
- 5
- 6
label:
- L
- R
- C
- LFE
- Ls
- Rs
- name: stereo
channels: 2
select:
channel:
- 7
- 8
label:
- L
- R
output:
container:
- name: output1
audio:
- name: surround
- name: stereo
{
"input": {
"container": [
{
"name": "input1",
"audio": [
{
"name": "surround",
"channels": 6,
"select": {
"channel": [
1,
2,
3,
4,
5,
6
]
},
"label": [
"L",
"R",
"C",
"LFE",
"Ls",
"Rs"
]
},
{
"name": "stereo",
"channels": 2,
"select": {
"channel": [
7,
8
]
},
"label": [
"L",
"R"
]
}
]
}
]
},
"output": {
"container": [
{
"name": "output1",
"audio": [
{
"name": "surround"
},
{
"name": "stereo"
}
]
}
]
}
}
Program Selection
Channels with identical speaker labels are differentiated by the program number. For example the following composition selects two stereo programs:
---
input:
container:
- name: input1
audio:
- name: stereo1
channels: 2
select:
channel:
- label: L
program: 1
- label: R
program: 1
- name: stereo2
channels: 2
select:
channel:
- label: L
program: 2
- label: R
program: 2
output:
container:
- name: output1
audio:
- name: stereo1
- name: stereo2
{
"input": {
"container": [
{
"name": "input1",
"audio": [
{
"name": "stereo1",
"channels": 2,
"select": {
"channel": [
{
"label": "L",
"program": 1
},
{
"label": "R",
"program": 1
}
]
}
},
{
"name": "stereo2",
"channels": 2,
"select": {
"channel": [
{
"label": "L",
"program": 2
},
{
"label": "R",
"program": 2
}
]
}
}
]
}
]
},
"output": {
"container": [
{
"name": "output1",
"audio": [
{
"name": "stereo1"
},
{
"name": "stereo2"
}
]
}
]
}
}
Program Assignment
If program numbers are not present they can be assigned using the program
property:
---
input:
container:
- name: input1
audio:
- name: a1
channels: 4
label:
- L
- R
- L
- R
program:
- 1
- 1
- 2
- 2
output:
container:
- name: output1
audio:
- route:
channel:
- label: L
program: 1
- label: R
program: 1
- route:
channel:
- label: L
program: 1
- label: R
program: 1
{
"input": {
"container": [
{
"name": "input1",
"audio": [
{
"name": "a1",
"channels": 4,
"label": [
"L",
"R",
"L",
"R"
],
"program": [
1,
1,
2,
2
]
}
]
}
]
},
"output": {
"container": [
{
"name": "output1",
"audio": [
{
"route": {
"channel": [
{
"label": "L",
"program": 1
},
{
"label": "R",
"program": 1
}
]
}
},
{
"route": {
"channel": [
{
"label": "L",
"program": 1
},
{
"label": "R",
"program": 1
}
]
}
}
]
}
]
}
}
Channel Layout
By default each audio stream is mapped to a track in the output container. Use the layout
operator to map output channels to specific tracks. Audio channels are numbered (starting at 1) across all the audio tracks in an output container.
For example the following composition uses the select
operator to map the first 4 input channels to 2 stereo streams. The input1
container could have either single channel (mono), dual channel (stereo) or multi-channel audio tracks.
The track
property defines 4 single channels tracks in the output1
container. The layout
operator maps each stereo stream to specific output channels.
---
input:
container:
- name: input1
audio:
- name: stereo1
channels: 2
select:
channel:
- 1
- 2
- name: stereo2
channels: 2
select:
channel:
- 3
- 4
output:
container:
- name: output1
track:
audio:
- channels: 1
- channels: 1
- channels: 1
- channels: 1
audio:
- name: stereo1
layout:
channel:
- 1
- 2
- name: stereo2
layout:
channel:
- 3
- 4
{
"input": {
"container": [
{
"name": "input1",
"audio": [
{
"name": "stereo1",
"channels": 2,
"select": {
"channel": [
1,
2
]
}
},
{
"name": "stereo2",
"channels": 2,
"select": {
"channel": [
3,
4
]
}
}
]
}
]
},
"output": {
"container": [
{
"name": "output1",
"track": {
"audio": [
{
"channels": 1
},
{
"channels": 1
},
{
"channels": 1
},
{
"channels": 1
}
]
},
"audio": [
{
"name": "stereo1",
"layout": {
"channel": [
1,
2
]
}
},
{
"name": "stereo2",
"layout": {
"channel": [
3,
4
]
}
}
]
}
]
}
}
Optional Channels
Input audio channels may be treated as optional
using the select
operator.
If an input channel is not present it is replaced with silence in any output stream referencing that channel. If none of the input channels referenced by an output stream are present then the output stream is removed from the composition.
For example the following composition has an optional Spanish language stream on input channels 3/4:
---
input:
container:
- name: input1
audio:
- name: english
channels: 2
select:
channel:
- 1
- 2
- name: spanish
optional: true
channels: 2
select:
channel:
- 3
- 4
output:
container:
- name: output1
audio:
- name: english
language: 'eng'
- name: spanish
language: 'spa'
{
"input": {
"container": [
{
"name": "input1",
"audio": [
{
"name": "english",
"channels": 2,
"select": {
"channel": [
1,
2
]
}
},
{
"name": "spanish",
"optional": true,
"channels": 2,
"select": {
"channel": [
3,
4
]
}
}
]
}
]
},
"output": {
"container": [
{
"name": "output1",
"audio": [
{
"name": "english",
"language": "eng"
},
{
"name": "spanish",
"language": "spa"
}
]
}
]
}
}
Updated about 1 year ago