Opened 11 years ago

Closed 20 months ago

#1819 closed defect (invalid)

Wrong number of channels reported for HE-AAC stream in MP4

Reported by: mbradshaw Owned by:
Priority: normal Component: undetermined
Version: git-master Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:

I have an MP4 file containing H264 video and an HE-AAC stream. I'm quite positive the HE-AAC stream is stereo, but in some cases gets reported as mono by FFmpeg. The dump info from FFmpeg shows it as stereo, but ffprobe -show_streams shows it as mono. However, if I remux it to a plain .aac file, ffprobe-show_streams then shows it as stereo. See the below command lines.

I noticed this problem when using the C API. After opening the MP4 and calling avformat_find_stream_info(), the HE-AAC stream->codec (AVCodecContext) had a reported channels of 2 and channel_layout of 3 (stereo). However, once I opened the codec to decode (by calling avcodec_open2()), stream->codec's attributes changed and now channels was 1 and channel_layout was 4 (mono). Original discussion can be seen at http://ffmpeg.org/pipermail/libav-user/2012-October/002857.html

QuickTime and Windows Media Player both say the file is mono when inspecting the file, but I don't believe they are correct. MediaInfo shows the file as stereo.

Logs:

ffprobe -show_treams on the MP4: (note the dump shows stereo, but the [STREAM] shows 1 channel)

./ffprobe -show_streams -select_streams 0 ~/MP4-Apple264-AACPlus.mp4
ffprobe version N-45341-g3632f35 Copyright (c) 2007-2012 the FFmpeg developers
  built on Oct 11 2012 16:10:23 with gcc 4.2.1 (GCC) (Apple Inc. build
5666) (dot 3)
  configuration: --enable-libopenjpeg --enable-libx264 --enable-gpl
  libavutil      51. 74.100 / 51. 74.100
  libavcodec     54. 65.100 / 54. 65.100
  libavformat    54. 32.100 / 54. 32.100
  libavdevice    54.  3.100 / 54.  3.100
  libavfilter     3. 19.102 /  3. 19.102
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 16.100 /  0. 16.100
  libpostproc    52.  1.100 / 52.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
'/Users/mjbshaw/MP4-Apple264-AACPlus.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isomavc1
    creation_time   : 2012-01-16 21:01:41
    encoder         : Sorenson Squeeze
  Duration: 00:00:11.19, start: 0.000000, bitrate: 789 kb/s
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz,
stereo, s16, 32 kb/s
    Metadata:
      creation_time   : 2012-01-16 21:01:41
      handler_name    : soun
    Stream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p,
480x360, 765 kb/s, 23.98 fps, 23.98 tbr, 23976 tbn, 47952 tbc
    Metadata:
      creation_time   : 2012-01-16 21:01:41
      handler_name    : vide
    Stream #0:2(und): Data: none (mp4s / 0x7334706D)
    Metadata:
      creation_time   : 2012-01-16 21:01:57
      handler_name    : sdsm
    Stream #0:3(und): Data: none (mp4s / 0x7334706D)
    Metadata:
      creation_time   : 2012-01-16 21:01:57
      handler_name    : odsm
Unsupported codec with id 0 for input stream 2
Unsupported codec with id 0 for input stream 3
[STREAM]
index=0
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=unknown
codec_type=audio
codec_time_base=1/22050
codec_tag_string=mp4a
codec_tag=0x6134706d
sample_fmt=s16
sample_rate=44100
channels=1
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/44100
start_pts=0
start_time=0.000000
duration_ts=493568
duration=11.192018
bit_rate=32000
nb_frames=241
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
TAG:creation_time=2012-01-16 21:01:41
TAG:language=und
TAG:handler_name=soun
[/STREAM]

ffprobe -show_frames: (every frame has 2 channels)

$ ./ffprobe -show_frames -select_streams 0 ~/MP4-Apple264-AACPlus.mp4
ffprobe version N-45341-g3632f35 Copyright (c) 2007-2012 the FFmpeg developers
  built on Oct 11 2012 16:10:23 with gcc 4.2.1 (GCC) (Apple Inc. build
5666) (dot 3)
  configuration: --enable-libopenjpeg --enable-libx264 --enable-gpl
  libavutil      51. 74.100 / 51. 74.100
  libavcodec     54. 65.100 / 54. 65.100
  libavformat    54. 32.100 / 54. 32.100
  libavdevice    54.  3.100 / 54.  3.100
  libavfilter     3. 19.102 /  3. 19.102
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 16.100 /  0. 16.100
  libpostproc    52.  1.100 / 52.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from
'/Users/mjbshaw/MP4-Apple264-AACPlus.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isomavc1
    creation_time   : 2012-01-16 21:01:41
    encoder         : Sorenson Squeeze
  Duration: 00:00:11.19, start: 0.000000, bitrate: 789 kb/s
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz,
stereo, s16, 32 kb/s
    Metadata:
      creation_time   : 2012-01-16 21:01:41
      handler_name    : soun
    Stream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p,
480x360, 765 kb/s, 23.98 fps, 23.98 tbr, 23976 tbn, 47952 tbc
    Metadata:
      creation_time   : 2012-01-16 21:01:41
      handler_name    : vide
    Stream #0:2(und): Data: none (mp4s / 0x7334706D)
    Metadata:
      creation_time   : 2012-01-16 21:01:57
      handler_name    : sdsm
    Stream #0:3(und): Data: none (mp4s / 0x7334706D)
    Metadata:
      creation_time   : 2012-01-16 21:01:57
      handler_name    : odsm
