FFmpeg media info incorrect when encoding aac audio track

-1

I recently dipped my feet into encoding with FFmpeg. It's been working fine for me apart form 1 issues I have noticed recently. When I try and re-encode an audio track to acc the media info tags are somewhat wrong. Bitrate, streamsize etc seems to be copied form the source as opposed to reading it from the new track.

Essentially I want to copy the source video, audio and subtitles and also create an AAC version of the soundtrack for playback on devices that don't support HD audio.

Below is an example of what I am doing:

ffmpeg -i source.mkv -map_chapters 0 -map 0:v -c:v copy -c:s copy -map 0:a -c:a:0 copy -map 0:a c:a:1 aac destination.mkv

This results in a media info of:

Audio #1
ID                                       : 2
Format                                   : MLP FBA 16-ch
Format/Info                              : Meridian Lossless Packing FBA with 16-channel presentation
Commercial name                          : Dolby TrueHD with Dolby Atmos
Codec ID                                 : A_TRUEHD
Duration                                 : 1 h 50 min
Bit rate mode                            : Variable
Bit rate                                 : 3 545 kb/s
Maximum bit rate                         : 5 826 kb/s
Channel(s)                               : 8 channels
Channel layout                           : L R C LFE Ls Rs Lb Rb
Sampling rate                            : 48.0 kHz
Frame rate                               : 1 200.000 FPS (40 SPF)
Bit depth                                : 24 bits
Compression mode                         : Lossless
Delay relative to video                  : 21 ms
Stream size                              : 2.73 GiB (29%)
Title                                    : Dolby TrueHD 7.1 (Atmos)
Language                                 : English
Default                                  : Yes
Forced                                   : No
Number of dynamic objects                : 11
Bed channel count                        : 1 channel
Bed channel configuration                : LFE

Audio #2
ID                                       : 3
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : A_AAC-2
Duration                                 : 1 h 50 min
Bit rate                                 : 3 545 kb/s
Channel(s)                               : 8 channels
Channel layout                           : C L R Ls Rs Lb Rb LFE
Sampling rate                            : 48.0 kHz
Frame rate                               : 46.875 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 2.73 GiB (29%)
Title                                    : AAC 5.1
Writing library                          : Lavc58.62.100 aac
Language                                 : English
Default                                  : Yes
Forced                                   : No

As you can see the bit rate, stream size, etc is copied from the source track which is incorrect. I've tried the -map_metadata -1 but that removes the metadata without creating a new one and also removed it from all video and audio tracks which I don't want.

Any other ideas what I am doing wrong or is this just a quirk of the software?

Thanks in advance.

Adding -report output trimming the lines "Writing block of size..." as the file is huge:

ffmpeg started on 2019-12-04 at 14:31:25
Report written to "ffmpeg-20191204-143125.log"
Log level: 48
Command line:
"C:\\ffmpeg\\ffmpeg-20191118-d831edc-win64-static\\bin\\ffmpeg" -i input.mkv -report -map_chapters 0 -map 0:v -c:v copy -c:s copy -map 0:a -c:a:0 copy -map 0:a -c:a:1 aac destination.mkv
ffmpeg version git-2019-11-18-d831edc Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20191010
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --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-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt --enable-amf
  libavutil      56. 36.100 / 56. 36.100
  libavcodec     58. 62.100 / 58. 62.100
  libavformat    58. 35.100 / 58. 35.100
  libavdevice    58.  9.101 / 58.  9.101
  libavfilter     7. 66.100 /  7. 66.100
  libswscale      5.  6.100 /  5.  6.100
  libswresample   3.  6.100 /  3.  6.100
  libpostproc    55.  6.100 / 55.  6.100
