翻译ffmpeg-all文档(34)-音频滤镜

4020阅读 0评论2015-07-28 xdsnet
分类:其他平台

34 音频滤镜

当你配置编译FFmpeg时,先采用--disable-filters可以禁止所有的滤镜,然后显式配置想要支持的滤镜。

下面是当前可用的音频滤镜

adelay

延迟一个或者多个音频通道

它接受如下选项:

adelay例子

aecho

重复应用于音频输入(回声效果)滤镜

回声反射声音,可以自然发生在山区大型建筑(有时)谈话时,或者大叫时,数字回声效果模拟这种行为,通常用来帮助填补一个乐器或声音的(回声)。原始信号和发射信号的时差就是delay(延迟),而反射信号的响度是decay(衰减)。多个回声可以有不同的延迟和衰减。

要描述一个回声效果需要如下的参数值(注意下面的参数之间用:分隔):

aecho例子

aeval

根据指定的表达式修改(改变、变化)一个音频信号

这个滤镜接受一个或者多个表达式(对每个通道),这些表达式计算用于相应的音频信号。

它接受下面的参数:

帧各通道的计算表达式中,下面的项目被允许。:

注意这个滤镜比较慢,要快速处理你可能需要dedicated滤镜

aeval例子

afade

对输入音频应用淡入淡出效果

下面是跟上来的滤镜参数:

afade例子

aformat

让输入音频约束成为指定格式。该框架会采用最合适(少)的格式转换

它接受下面的参数:

如果一个参数被省略,所有的值都是允许的。

强制输出为8位 或者16位 立体声

aformat=sample_fmts=u8|s16:channel_layouts=stereo 

allpass

应用一个两极(two-pole)全通(all-pass)滤波器的中心频率(Hz)的frequency,和filter-width值width。一个allpass滤镜可以改变音频的频率相位关系而不改变其频率振幅关系。(可以实现移相)

滤镜接受下面的选项:

amerge

合并两个或两个以上的音频流到一个多通道流

滤镜接受下面的选项:

如果输入的通道布局是不相交的,因此可兼容,输出将设置相应的通道布局和渠道,并在必要时重新排序。如果输入的通道布局是不可分离的,则输出将会是第一个输入的所有通道,然后第二个输入的所有通道,在这种顺序下,输出的通道布局将默认通道数设为总数。

例如:如果第一个输入是2.1(FL+FR+LF)和第二个输入为FC+BL+BR,则输出是5.1通道布局,并且按:a1,a2,b1,a3,b2,b3设置输出通道布局(这里a1是第一个输入的第一个通道FL,b1是第二个输入的第一个通道FC)

在另外的应用中,如果两个输入都是立体声,则输出会默认为:a1,a2,b1,b2,即输出流显示为一个4通道音频流,这可能是一个非预期的值。

所有的输入必须有相同的采样率和格式。

如果输入没有相同的持续时间,输出将在最短时间停止。

amerge例子

amix

混合多个音频输入到单路音频输出(叠加混合音频,不同于前面的amerge)

注意这个滤镜只支持浮动采样(amerge和pan音频滤镜支持很多格式)。如果amix滤镜输入有一个整数采样,则aresample滤镜会自动插入转换成浮动采样。

例如:

ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT 

会把3个输入音频流混合成一个输出流,持续时间采用第一个输入流的持续时间并且有3秒的结束过渡。

它支持下面的参数:

anull

输入音频源不变的到输出

apad

在一个音频流的末尾添加无声。

它可以用来同ffmpeg -shortest一起把最短的音频流延长到视频相同长度。

选项介绍见下:

如果既不设置pad_len也不设置whole_len,则接在后面的静音将一直持续。

apad例子

aphaser

添加一个移相到输入音频

移相器滤镜创建一系列的波峰和波谷的频谱。波峰和波谷的位置调制,这样他们会随着时间变化,建立一个全面的效果。

可接受参数介绍见下:

