• Home
Name Date Size #Lines LOC

..--

.github/04-Jul-2025-11086

docs/04-Jul-2025-335261

external/04-Jul-2025-726669

gh_pages/04-Jul-2025-497447

iamf/04-Jul-2025-197,093167,641

.bazelrcD04-Jul-2025814 2620

.bazelversionD04-Jul-20255 11

.clang-formatD04-Jul-202588 54

.gitignoreD04-Jul-202511 32

Android.bpD04-Jul-20253.3 KiB10198

BUILDD04-Jul-2025128 105

CHANGELOG.mdD04-Jul-20253.6 KiB8969

CONTRIBUTING.mdD04-Jul-20251 KiB2921

LICENSED04-Jul-202516.1 KiB197143

METADATAD04-Jul-20251.2 KiB2724

MODULE.bazelD04-Jul-20251 KiB4340

MODULE_LICENSE_AOM_PATENTD04-Jul-20250

MODULE_LICENSE_BSDD04-Jul-20250

OWNERSD04-Jul-202552 31

PATENTSD04-Jul-20255.6 KiB10985

README.mdD04-Jul-20253.7 KiB10671

WORKSPACED04-Jul-20251.5 KiB5144

README.md

1# iamf-tools
2
3## What is IAMF?
4
5The [Immersive Audio Model and Formats](https://aomediacodec.github.io/iamf/)
6(IAMF) standard is defined by the Alliance for Open Media (AOM).
7
8## What is `iamf-tools`?
9
10`iamf-tools` implements tools to help users process and work with the IAMF
11format. These tools can be used as a complement to the `libiamf`
12[reference decoder](https://github.com/AOMediaCodec/libiamf/) and other tools
13such as [ffmpeg](https://ffmpeg.org/) and
14[MP4Box](https://github.com/gpac/gpac?tab=readme-ov-file#mp4box).
15
16### Encoding IAMF files
17
18There are multiple workflows for creating IAMF files, supporting different types
19of inputs.
20
21![IAMF encode workflows](docs/iamf-encode-workflows.svg "IAMF encode workflows")
22
23-   [Encode an ADM-BWF file to IAMF](#using-the-encoder-with-adm-bwf-input)
24-   [Encode wav files to IAMF using the iamf-tools encoder](#using-the-encoder-with-wav-files-and-proto-input)
25-   [Merge IAMF files and video into an mp4 file](docs/external/encoding_with_external_tools.md#merge-an-iamf-file-with-video-into-mp4)
26-   [Encode wav files to IAMF using ffmpeg](docs/external/encoding_with_external_tools.md#encode-wav-files-to-iamf-with-ffmpeg)
27
28### Decoding IAMF files
29
30The `libiamf` reference decoder is available at
31https://github.com/AOMediaCodec/libiamf/.
32
33### Web Demo
34
35The [web demo](https://aomediacodec.github.io/iamf-tools/web_demo/) hosted in
36the GitHub Pages of this repo decodes and renders standalone IAMF files to
37stereo and binaural wav files for preview and comparison.
38
39## Encoder
40
41The encoder can be used to encode a standalone IAMF Sequence (`.iamf`) file from
42a set of multichannel wav files or an ADM-BWF file.
43
44### Building the encoder
45
46See [Build instructions](docs/build_instructions.md) to build from source.
47
48### Using the encoder with wav files and proto input
49
50The `iamf-tools` encoder can be used to encode a set of multichannel wav files
51into an IAMF file. An accompanying input textproto file serves as the
52configuration file, specifying details such as channel layout, mix gains and
53codec to use for the underlying audio elements.
54
55Prepare up to two multichannel wav files and the input textproto file. See
56[Textproto templates](iamf/cli/textproto_templates) for some example input
57textprotos and details on how to customize them.
58
59Run the encoder. Specify the input file with `--user_metadata_filename`.
60
61Optional flags:
62
63-   `--input_wav_directory` controls the directory wav files are read from
64    (default `iamf/cli/testdata/`).
65-   `--output_iamf_directory` controls the output directory of the IAMF files.
66
67Using the encoder:
68
69```
70bazel-bin/iamf/cli/encoder_main --user_metadata_filename=iamf/cli/testdata/test_000002.textproto --output_iamf_directory=.
71```
72
73If this example is successful the encoder will produce an output
74`test_000002.iamf` file in the current directory.
75
76### Using the encoder with ADM-BWF input
77
78Run the encoder. Specify the input file with `--adm_filename`. See the
79`adm_to_user_metadata` [README.md](iamf/cli/adm_to_user_metadata) for details on
80the conversion.
81
82> [!WARNING]
83>
84> Some ADM conversions are a work in progress and are experimental
85> (b/392958726).
86
87Optional flags:
88
89-   `--output_iamf_directory` controls the output directory of the IAMF files.
90-   `--adm_importance_threshold` controls the threshold below which ADM
91    `audioObject`s are omitted (default 0).
92-   `--adm_frame_duration_ms` controls the frame size of the output IAMF in ms
93    (default 10).
94
95```
96bazel-bin/iamf/cli/encoder_main --adm_filename=path/to/adm.wav --output_iamf_directory=.
97```
98
99The encoder will produce an output `.iamf` file in the output directory, where
100the underlying audio streams are encoded with PCM.
101
102## License
103
104Released under the BSD 3-Clause Clear License. See [LICENSE](LICENSE) for
105details.
106