ffmpeg音频处理
已有 180 人阅读此文 --本站1.查看音频分贝(音频音量探测)
ffmpeg.exe -i D:\music\mymusic\7026320.ts -filter_complex volumedetect -c:v copy -f null /dev/null
2.音量设置
2.1 声音音量应该仔细调整,以保护我们的耳朵和ffmpeg提供2种方法。第一个使用-vol选项,它接受从0到256的整数值,其中256是最大值
ffmpeg -i music.mp3 -vol 30 sound_low.mp3
2.2 别一种方法过滤器,基于分贝数值的处理
这个基于分贝数值的处理则相对会保留音频的原声效果,如下:
音量提升5分贝(db): ffmpeg -i input.mp3 -filter:“volume = 5dB” output.mp3
音量降低5分贝(db): ffmpeg -i input.mp3 -filter:“volume = -5dB” output.mp3
音量的标准化:除了上面对音量的整体处理,如降低分贝值或者成倍增加音量,ffmpeg还有对音量标准化的处理功能,即削峰填谷,使整个音频的音量变化跨度降低,变得平滑,可能会听起来更舒服点吧。
ffmepg -i input.mp3 -filter:a "loudnorm" output.mp3
音量降低到三分之二:ffmpeg -i music.mp3 -af volume=2/3 quiet_music.mp3
2.3加快/减慢音频节奏(参数 atempo 值范围0.5-2.0)
加快 ffplay music.mp3 -af atempo=1.5
减慢 ffplay music.mp3 -af atempo=0.5
3. chorus给声音添加合唱效果,可以让独唱变得像合唱,但也可以用于仪表。
合唱与回声效应都有短延迟,但是回波延迟是常数,合唱则采用不同的正弦或三角调制。调制深度范围定义了调制延迟(播放之前或之后的延迟)。因此延迟的声音听起来较慢或更快,这是原来周围的延迟调整声音,像是有一个与合唱整体略微差异。
它接受下面的参数(每个参数项如果有多个可能值用|分隔):
in_gain 设置输出增益,默认0.4
out_gain 设置输出增益,默认0.4
delays 设置延迟,延迟通常在40ms-60ms
decays 设置衰减
speeds 设置速度
depths 设置深度
例子
一个延迟(二人合唱效果)
chorus=0.7:0.9:55:0.4:0.25:2
两个延迟(三人合唱效果)
ffplay music.mp3 -af "chorus=0.6:0.9:50|60:0.4|0.32:0.25|0.4:2|1.3”
三个延迟(四人及更多合唱效果)
horus=0.5:0.9:50|60|40:0.4|0.32|0.3:0.25|0.4|0.3:2|2.3|1.3
4.使用多媒体滤镜 ebur128分析音频响度变化
ebur128扫描滤镜。这个滤镜需要一个音频流,但会原样输出。默认情况下,它以10Hz的频率记录一条消息,其中包括瞬时响度(由M标识)、短期响度(S)、综合响度(I)和响度范围(LRA)。
滤镜有个实时的输出,展示响度的变化,主要的绘图区域包含短期响度(3秒分析),以及其后的舒适响度(400毫秒)
ffmpeg -nostats -i stars.mp3 -filter_complex ebur128 -f null -
加-report可把结果输出到日志文件
利用EBU放缩规模计+18d的实时图像(参数amovie使用完整径报错?)
ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
ebur128输出详细日志到文件(文件名自动生成,与ffmpeg.exe同级目录中)
ffmpeg.exe -nostats -i 7019464new.mp3 -filter_complex ebur128 -f null framelog=verbose -report
播放音频显示频谱:
ffplay.exe -f lavfi "amovie=7019464new.mp3, asplit [a][out1]; [a] showcqt [out0]"
使用ffplay每通道颜色和滑动频谱的完整示例
ffplay.exe -f lavfi "amovie=7019464new.mp3, asplit [a][out1]; [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]"
利用ffmpeg按通道提取波形,并展示在1024x800图片中
ffmpeg -i D:\music\mymusic\7019464new.mp3 -lavfi showwavespic=split_channels=1:s=1024x800 7019464.png
5.查看音频波形
5.1使用 ffmpeg 的showwavespic 滤镜来绘制音频的波形图如,输出音频图像,多个声道同时叠加到一起:
ffmpeg.exe -i D:\music\mymusic\7019464.ts -filter_complex "showwavespic=s=640x120" -frames:v 1 D:\music\mymusic\7019464p1.png
5.2上图中绘制的信息为所有通道的全部信息,如果我们想看到每个通道的信息,可以 split_channels来提取每个声道的音频信息单独绘制:
ffmpeg.exe -i D:\music\mymusic\7019464.ts -filter_complex "showwavespic=s=640*240:split_channels=1" -frames:v 1 D:\music\mymusic\7019464.png
6.showwaves例子
同时输出音频和其对应视频表示:
amovie=a.mp3,asplit[out0],showwaves[out1]
利用showwaves创建一个同步信号并显示,帧率为30:
aevalsrc=sin(12PIt)sin(8802PIt):cos(2PI200t),asplit[out0],showwaves=r=30[out1]
7.创建一个马赛克开始场景:
ffmpeg -i video.avi -vf select=‘gt(scene,0.4)‘,scale=160:120,tile -frames:v 1 preview.png
ffplay -f lavfi "aevalsrc=0.1sin(2PI55t)+0.1sin(4PI55t)+0.1sin(6PI55t)+0.1sin(8PI55t), asplit[a][out1]; [a] showcqt=timeclamp=0.5 [out0]"
8.使用ffprobe获取音频信息(JSON格式)
ffprobe.exe -v quiet -print_format json -show_format -show_streams D:\music\lsms\dec\7019464.ts
9.音视频文件的分离及生成(音频的原文件格式有:wav,pcm)
9.1 按音轨提取
提取视频文件: ffmpeg.exe -i D:\music\lsms\dec\4133116.mpg -vcodec copy -an D:\music\lsms\dec\4133116.mpg
提取第一音轨生成pcm文件:ffmpeg.exe -i D:\music\lsms\4132848.mpg -map 0:1 -vn D:\music\lsms\4132848.1.wav
提取第二音轨生成pcm文件:ffmpeg.exe -i D:\music\lsms\4132848.mpg -map 0:2 -vn D:\music\lsms\4132848.2.pcm
9.2 提取音频并转成指定格式
指定音频格式:ffmpeg.exe -y -i D:\music\mymusic\7019464.ts -acodec pcm_s16le -f s16le -ac 2 -ar 16000 D:\music\mymusic\7019464.pcm
9.3 生成一个静音文件(截取现有一段音频,并把音量置为0)
ffmpeg.exe -i D:\music\lsms\dec\4133116a2newnew.wav -vol 0 D:\music\lsms\dec\tempnoa.wav
ffmpeg.exe -ss 00:00:00 -t 00:00:20 -i D:\music\lsms\dec\4133116a2newnew.wav -vol 0 -y D:\music\lsms\dec\tempnoa.wav
9.4 ffmpeg生成单色测试视频
ffmpeg.exe -ss 0 -t 30 -f lavfi -i color=c=0x0000ff:s=1280x720:r=25 -vcodec libx264 -r:v 25 D:\music\lsms\dec\tempnov.mpg
10.多个文件合并,分别放入不同的轨道
ffmpeg.exe -i D:\music\lsms\dec\4133116v0.ts -i D:\music\lsms\dec\4133116a1.wav -i D:\music\lsms\dec\4133116a2new.wav -vcodec copy -acodec mp2 -map 0:v:0 -map 1:a:0 -map 2:a:0 -shortest D:\music\lsms\dec\4133116.ts
ffmpeg.exe -i D:\music\lsms\dec\4133116v0.ts -i D:\music\lsms\dec\4133116a1.wav -i D:\music\lsms\dec\4133116a2new.wav -map 0:v:0 -map 1:a:0 -map 2:a:0 D:\music\lsms\dec\4133116.ts
10.1 两个音频文件混合,不是拼接
ffmpeg.exe -i D:\music\lsms\dec\4133116a1.wav -i D:\music\lsms\dec\4133116a2new.wav -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp2 D:\music\lsms\dec\4133116.wav
11.ffmpeg倒放音视频
11.1 视频倒放,无音频
ffmpeg.exe -i inputfile.mp4 -filter_complex [0:v]reverse[v] -map [v] -preset superfast reversed.mp4
11.2 视频倒放,音频不变
ffmpeg.exe -i inputfile.mp4 -vf reverse reversed.mp4
11.3 音频倒放,视频不变
ffmpeg.exe -i inputfile.mp4 -map 0 -c:v copy -af "areverse" reversed_audio.mp4
11.4 音视频同时倒放
ffmpeg.exe -i inputfile.mp4 -vf reverse -af areverse -preset superfast reversed.mp4
12.FFmpeg的那些坑-Too many packets buffered for output stream
报错Too many packets buffered for output stream 0:1.
原因: 是有些视频数据有问题,导致视频处理过快,容器封装时队列溢出。
解决办法:增大容器封装队列大小,比如 -max_muxing_queue_size 1024
ffmpeg -i test.mp4 -i watermark.png -max_muxing_queue_size 1024 -acodec copy -preset veryfast -filter_complex "overlay=x=20:y=20" -y wm_test.mp4

