音频信息
查看音频信息
ffmpeg -i video.mp4
查看网络视频的信息
ffmpeg -i http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4
查看音频的布局情况
ffmpeg -layouts
音频抽取
从视频文件中抽取音频
提取完整音频
ffmpeg -i sample.mp4 -q:a 0 -map a sample.mp3
提取指定时间段的音频
ffmpeg -i sample.mp4 -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3
不重新编码
提取格式不能为MP3,可以是aac和m4a,请执行以下操作:
ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
-acodec 表示音频解码方式,-vn表示去除视频
重新编码
下面是如何使用FFmpeg从视频中提取音频,然后使用libmp3lame将音频编码为不同的质量,并将其存储为mp3文件。
ffmpeg.exe -i videoWithAudio.mp4 -vn -c:a libmp3lame -q:a 1 onlyAudio.mp3
-q:a表示质量(在LAME文档中定义[1]),质量分布范围为0~6,其中0表示高质量音频,6表示低质量音频。
从网络视频文件中抽取音频
ffmpeg -i http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4 -acodec copy -vn out_net.mp4
-acodec 用于音频的编码设置
合并
一种方法是连接到一起
ffmpeg64.exe -i "concat:123.mp3|124.mp3" -acodec copy output.mp3
解释:-i代表输入参数
contact:123.mp3|124.mp3代表着需要连接到一起的音频文件
-acodec copy output.mp3 重新编码并复制到新文件中
另一种方法是混合到一起
ffmpeg64.exe -i 124.mp3 -i 123.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=2 -f mp3 remix.mp3
解释:-i代表输入参数
-filter_complex ffmpeg滤镜功能,非常强大,详细请查看文档
amix是混合多个音频到单个音频输出
inputs=2代表是2个音频文件,如果更多则代表对应数字
duration 确定最终输出文件的长度
longest(最长)|shortest(最短)|first(第一个文件)
dropout_transition
The transition time, in seconds, for volume renormalization when an input stream ends. The default value is 2 seconds.
-f mp3 输出文件格式
删除音频
删除视频中的音频
只将视频复制到一个新的文件中,而不复制音频。
ffmpeg.exe -i videoWithAudio.mp4 -c:v copy -an videoWithoutAudio.mp4
- 使用-c:v copy命令将视频复制到videoWithoutAudio.mp4
- -an告诉FFmpeg不要复制音频
上述方法非常适用于电影中只有一个音轨的情况。
删除某个特定音轨
你可以使用FFmpeg中的map命令来删除特定音轨。
map命令的通用语法是:
-map input_file_index:stream_type_specifier:stream_index
然后,你可以通过-map 0:a:1
(从0开始计数)从视频中选择第二个音轨。在上文的例子中,如果你的文件中有一个视频和两个音轨,那么你就可以使用-map 0:a:1
只选择第二个音轨,并将它复制到你的最终输出文件中。
同样,-map 0是指选择第一个输入文件中的所有数据(包括音频和视频),所以你需要先选择所有数据,然后取消选择音频。
ffmpeg.exe -i videoWithAudio.mp4 -map 0 -map 0:a:1 -copy videoOutput.mp4
如果电影中有5个音轨,除了第一个,其他你都想选择。这个时候你可以使用反向的map命令(在map命令的参数前加负号)。使用-map -0:a:0
这一命令,FFmpeg在选择时就会忽略第一个音轨。反向的map非常强大!
实际上,我们已在前文学习了使用 -an命令从视频中删除音频。你可以通过如下方式,使用反向的map来达到相同的效果。
ffmpeg -i videoWithAudio.mp4 -map 0 -map -0:a videoWithoutAudio.mp4
添加音频
ffmpeg -i video.mp4 -i audio.mp3 -c copy -map 0:v:0 -map 1:a:0
videoWithAudio.mp4
使用map命令将视频和音频分别从不同的文件中复制到同一个输出文件。
-map 0:v:0
选择了第0个输入文件(视频输入)的第0个轨道。–map 1:a:0
选择了第一个输入文件(音频输入)的第0个轨道。- 不用重新编码,-c copy同时复制音轨和视轨到输出文件。如果你想要重新编码,可以选择合适的音视频编解码器,配置相应的编码质量。
替换音频
请看下列命令行:
-map input_file_index:stream_type_specifier:stream_index.
所以,你可以使用-map 1:a:2
来选择第二个输入文件中的第三个音轨,因为计数从0开始。
ffmpeg -i video_with_audio.mp4 -i newAudio.wav -map 0:0 -map 1:0 -c:v copy -c:a libmp3lame -q:a 1 -shortest video_with_newAudio.mp4
在上文的例子中,我们需要从一个文件中获取视频以及另一个文件中获取音频。而map命令非常便捷地完成了上述操作。我们从第一个输入文件(视频)中选择第0个轨道,并从第2个输入文件(音频)中选择第0个轨道。
然后我们原样复制视频并重新编码音频,再将它们一起放入新的文件中。如果你不想重新编码音频,你只需使用-a:c copy命令,那么音频就只被复制而不会重新编码。
-shortest命令用于确保当达到较短的输入文件(两个输入文件之一)长度时停止转换。如果这个功能在你的用例中无关紧要,那么你可以不使用这一命令。
绘制音频波形图
绘制多声道混合的音频波形图
ffmpeg -i music.mp3 -filter_complex "showwavespic=s=640*120" -frames:v 1 output.png
绘制不同声道的波形图
ffmpeg -i 1.mp3 -filter_complex "showwavespic=s=640*240:split_channels=1" -frames:v 1 output.png
使用多媒体滤镜 ebur128分析音频响度变化
ebur128扫描滤镜。这个滤镜需要一个音频流,但会原样输出。默认情况下,它以10Hz的频率记录一条消息,其中包括瞬时响度(由M标识)、短期响度(S)、综合响度(I)和响度范围(LRA)。
滤镜有个实时的输出,展示响度的变化,主要的绘图区域包含短期响度(3秒分析),以及其后的舒适响度(400毫秒)
具体参数:https://ffmpeg.org/ffmpeg-all.html#ebur128-1
ffmpeg -nostats -i stars.mp3 -filter_complex ebur128 -f null -
加-report可把结果输出到日志文件
利用EBU放缩规模计+18d的实时图像
ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
改变格式
ffmpeg -i audio.mp3 -f ogg out.ogg
-f ogg表示编码格式是ogg
改变采样率
ffmpeg -i audio.mp3 -ar 8000 out.mp3
-ar 用于设置音频采样率
改变比特率
ffmpeg -i audio.mp3 -ab 5000 out.mp3
-ab 用于设置音频比特率
片段截取
-ss 表示开始时间(时:分:秒),-to 表示结束时间(时:分:秒),-t 表示截取时长(时:分:秒)
ffmpeg -i audio.mp3 -ss 0:0:10 -to 0:0:20 out.mp3
ffmpeg -i audio.mp3 -ss 0:0:10 -t 0:0:20 out.mp3
也可以像下面这样,以秒为单位。
ffmpeg -i audio.mp3 -ss 10 -t 20 out.mp3
-ss用于设置开始时间,-t用于设置持续时间
音频声道
改变声道
ffmpeg -i audio.mp3 -ac 1 out.mp3
-ac 用于设置声道,1表示单声道,2表示立体声
双声道合并单声道
ffmpeg -i music.mp3 -ac 1 music.aac
单声道转双声道
ffmpeg -i left.aac -ac 2 output.m4a
双声道的提取
-map_channel [input_file_id.stream_specifier.channel_id|-1][?][:output_file_id.stream_specifier]
方式一:
ffmpeg -i music.mp3 -map_channel 0.0.0 letf.aac -map_channel 0.0.1 right.aac
方式二:
使用pan滤镜
ffmpeg -i music.mp3 -filter_complex "[0:0]pan=1c|c0=c0[left];[0:0]pan=1c|c0=c1[right]" -map "[left]" left.aac -map "[right]" right.aac -y
双声道转双音频流,把双声道音频提取出来转为一个音频文件两个音频流
ffmpeg -i music.mp3 -filter_complex channelsplit=channel_layout=stereo output.mka
可以看到生成的视频就包含了两个流,大多默认情况下播放器只会播放第一个流
将两个音频源合并为双声道
ffmpeg -i left.aac -i right.aac -filter_complex "[0:a][1:a]amerge=inputs=2[aout]" -map "[aout]" output.mka
//mka为acc编码格式
音频音量
音频音量探测
ffmpeg -i test.mp4 -filter_complex volumedetect -c:v copy -f null /dev/null
mean_volume为获得音频的平均大小
音量设置
使用-vol选项
ffmpeg -i music.mp3 -vol 30 sound_low.mp3
-vol选项接受从0到256的整数值,其中256是最大值
使用表中描述的卷过滤器
音量降低到三分之二
ffmpeg -i music.mp3 -af volume=2/3 quiet_music.mp3
增加10分贝的音量
ffmpeg -i music.mp3 -af volume=10dB louder_sound.mp3
加快/减慢音频节奏
加快
ffplay music.mp3 -af atempo=1.5
减慢
ffplay music.mp3 -af atempo=0.5
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
参考文章
FFMPEG常用命令(一):音视频信息与抽取
FFMPEG常用命令(三):音频相关命令
ffmpeg常用音频处理
使用FFmpeg添加、删除、替换和提取视频中的音频
🔨 FFmpeg 提取视频的音频
ffmpeg 多个音频合并 截取 拆分