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]
本文主要关注音频参数, 这里可以收集到音频格式,
...
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 隐藏一些版本,版权等信息... 让输出更清爽一些。
-vol volume change audio volume (256=normal) 更改音量(256=正常)
按比例调整音量, 数值与256的比值, 就是调整音量的幅度.
- 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.png3.2 不同声道的波形图
$ ffmpeg -i trailer.mp4 -filter_complex "showwavespic=s=640*240:split_channels=1" -frames:v 1 trailer.m.png4. 音量调整
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
$ 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
$ ffmpeg -i test.mkv -af volume=10dB loud_sound.mkv
$ ffmpeg -i test.mkv -af volume=-10dB low_sound.mkv
vol的数值/256就是volume了. 而volume写小数还是分数都一样.
$ 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 |
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一个空行。
#!/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
sztom
osoft@qq.com
CC-BY-NC-SA