将flac文件转换为mp3文件使用以下命令即可
(同时会将flac文件的Vorbis注释转换为mp3的ID3v2元数据)
ffmpeg -i input.flac -ab 320k -map_metadata 0 -id3v2_version 3 output.mp3
视频提取MP3
从原有视频提取音频
ffmpeg.exe -i input.mp4 -vn output.mp3
截取音频片段
ffmpeg.exe -i input.mp3 -ss 00:00:00 -t 00:01:00 output.mp3
上面提取和截取也可合并为一步。
参数说明
-i 输入文件(任意格式)
-vn 不使用视频纪录
-ss 开始时间
-t 持续时间
2.音量调整
2.1.基于当前音量倍数处理
<1>将当前音量降低一半:
ffmpeg -i input.mp3 -af volume=0.5 output.mp3
<2>将当前音量提升一倍。这种处理相对粗暴,会使音频出现失真现象:
ffmpeg -i input.mp3 -af volume=2 output.mp3
2.2.基于分贝数值的处理
上面基于倍数的处理可能会导致音频失真,而基于分贝数值的处理则相对会保留音频的原声效果。
<1>音量提升5分贝(db):
ffmpeg -i input.mp3 -filter:”volume=5dB” output.mp3
<2>音量降低5分贝(db):
ffmpeg -i input.mp3 -filter:”volume=-5dB” output.mp3
3.音量的标准化
ffmpeg具备对音量标准化的处理功能,即削峰填谷,使整个音频的音量变得平滑
ffmpeg -i input.mp3 -filter:a “loudnorm=i=-14:tp=0.0” output.mp3
调整音频速度
ffmpeg -i welcome_30.mp3 -af “atempo=2.0” -vn out.mp3
使用FFmpeg删除视频中的音频
很多人想要知道如何从录制的视频中删除音轨,比如马路噪音或者背景噪音。
删除音频最简单的方法是:只将视频复制到一个新的文件中,而不复制音频。这个方法之所以简单,是因为它无需将视频重新编码。下面是删除音频的命令行:
ffmpeg.exe -i videoWithAudio.mp4 -c:v copy -an videoWithoutAudio.mp4
使用-c:v copy命令将视频复制到videoWithoutAudio.mp4
-an告诉FFmpeg不要复制音频
上述方法非常适用于电影中只有一个音轨的情况。但是,如果电影中有3~4个音轨,而你只想删除第二个音轨,该如何操作?
如何通过FFmpeg删除某个特定音轨?
我们在下一部分将学习到。
使用FFmpeg删除特定音频
你可以使用FFmpeg中的map命令来删除特定音轨。
map命令的通用语法是:
-map input_file_index:stream_type_specifier:stream_index
然后,你可以通过-map 0🅰️1(从0开始计数)从视频中选择第二个音轨。在上文的例子中,如果你的文件中有一个视频和两个音轨,那么你就可以使用-map 0🅰️1只选择第二个音轨,并将它复制到你的最终输出文件中。
同样,-map 0是指选择第一个输入文件中的所有数据(包括音频和视频),所以你需要先选择所有数据,然后取消选择音频。
ffmpeg.exe -i videoWithAudio.mp4 -map 0 -map 0:a:1 -copy videoOutput.mp4
如果电影中有5个音轨,除了第一个,其他你都想选择。这个时候你可以使用反向的map命令(在map命令的参数前加负号)。使用-map -0🅰️0 这一命令,FFmpeg在选择时就会忽略第一个音轨。反向的map非常强大!
实际上,我们已在前文学习了使用 -an命令从视频中删除音频。你可以通过如下方式,使用反向的map来达到相同的效果。
ffmpeg -i videoWithAudio.mp4 -map 0 -map -0:a videoWithoutAudio.mp4
使用FFmpeg添加音频
你已经删除了一个音轨,那么你很可能想要再添加一个,对吧?下面我们将学习如何使用FFmpeg向视频中添加音频。
在前文中你已经学习了map命令的使用,因此添加音频对你来说应该很容易。命令行如下所示:
ffmpeg \
-i video.mp4 \
-i audio.mp3 \
-c copy \
-map 0:v:0 \
-map 1:a:0 \
videoWithAudio.mp4
上面的命令行很容易理解。你所做的就是使用map命令将视频和音频分别从不同的文件中复制到同一个输出文件。
-map 0✌️0 选择了第0个输入文件(视频输入)的第0个轨道。
–map 1🅰️0 选择了第一个输入文件(音频输入)的第0个轨道。
不用重新编码,-c copy同时复制音轨和视轨到输出文件。如果你想要重新编码,可以选择合适的音视频编解码器,配置相应的编码质量。
生成静音文件
ffmpeg -f lavfi -i anullsrc -t 10 silent-audio.mp3
ffplay -f lavfi -i anullsrc=r=44100:cl=stereo -t 10 silent-audio.mp3
ffmpeg -i input.wav -af silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-30dB output.wav
剪去所有从开始到结束遇到的音频中超过1秒的静音片段,
ffmpeg -i input.wav -af silenceremove=stop_periods=-1:stop_duration=0.3:stop_threshold=-30dB output.wav
剪去所有从开始到结束遇到的音频中超过0.3秒的静音片段,
C# FFmpeg合并多个音频文件,并指定每段音频的插入时间。
合成音频的FFmpeg命令为:
ffmpeg -i 11.wav -i 13.wav -filter_complex “[0]adelay=1s:all=1[0a];[1]adelay=26s:all=1[1a];[0a][1a]amix=inputs=2[a]” -map “[a]” output.wav
不知道具体啥意思,大概猜测一下,
-i <fileName>
输入文件的路径,有几个文件就几个-i命令
[0]adelay=1s:all=1[0a]
[0]和[0a]指的是第几个文件,索引从0开始,adelay=1s
从音频的第一秒开始插入,默认是毫秒,adelay=1000, 如果加后缀s,则指的秒数,此时不支持小数位写法。(4.2版本以下不支持1s这种写法),all:Use last set delay for all remaining channels. By default is disabled. This option if enabled changes how option delays is interpreted.
amix=inputs=2
2指的是一共有几个文件
output.wav
输出文件的路径或者文件名
文件名都支持全路径的写法。可以是 C:\Data\CHN\Other\FFmpegMergeMp3\11.wav
也可以是 11.wav