aresample

对输入音频按指定的参数重采样,使用了libswresample库,如果没有特殊设定,将自动在输入和输出设置间转换。

这个滤镜还可以用于拉伸/压缩音频数据,使其匹配时间戳,或者通过注入静音/剪切来匹配时间戳

滤镜接受的语法:[sample_rate:]resampler_options,这里sample_rate是新采样率,resampler_options是一个由:分隔的key=value选项参数值对列表。参考ffmpeg重采样手册完整了解支持的选项。

aresample例子

asetnsamples

设置每个输出音频帧中样本点个数

除了最后一个输出包括有包含不同数量的样本点外,这个滤镜使得持续中的每个数据包中包含一致数量的样本点。

滤镜接受下面的选项:

例如,设置每帧样本点个数为1234,且禁止最后帧补齐

asetnsamples=n=1234:p=0 

asetrate

重新设置采样率而不改变PCM数据。这将导致速度和音调的变化。

滤镜接受下面的选项:

ashowinfo

对每个输入流音频帧显示其所含各种信息。输入音频不被改变

信息由一个序列的键值对构成, 键值对的格式为 key:value

下面的信息将被显示(作为键值对的键名):

astats

显示音频通道的时域统计信息。统计计算和显示每个音频通道,值适合情况下还提供整体图。

它接受下面的选项:

每个显示用选项的介绍见下A:

astreamsync

将两个音频流控制的发到缓冲区

滤镜接受下面的选项:

astreamsync例子

压力测试amerge通过随机发送给缓冲区作为有错误的输入,同时避免太多同步失锁:

amovie=file.ogg [a] ; amovie=file.mp3 [b] ;
[a] [b] astreamsync=(2*random(1))-1+tanh(5*(t1-t2)) [a2] [b2] ;
[a2] [b2] amerge 

asyncts

通过需要 压缩/拉伸 和/或 采样点/填补静音 来让音频数据和时间戳同步。

这个滤镜不默认编译,请使用来压缩/拉伸。

它接受下面的参数:

atempo

调整音频节奏(变奏)

滤镜接受1个参数,表示音频节奏。如果不知道,则默认为1.0,表示不变,参数值范围为[0.5,2.0]

atempo例子

atrim

建设连续输入中的部分作为输出。

接受下面的参数:

其中start, end和duration采样格式描述,参考相关章节以了解详情。

注意前面的start/end和duration是看帧的时间戳,而有_sample的选项则只是简单的对传入数据的样本点计数。所有如start/end_pts和start/end_sample会造成不同的结果(当时间戳不准确、或从0开始)。还要注意这个滤镜并不修改时间戳。如果你想让输出时间从0开始,则在其后插入atrim滤镜

如果同时有多个start或end选项被设置,滤镜尝试(贪婪算法)保留尽量多的样本点作为输出(即start和end差最大的)。如果想保留多个块,需要连接多个atrim滤镜来应用(多个次输入源,接atrim后再连接起来)

默认所有输入被保留。所有它可被配置为保留结束前的一切。

例子:

bandpass

应用一个通过中心点频率frequency定义的两极Butterworth(巴特沃斯)带通滤波器,其有3dB的带宽。csg选项指定一个常数作为默认增益(峰值增益 Q ,默认值为0)。滤镜到期后每个8分音度有6dB的衰减。

滤镜接受下面的选项:

bandreject

应用一个通过中心点频率frequency定义的两极Butterworth(巴特沃斯)带通滤波器,其有单侧3dB的带宽。滤镜到期后每个8分音度有6dB的衰减。

bass

使用双刀搁置滤波器增加或减少低音(低)音频的频率响应,类似于一个标准的高保真的音控。这也被称为搁置平衡(EQ)。

滤镜接受下面选项:

biquad

应用一个 biquad IIR(无限冲激响应)滤镜,它有b0、b1、b2和a0、a1、a3 分别作为分子和分母。

bs2b

