FFmpeg AAC编码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FFmpeg AAC编码相关的知识,希望对你有一定的参考价值。
参考技术A 通过FFmpeg进行AAC编码步骤如下:1.通过名字 libfdk_aac 找到AAC编码器。
2.创建编码上下文环境,并设置上下文的参数(比特率、采样大小、采样率、声道数等信息)。
3.创建并打开输出文件,打开编码器,对帧数据进行编码处理(实际应用中原始帧数据是来自麦克风或解码后的音频,这里是人工添加的模拟数据)。
4.将帧数据编码后的包写进文件。
编码aac音轨时FFmpeg媒体信息不正确
【中文标题】编码aac音轨时FFmpeg媒体信息不正确【英文标题】:FFmpeg media info incorrect when encoding aac audio track 【发布时间】:2020-03-29 06:53:18 【问题描述】:我最近涉足使用 FFmpeg 进行编码。除了我最近注意到的表格 1 问题外,它对我来说一直很好。当我尝试重新编码音轨以 acc 媒体信息标签有些错误。比特率、流大小等似乎是从源中复制的,而不是从新轨道中读取的。
基本上我想复制源视频、音频和字幕,并创建一个 AAC 版本的音轨,以便在不支持高清音频的设备上播放。
下面是我正在做的一个例子:
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
这会产生以下媒体信息:
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
如您所见,比特率、流大小等是从不正确的源轨道复制而来的。我已经尝试过 -map_metadata -1 但这会删除元数据而不创建新元数据,并且还会从我不想要的所有视频和音频轨道中删除它。
任何其他想法我做错了什么或者这只是软件的一个怪癖?
提前致谢。
添加 -report 输出修剪“Writing block of size...”行,因为文件很大:
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
【问题讨论】:
添加-report
并运行;分享报告
报告已添加到原始帖子中。
【参考方案1】:
您需要分两步完成。
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
【讨论】:
这在一定程度上起到了作用。只是生成的音轨的媒体信息中根本没有比特率。 不会有。 Mediainfo 显示的原始比特率是一个已被删除的文本标签。这些文本标签特定于 mkvtoolnix。 哦,有趣。我认为这将是 ffmpeg 嵌入的东西。我不知道。再次感谢您的帮助。以上是关于FFmpeg AAC编码的主要内容,如果未能解决你的问题,请参考以下文章