Unsupported codec with id 0 for input stream 2
Unsupported codec with id 0 for input stream 3
[FRAME]
media_type=audio
key_frame=1
pkt_pts=0
pkt_pts_time=0.000000
pkt_dts=0
pkt_dts_time=0.000000
pkt_duration=2048
pkt_duration_time=0.046440
pkt_pos=6211
sample_fmt=s16
nb_samples=2048
channels=2
channel_layout=stereo
[/FRAME]
[FRAME]
media_type=audio
key_frame=1
pkt_pts=2048
pkt_pts_time=0.046440
pkt_dts=2048
pkt_dts_time=0.046440
pkt_duration=2048
pkt_duration_time=0.046440
pkt_pos=24505
sample_fmt=s16
nb_samples=2048
channels=2
channel_layout=stereo
[/FRAME]
[...and so on; every frame has channels=2...]

Remuxing the HE-AAC stream to plain .aac:

$ ./ffmpeg -i ~/MP4-Apple264-AACPlus.mp4 -acodec copy -vn ~/out.aac
ffmpeg version N-45342-g6efe1ed Copyright (c) 2000-2012 the FFmpeg developers
  built on Oct 13 2012 10:34:47 with gcc 4.2.1 (GCC) (Apple Inc. build 5666) (dot 3)
  configuration: --enable-libopenjpeg --enable-libx264 --enable-gpl
  libavutil      51. 74.100 / 51. 74.100
  libavcodec     54. 65.100 / 54. 65.100
  libavformat    54. 32.100 / 54. 32.100
  libavdevice    54.  3.100 / 54.  3.100
  libavfilter     3. 19.102 /  3. 19.102
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 16.100 /  0. 16.100
  libpostproc    52.  1.100 / 52.  1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/Users/mjbshaw/MP4-Apple264-AACPlus.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isomavc1
    creation_time   : 2012-01-16 21:01:41
    encoder         : Sorenson Squeeze
  Duration: 00:00:11.19, start: 0.000000, bitrate: 789 kb/s
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 32 kb/s
    Metadata:
      creation_time   : 2012-01-16 21:01:41
      handler_name    : soun
    Stream #0:1(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 480x360, 765 kb/s, 23.98 fps, 23.98 tbr, 23976 tbn, 47952 tbc
    Metadata:
      creation_time   : 2012-01-16 21:01:41
      handler_name    : vide
    Stream #0:2(und): Data: none (mp4s / 0x7334706D)
    Metadata:
      creation_time   : 2012-01-16 21:01:57
      handler_name    : sdsm
    Stream #0:3(und): Data: none (mp4s / 0x7334706D)
    Metadata:
      creation_time   : 2012-01-16 21:01:57
      handler_name    : odsm
File '/Users/mjbshaw/out.aac' already exists. Overwrite ? [y/N] y
Output #0, adts, to '/Users/mjbshaw/out.aac':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42isomavc1
    encoder         : Lavf54.32.100
    Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, 32 kb/s
    Metadata:
      creation_time   : 2012-01-16 21:01:41
      handler_name    : soun
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
Press [q] to stop, [?] for help
size=      45kB time=00:00:11.19 bitrate=  33.2kbits/s    
video:0kB audio:44kB subtitle:0 global headers:0kB muxing overhead 3.768232%

ffprobe -show_streams on the remuxed out.aac: (note the [STREAMS] now shows 2 channels)

$ ./ffprobe -show_streams ~/out.aac
ffprobe version N-45342-g6efe1ed Copyright (c) 2007-2012 the FFmpeg developers
  built on Oct 13 2012 10:34:47 with gcc 4.2.1 (GCC) (Apple Inc. build 5666) (dot 3)
  configuration: --enable-libopenjpeg --enable-libx264 --enable-gpl
  libavutil      51. 74.100 / 51. 74.100
  libavcodec     54. 65.100 / 54. 65.100
  libavformat    54. 32.100 / 54. 32.100
  libavdevice    54.  3.100 / 54.  3.100
  libavfilter     3. 19.102 /  3. 19.102
  libswscale      2.  1.101 /  2.  1.101
  libswresample   0. 16.100 /  0. 16.100
  libpostproc    52.  1.100 / 52.  1.100
[aac @ 0x10180ec00] max_analyze_duration 5000000 reached at 5015510
[aac @ 0x10180ec00] Estimating duration from bitrate, this may be inaccurate
Input #0, aac, from '/Users/mjbshaw/out.aac':
  Duration: 00:00:11.78, bitrate: 31 kb/s
    Stream #0:0: Audio: aac, 44100 Hz, stereo, s16, 31 kb/s
[STREAM]
index=0
codec_name=aac
codec_long_name=AAC (Advanced Audio Coding)
profile=unknown
codec_type=audio
codec_time_base=1/44100
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
sample_fmt=s16
sample_rate=44100
channels=2
bits_per_sample=0
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/28224000
start_pts=N/A
start_time=N/A
duration_ts=332743089
duration=11.789367
bit_rate=31524
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=0
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
[/STREAM]

Attachments (1)

MP4-Apple264-AACPlus.mp4 (1.1 MB ) - added by mbradshaw 11 years ago.

Download all attachments as: .zip

Change History (2)

by mbradshaw, 11 years ago

Attachment: MP4-Apple264-AACPlus.mp4 added

comment:1 by Balling, 20 months ago

Resolution: invalid
Status: newclosed

This is not quite like with v1 of HE-AAC. v2 was always treating mono as stereo. This works as intended. Also right channel is very different in fact.

Note: See TracTickets for help on using tickets.