1

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

0
相关评论
0 / 500
发表
暂无相关评论...