2026-07-01

Audio-Channel

1. 获取相关信息
	1.1 获取音频流信息
	1.2 声道布局
	1.3 音量 volumedetect
	1.4 多声道混合波形图
	1.5 不同声道的波形图
	1.6 统计信息
2. 拆分声道
	2.1 pan
	2.2 channelsplit
	2.3 小结
3. 查看单声道文件相关信息
	3.1 获取音频流信息
	3.2 音量 volumedetect
	3.3 波形图
	3.4 统计信息
4. volume 滤波器调节音量
	4.1 音量 volumedetect
	4.2 波形图
5. 合并
	5.1 获取音频流信息
	5.2 音量 volumedetect
	5.3 不同声道的波形图
	5.4 文件大小
6. AudioChannel命令参考
7. 文中用到的选项及滤镜

1. 获取相关信息

1.1 获取音频流信息

ffmpeg -i 2018.mp4
Stream #0:1[0x2](eng): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), fltp, 640 kb/s (default)

1.2 声道布局

ffmpeg -layouts
mono           FC
stereo         FL+FR
quad           FL+FR+BL+BR
quad(side)     FL+FR+SL+SR
5.1            FL+FR+FC+LFE+BL+BR
5.1(side)      FL+FR+FC+LFE+SL+SR
… 这里只列出本例遇到的及相关布局。

1.3 音量 volumedetect

ffmpeg -i 2018.mp4 -hide_banner -filter_complex volumedetect -c:v copy -f null /dev/null 
ffmpeg -i 2018.mp4 -filter:a volumedetect -vn -f null /dev/null
ffmpeg -i 2018.mp4 -filter volumedetect -vn -f null /dev/null
ffmpeg -i 2018.mp4 -af volumedetect -vn -f null /dev/null
[...] mean_volume: -30.8 dB
[...] max_volume: 0.0 dB

1.4 多声道混合波形图

 ffmpeg -i 2018.mp4 -filter_complex "showwavespic=s=1920*720" -frames:v 1 8a.png
图略

1.5 不同声道的波形图

 ffmpeg -i 2018.mp4 -filter_complex "showwavespic=s=1920*960:split_channels=1" -frames:v 1 8am.png 
图形放在第5.3节,与修改后的图形对比。

1.6 统计信息

ffmpeg -i 2018.mp4 -af astats -f null -
注: 8100运行此命令只有~15x的速度,耗时约7分半。
增加 -vn 选项,忽略视频部分,速度增加10倍。
ffmpeg -i 2018.mp4 -vn -af astats -f null -
可以列出 Channel.(1~6) 的详细信息,其中的 RMS level dB 表示每个声道的平均音量。
Overall 则是综合6个声道的统计信息,Overall 的 RMS level dB 和前面使用 volumedetect 滤镜获取的 mean_volume 一致。
Channel 1 (FL) 2 (FR) 3 (FC) 4 (LFE) 5 (SL) 6 (SR) Overall 通道
DC offset -0.000008 -0.000009 -0.000009 0.000001 -0.00001 -0.000011 -0.000011 直流偏移
Min level -0.713869 -0.71056 -0.999829 -0.679425 -1.021281 -0.9638 -1.021281 最小电平
Max level 0.71264 0.695435 0.995467 0.677106 1.031011 0.962693 1.031011 最大电平
Min difference 0 0 0 0 0 0 0 最小差值
Max difference 0.628798 0.581773 0.694345 0.022837 0.370033 0.392021 0.694345 最大差值
Mean difference 0.001396 0.001468 0.003859 0.000021 0.001228 0.001224 0.001533 平均差值
RMS difference 0.003795 0.003989 0.009361 0.000128 0.003429 0.003426 0.004856 均方根差值
Peak level dB -2.927632 -2.96798 -0.001484 -3.35717 0.265267 -0.320259 0.265267 峰值电平 dB
RMS level dB -33.124027 -32.65356 -25.858851 -32.648587 -33.945536 -33.983928 -30.817171 均方根电平 dB
RMS peak dB -6.735127 -8.108412 -5.499001 -4.888176 -5.274029 -9.256225 -4.888176 均方根峰值 dB
RMS trough dB -112.519922 -111.171483 -111.433785 -3202.270341 -108.760425 -106.989207 -3202.270341 均方根谷值 dB
Crest factor 32.345936 30.498536 19.62765 29.145455 51.349962 48.215143
波峰因子
Flat factor 0 0 0 0 0 0 0 平坦因子
Peak count 2 2 2 2 2 2 2 峰值计数
Abs Peak count 1 1 1 1 1 1 1 绝对峰值计数
Noise floor dB -99.643932 -97.877327 -98.739502 -inf -97.807155 -101.373386 -97.807155 噪声基底 dB
Noise floor count 671 416 160 109866231 278 1 18311292.833333 噪声基底计数
Entropy 0.541997 0.554552 0.672009 0.267778 0.520391 0.523669 0.513399
Bit depth 31/32/32/32 31/32/32/32 31/32/32/32 31/32/32/32 32/32/32/32 31/32/32/32 32/32/32/32 位深度
Dynamic range 232.436339 237.004291 282.966711 279.886954 249.608638 234.34847
动态范围
Zero crossings 15226294 14816369 18927784 458054 14737991 14490558
过零点数
Zero crossings rate 0.044867 0.043659 0.055774 0.00135 0.043428 0.042699
过零率
Number of NaNs 0 0 0 0 0 0 0 NaN 值数量
Number of Infs 0 0 0 0 0 0 0 Inf 值数量
Number of denormals 0 0 0 0 0 0 0 非正规数数量
Number of samples 1 (FL) 2 (FR) 3 (FC) 4 (LFE) 5 (SL) 6 (SR) 339368208 样本数量