Splitting the commandline.
Reading option '-i' ... matched as input url with argument 'input.mkv'.
Reading option '-report' ... matched as option 'report' (generate a report) with argument '1'.
Reading option '-map_chapters' ... matched as option 'map_chapters' (set chapters mapping) with argument '0'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:v'.
Reading option '-c:v' ... matched as option 'c' (codec name) with argument 'copy'.
Reading option '-c:s' ... matched as option 'c' (codec name) with argument 'copy'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:a'.
Reading option '-c:a:0' ... matched as option 'c' (codec name) with argument 'copy'.
Reading option '-map' ... matched as option 'map' (set input stream mapping) with argument '0:a'.
Reading option '-c:a:1' ... matched as option 'c' (codec name) with argument 'aac'.
Reading option 'destination.mkv' ... matched as output url.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option report (generate a report) with argument 1.
Successfully parsed a group of options.
Parsing a group of options: input url input.mkv.
Successfully parsed a group of options.
Opening an input file: input.mkv.
[NULL @ 000001b290ddad00] Opening 'input.mkv' for reading
[file @ 000001b290ddbe00] Setting default whitelist 'file,crypto'
[matroska,webm @ 000001b290ddad00] Format matroska,webm probed with size=2048 and score=100
st:0 removing common factor 1000000 from timebase
st:1 removing common factor 1000000 from timebase
[matroska,webm @ 000001b290ddad00] Before avformat_find_stream_info() pos: 5080 bytes read:32768 seeks:0 nb_streams:2
[hevc @ 000001b290ddeb80] nal_unit_type: 32(VPS), nuh_layer_id: 0, temporal_id: 0
[hevc @ 000001b290ddeb80] Decoding VPS
[hevc @ 000001b290ddeb80] Main 10 profile bitstream
[hevc @ 000001b290ddeb80] nal_unit_type: 33(SPS), nuh_layer_id: 0, temporal_id: 0
[hevc @ 000001b290ddeb80] Decoding SPS
[hevc @ 000001b290ddeb80] Main 10 profile bitstream
[hevc @ 000001b290ddeb80] Decoding VUI
[hevc @ 000001b290ddeb80] nal_unit_type: 34(PPS), nuh_layer_id: 0, temporal_id: 0
[hevc @ 000001b290ddeb80] Decoding PPS
[hevc @ 000001b290ddeb80] nal_unit_type: 39(SEI_PREFIX), nuh_layer_id: 0, temporal_id: 0
[hevc @ 000001b290ddeb80] Decoding SEI
[hevc @ 000001b290ddeb80] nal_unit_type: 39(SEI_PREFIX), nuh_layer_id: 0, temporal_id: 0
[hevc @ 000001b290ddeb80] Decoding SEI
[hevc @ 000001b290ddeb80] nal_unit_type: 39(SEI_PREFIX), nuh_layer_id: 0, temporal_id: 0
[hevc @ 000001b290ddeb80] Decoding SEI
[hevc @ 000001b290ddeb80] Skipped PREFIX SEI 5
[matroska,webm @ 000001b290ddad00] All info found
[matroska,webm @ 000001b290ddad00] After avformat_find_stream_info() pos: 10219 bytes read:32768 seeks:0 frames:4
Input #0, matroska,webm, from 'input.mkv':
  Metadata:
    title           : input
    ENCODER         : Lavf58.35.100
  Duration: 01:50:06.89, start: 0.000000, bitrate: 11569 kb/s
    Chapter #0:0: start 0.000000, end 308.766792
    Metadata:
      title           : Chapter 01
    Chapter #0:1: start 308.766792, end 679.720708
    Metadata:
      title           : Chapter 02
    Chapter #0:2: start 679.720708, end 904.820583
    Metadata:
      title           : Chapter 03
    Chapter #0:3: start 904.820583, end 1282.781500
    Metadata:
      title           : Chapter 04
    Chapter #0:4: start 1282.781500, end 1487.736250
    Metadata:
      title           : Chapter 05
    Chapter #0:5: start 1487.736250, end 1846.177667
    Metadata:
      title           : Chapter 06
    Chapter #0:6: start 1846.177667, end 2116.531083
    Metadata:
      title           : Chapter 07
    Chapter #0:7: start 2116.531083, end 2443.858083
    Metadata:
      title           : Chapter 08
    Chapter #0:8: start 2443.858083, end 2731.979250
    Metadata:
      title           : Chapter 09
    Chapter #0:9: start 2731.979250, end 3178.383542
    Metadata:
      title           : Chapter 10
    Chapter #0:10: start 3178.383542, end 3636.507875
    Metadata:
      title           : Chapter 11
    Chapter #0:11: start 3636.507875, end 3867.488625
    Metadata:
      title           : Chapter 12
    Chapter #0:12: start 3867.488625, end 4208.037167
    Metadata:
      title           : Chapter 13
    Chapter #0:13: start 4208.037167, end 4502.372875
    Metadata:
      title           : Chapter 14
    Chapter #0:14: start 4502.372875, end 4853.431917
    Metadata:
      title           : Chapter 15
    Chapter #0:15: start 4853.431917, end 5267.470542
    Metadata:
      title           : Chapter 16
    Chapter #0:16: start 5267.470542, end 5543.329458
    Metadata:
      title           : Chapter 17
    Chapter #0:17: start 5543.329458, end 5847.132958
    Metadata:
      title           : Chapter 18
    Chapter #0:18: start 5847.132958, end 6150.269125
    Metadata:
      title           : Chapter 19
    Chapter #0:19: start 6150.269125, end 6606.891958
    Metadata:
      title           : Chapter 20
    Stream #0:0, 3, 1/1000: Video: hevc (Main 10), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x1600 [SAR 1:1 DAR 12:5], 23.98 fps, 23.98 tbr, 1k tbn, 23.98 tbc
    Metadata:
      title           : input
      ENCODER         : Lavc58.62.100 libx265
      DURATION        : 01:50:06.891000000
    Stream #0:1(eng), 1, 1/1000: Audio: truehd, 48000 Hz, 7.1, s32 (24 bit) (default)
    Metadata:
      title           : input
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      BPS-eng         : 3544728
      DURATION-eng    : 01:50:06.893000000
      NUMBER_OF_FRAMES-eng: 7928271
      NUMBER_OF_BYTES-eng: 2927455224
      _STATISTICS_WRITING_APP-eng: mkvmerge v40.0.0 ('Old Town Road + Pony') 64-bit
      _STATISTICS_WRITING_DATE_UTC-eng: 2019-11-30 10:59:25
      DURATION        : 01:50:06.893000000
