ebu / ebu_adm_renderer

The EBU ADM Renderer, written in Python, is the reference implementation of EBU Tech 3388
https://ear.readthedocs.io
BSD 3-Clause Clear License
79 stars 13 forks source link

How would one use `ear-render` to modify and/or replace channels' audio content ? #67

Closed npinto closed 8 months ago

npinto commented 8 months ago

I'm looking for a way to modify / replace audio content in the many channels that ADM BWF file can contain.

I've tried with ffmpeg but the is stripping away important metadata information (including the ADM aXML portion and chna dbmd).

Would using ear-render or associated library help in this context ?

tomjnixon commented 8 months ago

Hi,

This is what ear-utils dump_axml ear-utils replace_axml is intended to be used for:

# process the audio with ffmpeg
ffmpeg -i infile.wav ... audio.wav
# extract the axml
ear-utils dump_axml infile.wav > axml.xml
# edit it to match the new channel layout. the audioTrackUID IDs will need to match the track indices
# (i.e. ATU_00000001 is the first track) in order to generate the CHNA
vim axml.xml
# generate the output with the new audio and axml
ear-utils replace_axml -a axml.xml -g audio.wav outfile.wav

HOWEVER

You mentioned dbmd -- this is not supported at all by these tools.

In theory the bw64 reader can read this, probably with something like:

with openBw64(input) as infile:
    dbmd = infile.get_chunk_data(b'dbmd')

Unfortunately there's no way to write this with the bw64 writer as it stands. You could probably just copy and paste the axml bits in ear/fileio/bw64/writer.py if you really want to implement this.

It would be nice to add functionality to read and write arbitrary chunks with the tools for this kind of use, bit I don't have any immediate plans to do that.

npinto commented 8 months ago

Perfect. Thank you so much for the pointers.