2. 拆分声道

2.1 pan

5.1(side)      FL+FR+FC+LFE+SL+SR
ffmpeg -i 2018.mp4 -filter_complex "[0:a]pan=1c|c0=c0[fl];[0:a]pan=1c|c0=c1[fr];[0:a]pan=1c|c0=c2[fc];[0:a]pan=1c|c0=c3[lfe];[0:a]pan=1c|c0=c4[sl];[0:a]pan=1c|c0=c5[sr]"  -map "[fl]" 8fl.ac3 -map "[fr]" 8fr.ac3 -map "[fc]" 8fc.ac3 -map "[lfe]" 8lfe.ac3 -map "[sl]" 8sl.ac3 -map "[sr]" 8sr.ac3 

或者拆开来运行: 结果都一样。
  • ffmpeg -i 2018.mp4  -af "pan=mono|c0=c0" 80.ac3
  • ffmpeg -i 2018.mp4  -af "pan=mono|c0=c1" 81.ac3
  • ffmpeg -i 2018.mp4  -af "pan=mono|c0=c2" 82.ac3
  • ffmpeg -i 2018.mp4  -af "pan=mono|c0=c3" 83.ac3
  • ffmpeg -i 2018.mp4  -af "pan=mono|c0=c4" 84.ac3
  • ffmpeg -i 2018.mp4  -af "pan=mono|c0=c5" 85.ac3

2.2 channelsplit

ffmpeg -i 2018.mp4 -filter_complex "channelsplit=channel_layout=5.1(side)[FL][FR][FC][LFE][SL][SR]"  -map "[FL]" 8fl.ac3 -map "[FR]" 8fr.ac3 -map "[FC]" 8fc.ac3 -map "[LFE]" 8lfe.ac3 -map "[SL]" 8sl.ac3 -map "[SR]" 8sr.ac3

2.3 小结