Successfully opened the file.
Parsing a group of options: output url destination.mkv.
Applying option map_chapters (set chapters mapping) with argument 0.
Applying option map (set input stream mapping) with argument 0:v.
Applying option c:v (codec name) with argument copy.
Applying option c:s (codec name) with argument copy.
Applying option map (set input stream mapping) with argument 0:a.
Applying option c:a:0 (codec name) with argument copy.
Applying option map (set input stream mapping) with argument 0:a.
Applying option c:a:1 (codec name) with argument aac.
Successfully parsed a group of options.
Opening an output file: destination.mkv.
[file @ 000001b290ea7e40] Setting default whitelist 'file,crypto'
Successfully opened the file.
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
  Stream #0:1 -> #0:2 (truehd (native) -> aac (native))
Press [q] to stop, [?] for help
cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:1 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:2 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:1 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:2 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:1 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:2 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:0 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:1 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
cur_dts is invalid st:2 (0) [init:0 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)
detected 12 logical cores
[graph_0_in_0_1 @ 000001b290dda840] Setting 'time_base' to value '1/48000'
[graph_0_in_0_1 @ 000001b290dda840] Setting 'sample_rate' to value '48000'
[graph_0_in_0_1 @ 000001b290dda840] Setting 'sample_fmt' to value 's32'
[graph_0_in_0_1 @ 000001b290dda840] Setting 'channel_layout' to value '0x63f'
[graph_0_in_0_1 @ 000001b290dda840] tb:1/48000 samplefmt:s32 samplerate:48000 chlayout:0x63f
[format_out_0_2 @ 000001b290e0ea00] Setting 'sample_fmts' to value 'fltp'
[format_out_0_2 @ 000001b290e0ea00] Setting 'sample_rates' to value '96000|88200|64000|48000|44100|32000|24000|22050|16000|12000|11025|8000|7350'
[format_out_0_2 @ 000001b290e0ea00] auto-inserting filter 'auto_resampler_0' between the filter 'Parsed_anull_0' and the filter 'format_out_0_2'
[AVFilterGraph @ 000001b290e1b3c0] query_formats: 4 queried, 6 merged, 3 already done, 0 delayed
[auto_resampler_0 @ 000001b290e0fe80] [SWR @ 000001b291232000] Using fltp internally between filters
[auto_resampler_0 @ 000001b290e0fe80] ch:8 chl:7.1 fmt:s32 r:48000Hz -> ch:8 chl:7.1 fmt:fltp r:48000Hz
[matroska @ 000001b290dfba40] get_metadata_duration returned: 6606893000
[matroska @ 000001b290dfba40] Write early duration from metadata = 6606893
Output #0, matroska, to 'destination.mkv':
  Metadata:
    title           : input
    encoder         : Lavf58.35.100
    Chapter #0:0: start 0.000000, end 308.766792
    Metadata:
      title           : Chapter 01
    Chapter #0:1: start 308.766792, end 679.720708
    Metadata:
      title           : Chapter 02
    Chapter #0:2: start 679.720708, end 904.820583
    Metadata:
      title           : Chapter 03
    Chapter #0:3: start 904.820583, end 1282.781500
    Metadata:
      title           : Chapter 04
    Chapter #0:4: start 1282.781500, end 1487.736250
    Metadata:
      title           : Chapter 05
    Chapter #0:5: start 1487.736250, end 1846.177667
    Metadata:
      title           : Chapter 06
    Chapter #0:6: start 1846.177667, end 2116.531083
    Metadata:
      title           : Chapter 07
    Chapter #0:7: start 2116.531083, end 2443.858083
    Metadata:
      title           : Chapter 08
    Chapter #0:8: start 2443.858083, end 2731.979250
    Metadata:
      title           : Chapter 09
    Chapter #0:9: start 2731.979250, end 3178.383542
    Metadata:
      title           : Chapter 10
    Chapter #0:10: start 3178.383542, end 3636.507875
    Metadata:
      title           : Chapter 11
    Chapter #0:11: start 3636.507875, end 3867.488625
    Metadata:
      title           : Chapter 12
    Chapter #0:12: start 3867.488625, end 4208.037167
    Metadata:
      title           : Chapter 13
    Chapter #0:13: start 4208.037167, end 4502.372875
    Metadata:
      title           : Chapter 14
    Chapter #0:14: start 4502.372875, end 4853.431917
    Metadata:
      title           : Chapter 15
    Chapter #0:15: start 4853.431917, end 5267.470542
    Metadata:
      title           : Chapter 16
    Chapter #0:16: start 5267.470542, end 5543.329458
    Metadata:
      title           : Chapter 17
    Chapter #0:17: start 5543.329458, end 5847.132958
    Metadata:
      title           : Chapter 18
    Chapter #0:18: start 5847.132958, end 6150.269125
    Metadata:
      title           : Chapter 19
    Chapter #0:19: start 6150.269125, end 6606.891958
    Metadata:
      title           : Chapter 20
    Stream #0:0, 0, 1/1000: Video: hevc (Main 10), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x1600 [SAR 1:1 DAR 12:5], q=2-31, 23.98 fps, 23.98 tbr, 1k tbn, 1k tbc
    Metadata:
      title           : input
      ENCODER         : Lavc58.62.100 libx265
      DURATION        : 01:50:06.891000000
    Stream #0:1(eng), 0, 1/1000: Audio: truehd ([255][255][255][255] / 0xFFFFFFFF), 48000 Hz, 7.1, s32 (24 bit) (default)
    Metadata:
      title           : input
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      BPS-eng         : 3544728
      DURATION-eng    : 01:50:06.893000000
      NUMBER_OF_FRAMES-eng: 7928271
      NUMBER_OF_BYTES-eng: 2927455224
      _STATISTICS_WRITING_APP-eng: mkvmerge v40.0.0 ('Old Town Road + Pony') 64-bit
      _STATISTICS_WRITING_DATE_UTC-eng: 2019-11-30 10:59:25
      DURATION        : 01:50:06.893000000
    Stream #0:2(eng), 0, 1/1000: Audio: aac (LC) ([255][0][0][0] / 0x00FF), 48000 Hz, 7.1, fltp (24 bit), 469 kb/s (default)
    Metadata:
      title           : input
      _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
      BPS-eng         : 3544728
      DURATION-eng    : 01:50:06.893000000
      NUMBER_OF_FRAMES-eng: 7928271
      NUMBER_OF_BYTES-eng: 2927455224
      _STATISTICS_WRITING_APP-eng: mkvmerge v40.0.0 ('Old Town Road + Pony') 64-bit
      _STATISTICS_WRITING_DATE_UTC-eng: 2019-11-30 10:59:25
      DURATION        : 01:50:06.893000000
      encoder         : Lavc58.62.100 aac
