Each year, I get my 2nd year Spatial Audio students to produce a spatial audio production, which they can then attach 360 pictures to, and upload to YouTube (360 pictures are used, as I want the focus to be the audio).
How to do this was quite well documented soon after YouTube enabled the feature using a combination of FFMPEG and Google’s Spatial Media Tools on github.
YouTube’s spatial audio feature has had a rocky time over the years breaking for prolonged periods and then coming back, but although it’s currently working, I’ve found that the instructions and tools don’t work as they once did, so here’s my quick guide to what’s changed and how I currently get it to work (on an Apple Mac, but I’m assuming similar issues for Windows users, too – I’ll try and get round to testing on a Windows machine soon).
Assuming we have a video in .MOV format: 360PicVideo (it MUST be a .MOV)
Assuming we have a 4-channel 16 bit wave file in AmbiX format: AmbiX_1o.wav
I’ve found that using any channel mapping (i.e. -channel_layout 4.0) which is what I’ve always used in the past, now results in the channels being swapped in the resulting video file. The only way I can get the audio in the video to match the original audio (tested using both VLC and AVFoundation filters to read the video in Reaper) is to omit this command entirely – e.g.
ffmpeg -i AmbiX_1o.wav
-i 360PicVideo.mov
-map 0:a -map 1:v
-c:a copy -c:v copy
OutputVideoFinal.mov
Next, the video needs to be tagged using the Google Spatial Media Tools. However, I’ve found that the GUI.py version won’t tag the video as equirectangular anymore (using latest GITHUB version as of 29th June 2026). In order to get round this, we need to use the command line version instead – e.g.
python3 spatialmedia -i --spatial-audio OutputVideoFinal.mov OutputVideoFinal_injected.mov
I then carry out two checks to make sure this has worked.
- Run python3 spatialmedia OutputVideoFinal_injected.mov to inspect the metadata
- Load the video into Reaper and compare the audio with the wave file used as the input (this very quickly shows up channel swapping issues).
Output for 1. should look something like (it’s the true for Spherical and Stitched that’s missing when using the GUI version for me):
Track 0
Ambisonic Type: periphonic
Contains Head-Locked Stereo: False
Ambisonic Order: 1
Ambisonic Channel Ordering: ACN
Ambisonic Normalization: SN3D
Number of Channels: 4
Channel Map: [0, 1, 2, 3]
Track 1
Spherical = true
Stitched = true
StitchingSoftware = Spherical Metadata Tool
ProjectionType = equirectangular
The correct, and incorrect, channel mappings are shown in Reaper below, compared to the original audio file. Note channel 4 in the audio and correct video has been incorrectly mapped to channel 3 in the incorrect video (using -channel_layout 4.0):
I still need to do tests on whether this is a problem for YouTube, or if it fixes the mapping – I only came across the issue when I was troubleshooting the spatial media metadata problem!

Once figuring this out, my students are back to successfully creating YouTube videos with Spatial Audio – This one is based in and around Derby Cathedral (thanks to the Derby Cathedral staff for letting us come in a measure Ambisonic Impulse Responses for this!):
How to install FFMPEG and Python3 on a Mac: https://www.brucewiggins.co.uk/?p=781

















