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)
Change History (2)
by , 11 years ago
Attachment: | MP4-Apple264-AACPlus.mp4 added |
---|
comment:1 by , 20 months ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
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.