Search code examples
audioffmpegvlcmediainfo

What is the best way to check if audio embedded in video is ambisonic?


We are making 360 video player for VR headsets using Unity. We are trying to achieve spatial audio. The easiest case is when video and audio are in separated files, but now we decided to support also videos with embedded audio. I need to know before i load video if audio is ambisonic or not. I'm looking for an easy way to decide if audio is ambisonic in order to separate it from video and convert to .tbe file, which is currently supported by our app.

I was trying to use ffmpeg:

$./ffmpeg.exe -i ~/Videos/video.mp4

and got:

ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8.3.1 (GCC) 20190414
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:/Users/Medion/Videos/video.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf57.56.101
  Duration: 00:11:39.40, start: 0.000000, bitrate: 17290 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160 [SAR 1:1 DAR 16:9], 16497 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Side data:
      stereo3d: top and bottom
      spherical: equirectangular (0.000000/0.000000/0.000000)
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 4.0, fltp, 778 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
    Stream #0:2(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 4.0, fltp, 4 kb/s
    Metadata:
      handler_name    : SoundHandler
    Stream #0:3(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 2 kb/s
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

but I don't see any line that could indicate that audio is ambisonic. I see that there are 4 channels in streams #0:1 and #0:2, but I bet it's not enough.

I've also tried MediaInfo but it's the same thing:

General
CompleteName                     : C:\Users\Medion\Videos\video.mp4
Format/String                    : MPEG-4
Format_Profile                   : Base Media
CodecID/String                   : isom (isom/iso2/avc1/mp41)
FileSize/String                  : 1.41 GiB
Duration/String                  : 11 min 39 s
OverallBitRate_Mode/String       : Variable
OverallBitRate/String            : 17.3 Mb/s
Encoded_Application/String       : Lavf57.56.101

Video
ID/String                        : 1
Format/String                    : AVC
Format/Info                      : Advanced Video Codec
Format_Profile                   : [email protected]
Format_Settings                  : CABAC / 3 Ref Frames
Format_Settings_CABAC/String     : Yes
Format_Settings_RefFrames/String : 3 frames
Format_Settings_GOP              : M=3, N=29
CodecID                          : avc1
CodecID/Info                     : Advanced Video Coding
Duration/String                  : 11 min 39 s
BitRate_Mode/String              : Variable
BitRate/String                   : 16.5 Mb/s
BitRate_Maximum/String           : 20.0 Mb/s
Width/String                     : 3 840 pixels
Height/String                    : 2 160 pixels
DisplayAspectRatio/String        : 16:9
FrameRate_Mode/String            : Constant
FrameRate/String                 : 29.970 (30000/1001) FPS
Standard                         : NTSC
ColorSpace                       : YUV
ChromaSubsampling/String         : 4:2:0
BitDepth/String                  : 8 bits
ScanType/String                  : Progressive
Bits-(Pixel*Frame)               : 0.066
StreamSize/String                : 1.34 GiB (95%)
Language/String                  : English
Tagged_Date                      : UTC 2017-06-13 17:37:51
colour_range                     : Limited
colour_primaries                 : BT.709
transfer_characteristics         : BT.709
matrix_coefficients              : BT.709
Codec configuration box          : avcC

Audio #1
ID/String                        : 2
Format/String                    : AAC LC
Format/Info                      : Advanced Audio Codec Low Complexity
CodecID                          : mp4a-40-2
Duration/String                  : 11 min 39 s
Source_Duration/String           : 11 min 39 s
BitRate_Mode/String              : Constant
BitRate/String                   : 779 kb/s
Channel(s)/String                : 4 channels
ChannelLayout                    : C L R Cb
SamplingRate/String              : 48.0 kHz
FrameRate/String                 : 46.875 FPS (1024 SPF)
Compression_Mode/String          : Lossy
StreamSize/String                : 64.9 MiB (5%)
Source_StreamSize/String         : 64.9 MiB (5%)
Default/String                   : Yes
AlternateGroup/String            : 1
Tagged_Date                      : UTC 2017-06-13 17:37:51

Audio #2
ID/String                        : 3
Format/String                    : AAC LC
Format/Info                      : Advanced Audio Codec Low Complexity
CodecID                          : mp4a-40-2
Duration/String                  : 11 min 39 s
Source_Duration/String           : 11 min 39 s
BitRate_Mode/String              : Variable
BitRate/String                   : 4 900 b/s
BitRate_Maximum/String           : 266 kb/s
Channel(s)/String                : 4 channels
ChannelLayout                    : C L R Cb
SamplingRate/String              : 48.0 kHz
FrameRate/String                 : 46.875 FPS (1024 SPF)
Compression_Mode/String          : Lossy
StreamSize/String                : 418 KiB (0%)
Source_StreamSize/String         : 418 KiB (0%)
Default/String                   : No
AlternateGroup/String            : 1
Tagged_Date                      : UTC 2017-06-13 17:37:51

Audio #3
ID/String                        : 4
Format/String                    : AAC LC
Format/Info                      : Advanced Audio Codec Low Complexity
CodecID                          : mp4a-40-2
Duration/String                  : 11 min 39 s
Source_Duration/String           : 11 min 39 s
BitRate_Mode/String              : Variable
BitRate/String                   : 2 275 b/s
BitRate_Maximum/String           : 128 kb/s
Channel(s)/String                : 2 channels
ChannelLayout                    : L R
SamplingRate/String              : 48.0 kHz
FrameRate/String                 : 46.875 FPS (1024 SPF)
Compression_Mode/String          : Lossy
StreamSize/String                : 194 KiB (0%)
Source_StreamSize/String         : 194 KiB (0%)
Default/String                   : No
AlternateGroup/String            : 1
Tagged_Date                      : UTC 2017-06-13 17:37:51

I assume that I don't know what to look for in those outputs. Thanks in advance.


Solution

  • MediaInfo development snapshots (mini 2190520-2) have now support of Spatial Audio RFC (draft) metadata (such metadata is in the file you provided as an example), and display information this way:

    Channel layout                           : Ambisonics (W X Y Z)