使用 channelsplit 滤镜,并没有按预期的生成所有单声道文件。
  • fc, lfe 这2个是 mono 单声道文件;比特率均为96kb/s。和上方的 pan 滤镜输出一致。
  • fl, fr 这2个是 stereo 立体声文件;比特率均为192kb/s。
    • 通过 astats 统计信息, 输出立体声的左右声道数据非常近似,相当于将输出的一个单声道,分别放到立体声的左右声道。
    • 使用 showwavespic 滤镜,生成不同声道的波形图,可以观察到,立体声2个声道是基本相同的波形。
  • sl,sr 这2个是 quad(side) 形式的4声道文件,比特率均为384kb/s。
    • 通过 astats 统计信息, 输出 quad(side) 的4个声道数据,前2个非常近似,相当于将输出的一个单声道,分别放到这2个位置,另外2个声道有数据,但属于静音范围,一样占用了一半的文件大小。
    • 使用 showwavespic 滤镜,生成不同声道的波形图,可以观察到,前2个声道是基本相同的波形,后2个声道只有占据了位置,没有任何波形(静音)。
拆分声道,使用 pan 滤镜,命令里已指定1c或mono,拆分出来的都是单声道文件,比特率均为96kb/s,体积都一样大。
  • 后面的内容都已 pan 滤镜生成的6个单声道文件为基础继续。

3. 查看单声道文件相关信息

3.1 获取音频流信息

ffprobe -i 文件名
Stream #0:0: Audio: ac3, 48000 Hz, mono, fltp, 96 kb/s
使用 pan 滤镜生成的所有6个文件,都是独立的单声道文件。

3.2 音量 volumedetect

ffmpeg -i 文件名 -af volumedetect -vn -f null /dev/null
信息见下方4.1节表格。

3.3 波形图

 ffmpeg -i 文件名 -filter_complex "showwavespic=s=1920*960" -frames:v 1 output.png
 ffmpeg -i 文件名 -filter_complex "showwavespic=s=1920*960:split_channels=1" -frames:v 1 output.png 
由于是单声道文件,所以这2行输出的图形是一样的。
这里将所有6个文件的图形分别输出,以便后续调整后对照。

3.4 统计信息

ffmpeg -i 文件名 -af astats -f null -
单声道音频文件的统计信息和前面5.1声道统计信息里的对应声道数据接近,但不完全相同。

4. volume 滤波器调节音量

将2018文件的6个声道分别调整适当的音量,然后再合并。
  • ffmpeg -i 8fc.ac3 -filter:a "volume=5dB" 8fc-u.ac3
  • ffmpeg -i 8fl.ac3 -filter:a "volume=7dB" 8fl-u.ac3
  • ffmpeg -i 8fr.ac3 -filter:a "volume=7dB" 8fr-u.ac3
  • ffmpeg -i 8lfe.ac3 -filter:a "volume=3dB" 8lfe-u.ac3
  • ffmpeg -i 8sl.ac3 -filter:a "volume=3dB" 8sl-u.ac3
  • ffmpeg -i 8sr.ac3 -filter:a "volume=3dB" 8sr-u.ac3
volume=号后面的数值若不带dB分贝单位,则表示按比例调整音量。

4.1 音量 volumedetect

ffmpeg -i 文件名 -af volumedetect -vn -f null /dev/null
Channel 章节: 3.2 章节: 4 章节: 4.1
file 平均音量 max +dB file 平均音量 max
1 (FL) 8fl.ac3 -33.1 dB -2.4 dB 7dB 8fl-u.ac3 -26.2 dB 0.0 dB
2 (FR) 8fr.ac3 -32.6 dB -2.5 dB 7dB 8fr-u.ac3 -25.7 dB 0.0 dB
3 (FC) 8fc.ac3 -25.9 dB 0.0 dB 5dB 8fc-u.ac3 -20.9 dB 0.0 dB
4 (LFE) 8lfe.ac3 -32.6 dB -3.4 dB 3dB 8lfe-u.ac3 -29.6 dB -0.4 dB
5 (SL) 8sl.ac3 -33.9 dB 0.0 dB 3dB 8sl-u.ac3 -31.0 dB 0.0 dB
6 (SR) 8sr.ac3 -34.0 dB -0.2 dB 3dB 8sr-u.ac3 -31.0 dB 0.0 dB
章节: 3.2,4.1音量对照表,所有文件大小均为80.9Mb,比特率为96kbs,Layouts:mono, 48000Hz。

4.2 波形图

 ffmpeg -i 文件名 -filter_complex "showwavespic=s=1920*960" -frames:v 1 output.png
