1. 查看基本信息
2. 音频音量探测
3. 绘制音频波形图 
	3.1 多声道混合波形图
	3.2 不同声道的波形图
4. 音量调整
	4.1 vol数值
	4.2 volume比例
	4.3 volume绝对值
5. 同一个原始文件的多个音量操作对比
	5.1 参数写法对照表: 
	5.2 多个音量操作对比(按音量排序↓): 
6. 批量操作sh脚本

1. 查看基本信息

$ ffprobe -hide_banner trailer.mp4
$ ffmpeg -i trailer.mp4 -hide_banner

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'trailer.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2018-02-21T20:41:54.000000Z
  Duration: 00:01:55.33, start: 0.000000, bitrate: 726 kb/s
  Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 596 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 47.95 tbc (default)
    Metadata:
      creation_time   : 2018-02-21T20:41:54.000000Z
      handler_name    : ISO Media file produced by Google Inc. Created on: 02/21/2018.
      vendor_id       : [0][0][0][0]
  Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default)
    Metadata:
      creation_time   : 2018-02-21T20:41:54.000000Z
      handler_name    : ISO Media file produced by Google Inc. Created on: 02/21/2018.
      vendor_id       : [0][0][0][0]

本文主要关注音频参数, 这里可以收集到音频格式, 
  • Channels: 5.1声道, stereo立体声
  • Audio Track: 音轨, 单个音频流或多个音频流(播放时可切换)
  • Audio Bitrate(kb/s): 64; 96; 128
  • Codec Audio: aac; 
  • Sample rate: 48000 Hz; 采样率
其他参数还有:
  • Codec Video: H264 
  • Duration 持续时间
  • Video Bitrate(Kb/s): 1930... 视频位率
  • Video resolution: 1280x720 分辨率
  • Frame rate 帧率, ~23.98~
  • ...

2. 音频音量探测

$ ffmpeg -i trailer.mp4 -hide_banner -filter_complex volumedetect -c:v copy -f null /dev/null
...
Stream mapping:
  Stream #0:1 (aac) -> volumedetect
  volumedetect -> Stream #0:0 (pcm_s16le)
  Stream #0:0 -> #0:1 (copy)
...
frame= 2765 fps=0.0 q=-1.0 Lsize=N/A time=00:01:55.31 bitrate=N/A speed= 393x       
video:8402kB audio:19868kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
[Parsed_volumedetect_0 @ 0x55597acd3240] n_samples: 10172416
[Parsed_volumedetect_0 @ 0x55597acd3240] mean_volume: -17.2 dB
[Parsed_volumedetect_0 @ 0x55597acd3240] max_volume: -1.8 dB
...
这里的 mean_volume 是音频的平均大小, -hide_banner 隐藏一些版本,版权等信息... 让输出更清爽一些。

3. 绘制音频波形图

3.1 多声道混合波形图

$ ffmpeg -i trailer.mp4 -filter_complex "showwavespic=s=640*120" -frames:v 1 trailer.png

3.2 不同声道的波形图

$ ffmpeg -i trailer.mp4 -filter_complex "showwavespic=s=640*240:split_channels=1" -frames:v 1 trailer.m.png

4. 音量调整

4.1 vol数值

$ ffmpeg --help |grep vol
-vol volume         change audio volume (256=normal)  更改音量(256=正常)
按比例调整音量, 数值与256的比值, 就是调整音量的幅度. 
(x < 256) 就是降低, 128就是降低到1/2.
$ ffmpeg -i trailer.mp4 -vol 128 tra128_low.mp4
$ ffmpeg -i trailer.mp4 -vol 64 tra64_low.mp4

(x > 256) 就是提高, 512就是提到到2倍.
$ ffmpeg -i trailer.mp4 -vol 512 tra512_loud.mp4
$ ffmpeg -i trailer.mp4 -vol 1024 tra1024_loud.mp4

4.2 volume比例

按比例增减, 分数,小数都可以. 与上面的vol类似.
$ ffmpeg -i trailer.a.aac -af volume=1/2 tra1-2_low.a.aac
$ ffmpeg -i trailer.a.aac -af volume=0.5 tra0.5_low.a.aac
$ ffmpeg -i trailer.a.aac -af volume=2/3 tra2-3_low.a.aac

4.3 volume绝对值

增加/降低 10分贝 的音量
$ ffmpeg -i test.mkv -af volume=10dB loud_sound.mkv
$ ffmpeg -i test.mkv -af volume=-10dB low_sound.mkv

5. 同一个原始文件的多个音量操作对比

5.1 参数写法对照表:

vol
(256)
-af volume=
比例 数值
dB
分数 小数
64 1/4 0.25 -10dB
128 1/2 0.5
171 2/3 0.67
256 1 0
384 3/2 1.5 10dB
512 2 2
1024 4 4
vol的数值/256就是volume了. 而volume写小数还是分数都一样.

5.2 多个音量操作对比(按音量排序↓):

6. 批量操作sh脚本

$ bash ff.sh
  • 不同类型的任务最好分开处理, 通过依次打开下一个注释,关闭上一个注释,然后再执行。
  • 用 for 循环直接获取当前目录下的 mp4、mp3、avi 等文件循环处理,单个文件可以去掉 for 循环
  • 保存到.md文件中, 默认md格式, 识别开头的 # 号为标题, 每个任务都会以此标题开始, 方便查看.
  • 标题打印文件名, 及关键字mean_volume, 在使用grep过滤时, 方便查看相关参数属于那个文件.
  •     $ cat -n tmp.md |grep -A 1 mean_volume
  • 每处理一个文件的头尾都有时间戳, 可以观察单个任务使用的时间.
  • 每处理一个文件的结尾会echo一个空行。
ff.sh脚本内容: 
#!/bin/bash
for i in *.aac; do
    #*.mp4, mkv, rmvb, aac 将过程信息临时保存到 tmp.md 文件中
    echo \# ====== "$i" = mean_volume = global ==== >> tmp.md
    date >> tmp.md

    # 1 查看基本信息
    # nohup /usr/bin/ffprobe -hide_banner "$i" >> tmp.md
    # 2 音频音量探测: $ cat -n tmp.md |grep -A 1 mean_volume 为获得音频的平均大小
    # nohup /usr/bin/ffmpeg -i "$i" -hide_banner -filter_complex volumedetect -c:v copy -f null /dev/null  >> tmp.md
    # 3.1 多声道混合波形图
    # /usr/bin/ffmpeg -i "$i" -filter_complex "showwavespic=s=640*120" -frames:v 1 s."$i".png
    # 3.2 不同声道的波形图
    /usr/bin/ffmpeg -i "$i" -filter_complex "showwavespic=s=640*240:split_channels=1" -frames:v 1 m."$i".png

    date >> tmp.md
    echo   >> tmp.md
done