cur_dts is invalid st:2 (0) [init:1 i_done:0 finish:0] (this is harmless if it occurs once at the start per stream)

....................
....................
[matroska @ 000001b290dfba40] Writing block of size 168 with pts 6606913, dts 6606913, duration 1 at relative offset 550755 in cluster at offset 9940898622. TrackNumber 2, keyframe 1
[matroska @ 000001b290dfba40] end duration = 6606914
[matroska @ 000001b290dfba40] stream 0 end duration = 6606912
[matroska @ 000001b290dfba40] stream 1 end duration = 6606914
[matroska @ 000001b290dfba40] stream 2 end duration = 6606914
frame=158407 fps=357 q=-1.0 Lsize= 9708475kB time=01:50:06.91 bitrate=12037.7kbits/s speed=14.9x    
video:6416483kB audio:3234397kB subtitle:0kB other streams:0kB global headers:2kB muxing overhead: 0.596787%
Input file #0 (input.mkv):
  Input stream #0:0 (video): 158407 packets read (6570478730 bytes); 
  Input stream #0:1 (audio): 7928271 packets read (2927455224 bytes); 7928271 frames decoded (317130840 samples); 
  Total: 8086678 packets (9497933954 bytes) demuxed
Output file #0 (destination.mkv):
  Output stream #0:0 (video): 158407 packets muxed (6570478730 bytes); 
  Output stream #0:1 (audio): 7928271 packets muxed (2927455224 bytes); 
  Output stream #0:2 (audio): 309699 frames encoded (317130840 samples); 309700 packets muxed (384567176 bytes); 
  Total: 8396378 packets (9882501130 bytes) muxed
7928271 frames successfully decoded, 0 decoding errors
[AVIOContext @ 000001b291230100] Statistics: 8 seeks, 39676 writeouts
[aac @ 000001b290dff3c0] Qavg: 3839.668
[AVIOContext @ 000001b290de4080] Statistics: 9554742230 bytes read, 0 seeks
audio
ffmpeg
aac
hevc
asked on Stack Overflow Dec 4, 2019 by user2028936 • edited Dec 4, 2019 by user2028936

1 Answer

1

You'll need to do it in two steps.

ffmpeg -i source.mkv -map 0:a -c:a aac -map_metadata -1 temp.mkv

ffmpeg -i source.mkv -i temp.mkv -map_chapters 0 -map 0:v -map 0:a -map 1:a -c copy destination.mkv

answered on Stack Overflow Dec 4, 2019 by Gyan

User contributions licensed under CC BY-SA 3.0