Bauer(鲍尔)立体声双声道的转换,使耳机听立体声音频记录

它接受下面的参数:

channelmap

重新映射输入通道

它接受下面的参数:

如果没有设置map,滤镜将隐式映射,保留所指(通道布局中对应通道)

例如,要把一个5.1 声道的MOV文件下变换

ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav 

则将创建一个输出WAV文件,其只有2个声道(立体声)。

又如要修复一个5.1声道AAC编码中不当的通道顺序

ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:channel_layout=5.1' out.wav 

channelsplit

把输入音频流的每个通道分开作为多个输出流

它接受下面的参数:

例如从输入MP3文件中分离立体声

ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv 

会创建一个包含2个音频流的Matroska文件,其中一个对应于原来的左声道,另外一个对应于右声道。

划分5.1声道的WAV文件:

ffmpeg -i in.wav -filter_complex
'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]'
-map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]'
front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]'
side_right.wav 

chorus

给声音添加合唱效果

可以让独唱变得像合唱,但也可以用于仪表。

合唱与回声效应都有短延迟,但是回波延迟是常数,合唱则采用不同的正弦或三角调制。调制深度范围定义了调制延迟(播放之前或之后的延迟)。因此延迟的声音听起来较慢或更快,这是原来周围的延迟调整声音,像是有一个与合唱整体略微差异。

它接受下面的参数(每个参数项如果有多个可能值用|分隔):

chorus例子

compand

音频压缩或扩展的动态范围(动态压缩)

它接受下面的参数(参数值有多个时用|分隔,各个参数间用:分隔):

compand例子

dcshift

将直流转换应用到音频。

这可以有助于消除直流偏置(可能由硬件问题引起的记录链)的音频。直流偏置的影响是减少空间,因此体积。astats滤镜可以用来确定一个信号直流偏移。

earwax

让声音更容易在耳机听

这个为44.1kHz立体声(即CD音频格式)添加cues(线索)。让声音听起来像离开了耳机,是在扬声器前面(标准应该播放的环境)。

它从SoX移植来。

equalizer

应用一个两极平衡(EQ)峰值滤镜。通过这个滤镜,信号电平值在选定的频率可以增强或者衰减(不想bandpass和bandreject滤镜),而其它频率不变。

为了产生复杂的平衡曲线,这个过滤器可以被使用几次,每一个都有不同的中心频率。

滤镜接受如下选项:

equalizer例子

flanger

为音频增加翻边效果

滤镜接受下面的选项:

highpass

指定频率3dB的高通滤波器。这个滤波器可以是单极或者双极(默认),滤波器每极有6dB倍频(每极10倍频是20dB)

滤镜接受下面选项:

join

把多个输入流连接成一个多通道流

它接受下面参数:

这个滤镜可用于未显式映射的一些应用。首先试图找到一个匹配行,如果没有就把第一个未使用的视频的音频信号插入。

ladspa

加载一个LADSPA(Linux音频开发人员的简和插件API)插件

编译选项:--enable-ladspa,接受下面的值。

ladspa例子

Commands

它支持下面的命令:

lowpass

应用3dB频点倍带宽的低通滤波器。它可以是单极或者双极的(默认)。滤镜每个8度有6dB的衰减(20dB 则是10倍)

滤镜接受下面的选项:

pan

按指定的增益关系混合。滤镜接受通道布局和一组通道定义

这个滤镜也可以有效的重新映射通道音频流。

滤镜接受的参数格式为:"l|outdef|outdef|..."

如果在通道描述中有‘=’而不是‘<’,则表明对指定通道总是按1倍重整(表明不变),从而避免削波噪音

pan的混合例子

例如,如果想下变换立体声为单声道,而且更大的权重是在左声道:

pan=1c|c0=0.9*c0+0.1*c1 

一个定制的下变换工作与 3- 4- 5- 和7- 通道环绕

