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. 文中用到的选项及滤镜