与3.3调整音量前的图形对照。波形的幅度显著增大了。

5. 合并

5.1(side)      FL+FR+FC+LFE+SL+SR
  • ffmpeg -i 8fl-u.ac3 -i 8fr-u.ac3 -i 8fc-u.ac3 -i 8lfe-u.ac3 -i 8sl-u.ac3 -i 8sr-u.ac3  -filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a]join=inputs=6:channel_layout=5.1(side)[a]"   -map "[a]" output.ac3 
  • ffmpeg -i 8fl-u.ac3 -i 8fr-u.ac3 -i 8fc-u.ac3 -i 8lfe-u.ac3 -i 8sl-u.ac3 -i 8sr-u.ac3  -filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a]join=inputs=6:channel_layout=5.1(side):map=0.0-FL|1.0-FR|2.0-FC|3.0-LFE|4.0-SL|5.0-SR[a]"   -map "[a]" output1.ac3 
  • ffmpeg -i 8fl-u.ac3 -i 8fr-u.ac3 -i 8fc-u.ac3 -i 8lfe-u.ac3 -i 8sl-u.ac3 -i 8sr-u.ac3  -filter_complex "[0:a][1:a][2:a][3:a][4:a][5:a]amerge=inputs=6[a]"  -map "[a]" output3.ac3
使用 amerge 函数时,所有输入必须具有相同的采样率和格式。如果输入持续时间不同,输出将以最短的持续时间结束。 
 No channel layout for input 1  
Input channel layouts overlap: output layout will be determined by the number of distinct input channels Output #0, ac3, to 'output3.ac3':   
Stream #0:0: Audio: ac3, 48000 Hz, 5.1, fltp, 448 kb/s
使用 amerge 滤镜过程中,提示没有指定 layout,默认会输出 5.1 声道,如上,但实际生成的文件是 5.1(side) 声道。

5.1 获取音频流信息

ffprobe -i output.ac3
Stream #0:0: Audio: ac3, 48000 Hz, 5.1(side), fltp, 448 kb/s

5.2 音量 volumedetect

ffmpeg -i output.ac3 -af volumedetect -vn -f null /dev/null
mean_volume: -25.8 dB。注: 第1.3节,原始音轨音量平均为:-30.8 dB

5.3 不同声道的波形图

  •  ffmpeg -i output.ac3 -filter_complex "showwavespic=s=1920*960:split_channels=1" -frames:v 1 output-m.png 
  •  ffmpeg -i output1.ac3 -filter_complex "showwavespic=s=1920*960:split_channels=1" -frames:v 1 output1-m.png 
  •  ffmpeg -i output3.ac3 -filter_complex "showwavespic=s=1920*960:split_channels=1" -frames:v 1 output3-m.png 




和原始输出对比,波形幅度更加突出(音量提高了约5dB)。
注:参照波形,其中output.ac3文件的第2和第3声道互调了。命令行里的输入顺序都是一致的。具体原因还不清楚。

5.4 文件大小

  • 原始输出ac3文件大小为539Mb。(640bps)
  • 拆分为6个单声道文件80.9Mb*6=485MB。(96kb/s * 6 = 576bps) 大约是原始文件的90%。
  • 将这6个文件分别调整音量后,文件大小没有变化,合计仍然是485MB。(576bps)
  • 将这6个文件合并为5.1(side)声道文件,文件大小变为377MB。(448bps) 大约是原始文件的70%。

6. AudioChannel命令参考

以下文档是每晚重新生成的(中文翻译),对应于最新的 FFmpeg 修订版。

7. 文中用到的选项及滤镜