pan=stereo| FL < FL + 0.5*FC + 0.6*BL + 0.6*SL | FR < FR + 0.5*FC + 0.6*BR + 0.6*SR 

pan的再映射例子

通道再映射仅在下面的情况起效:

如果这些条件都满足,滤镜将通知用户("Pure channel mapping detected"-“纯通道映射发现”),并使用一个优化和无损方法重新映射。

例如:如果有一个5.1声道要映射立体声,去除扩展通道:

pan="stereo| c0=FL | c1=FR" 

对于同一个源,你也可以交换左前和右前,保持输入布局:

pan="5.1| c0=c1 | c1=c0 | c2=c2 | c3=c3 | c4=c4 | c5=c5" 

如果是立体声源,要对左前通道静音(但保持立体声通道布局):

pan="stereo|c1=c1" 

仍然是立体声,把右前用两次:

pan="stereo| c0=FR | c1=FR" 

replaygain

ReplayGain扫描仪滤镜。这个滤镜以一个音频流作为输入和输出也不改变。在过结束后显示track_gain和track_peak。

resample

转换音频采样格式,采样率和通道布局,它一般不直接使用。

silencedetect

检测一个音频流中的静音。

这个滤镜是在检测到输入音频小于或等于一个噪音公差值,且持续时间大于或等于最低噪音持续时间时输出日志消息

输出的时间和持续时间以秒为单位

滤镜接受下面的选项:

silencedetect例子

silenceremove

从音频的开始、中间或者结束删除静默

滤镜接受如下选项:

silenceremove例子

treble

对频点的3倍(上下)利用双刀搁置(two-pole shelving)滤镜增加或者减少频率响应,类似于高保真的音控,也被称为搁置平衡(EQ)

滤镜接受下面选项:

volume

调整输入音量

接受下面的参数:

replaygain

选择当输入帧数据遇到`ReplayGain`(重演设置——音量增益)时的处理

drop

    丢掉ReplayGain,按原始标准 (默认值).
ignore

    忽略ReplayGain侧数据,但是离开它的框架
track

    采用轨道设置,如果存在
album

    采用专辑设置,如果存在 

replaygain_preamp

在应用`replaygain`的前置放大增益,单位dB

replaygain_preamp默认值为0.0. 

eval

设置如果计算音量表达式

它接受以下值:

‘once’

    仅在初始化时计算一次,或者`volume`命令被发生时
‘frame’

    在每个输入帧都重新计算 

默认‘once’. 

音量表达式支持下面的参数:.

注意如果计算模式是once,则除了sample_rate和tb有效外其他都无效而等于NAN

volume命令

滤镜支持下面的命令:

volume例子

volumedetect

检测输入音频音量

滤镜没有参数,输入也不会被编辑。统计数据将在输入流结束后输出到日志中。

特别是它显示平均音量(均方根),最大音量(每个样本基础上)和开始来的音量直方图(从最大音量累计1/1000样本)

所有的音量都是相对于最大PCM值的

volumedetect例子

这里有一个输出实例:

[Parsed_volumedetect_0  0xa23120] mean_volume: -27 dB
[Parsed_volumedetect_0  0xa23120] max_volume: -4 dB
[Parsed_volumedetect_0  0xa23120] histogram_4db: 6
[Parsed_volumedetect_0  0xa23120] histogram_5db: 62
[Parsed_volumedetect_0  0xa23120] histogram_6db: 286
[Parsed_volumedetect_0  0xa23120] histogram_7db: 1042
[Parsed_volumedetect_0  0xa23120] histogram_8db: 2551
[Parsed_volumedetect_0  0xa23120] histogram_9db: 4609
[Parsed_volumedetect_0  0xa23120] histogram_10db: 8409 

它意味着:

换句话说,提供+4dB的音量不会引起任何剪裁(削波),而提高+5dB就有6个地方会削波。

上一篇:翻译ffmpeg-all文档(33),时间线编辑
下一篇:翻译ffmpeg-all文档(35),音频源