选项 alias/滤镜 描述
-ac https://ffmpeg.org/ffmpeg-all.html#Audio-Options
https://ffmpeg.cpp.org.cn/ffmpeg-all.html#Audio-Options
设置音频通道数。对于输出流,默认设置为输入音频通道的数量。
对于输入流,此选项仅对音频采集设备和原始解复用器有意义,并映射到相应的解复用器选项。
-map https://ffmpeg.org/ffmpeg-all.html#Stream-selection-1
https://ffmpeg.cpp.org.cn/ffmpeg-all.html#Stream-selection-1
流选择,手动控制每个输出文件中的流选择。用户可以跳过 -map,并让 ffmpeg 执行如下所述的自动流选择。
-vn / -an / -sn / -dn 选项可用于跳过分别包含视频、音频、字幕和数据流。
-b -b:v
-b:a
https://ffmpeg.org/ffmpeg-all.html#Options-20
https://ffmpeg.cpp.org.cn/ffmpeg-all.html#Options-20
设置比特率,单位为比特/秒。
-c -codec
-c:a -acodec
-c:v -vcodec
-c:s -scodec
https://ffmpeg.org/ffmpeg-all.html#Generic-options
https://ffmpeg.cpp.org.cn/ffmpeg-all.html#Generic-options
为一个或多个流选择一个编码器(当在输出文件之前使用时)或解码器(当在输入文件之前使用时)。
codec 是解码器/编码器的名称或特殊值 copy(仅限输出),表示该流不被重新编码。
-f https://ffmpeg.org/ffmpeg-all.html#Main-options
https://ffmpeg.cpp.org.cn/ffmpeg-all.html#Main-options
强制输入或输出文件格式。
通常会自动检测输入文件的格式,并根据输出文件的文件扩展名进行猜测,因此在大多数情况下不需要此选项。
-f null - https://ffmpeg.org/ffmpeg-all.html#null-1
https://ffmpeg.cpp.org.cn/ffmpeg-all.html#null-1
此复用器不生成任何输出文件,主要用于测试。
-filter
-af -filter:a
-vf -filter:v
https://ffmpeg.org/ffmpeg-all.html#Simple-filtergraphs
https://ffmpeg.cpp.org.cn/ffmpeg-all.html#Simple-filtergraphs
指定单个滤镜,用于过滤输入流。
-filter_complex https://ffmpeg.org/ffmpeg-all.html#Complex-filtergraphs
https://ffmpeg.cpp.org.cn/ffmpeg-all.html#Complex-filtergraphs
过滤器图,复杂的集合。滤镜链用“;”字符分隔,每个滤镜链以“[in]”开头,以“[out]”结尾,最后一个可省略。
-filters 获取所有滤镜的列表。
-h filter=pan 获取单个滤镜的信息,例如这里获取 pan 滤镜信息。
asplit 将输入拆分为多个相同的输出,默认为 2。
aphasemeter 测量输入音频的相位, 相位值范围 [-1, 1] ,其中 -1 表示左右声道完全异相,而 1 表示声道同相。
ametadata 操作帧元数据。
aresample 将输入音频重采样到指定的参数。若未指定任何参数,则过滤器将在其输入和输出之间自动转换。
此过滤器还能够拉伸/压缩音频数据以使其与时间戳匹配,或者注入静音/切除音频以使其与时间戳匹配,或者两者兼而有之,或者都不进行操作。
amix 将多个音频输入混合到单个输出中。注:仅支持浮点样本(amerge 和 pan 音频滤波器支持多种格式)。
整数样本将自动执行到浮点样本的转换。
amerge 将两个或多个音频流合并为单个多通道流。
channelmap 将输入通道重新映射到新的位置。
channelsplit 将输入音频流中的每个通道拆分为单独的输出流。
join 将多个输入流连接成一个多通道流。
pan 以特定的增益级别混合通道。该过滤器接受输出通道布局,后跟一组通道定义。
此过滤器还旨在有效地重新映射音频流的通道。
Sofalizer 为用户在耳机中创建虚拟扬声器
astats 显示有关音频通道的时域统计信息。统计信息针对每个音频通道计算和显示,并且在适用的情况下,还会给出总体数据。
-map_channel Option not found (in 2026)

Audio-Channel

导航 (返回顶部) 1. 获取相关信息 1.1 获取音频流信息 1.2 声道布局 1.3 音量 volumedetect 1.4 多声道混合波形图 1.5 不同声道的波形图 1.6 统计信息 2. 拆分声道 2.1 pan 2.2 channelsplit ...