我们知道,使用FFmpeg 很容易对音视频进行处理,这里分享总结下之前一个项目用到的音视频分割,合成脚本。
涉及的主要操作:音频静音剔除,视频提取音频,音频拼接技术,混合音视频流操作
(1)提取音频
提取视频中的音频元素,保存为wav 音频格式
ffmpeg.exe -i 5f.mp4 -acodec pcm_s16le -f s16le -ac 1 -ar 16000 -f wav an.wav
命令说明
-i 5f.mp4
: 指定输入文件为"5f.mp4",这是要提取音频的视频文件。-acodec pcm_s16le
: 设置音频编解码器为PCM 16位有符号整数。-f s16le
: 指定输出音频格式为16位有符号整数。-ac 1
: 设置输出音频为单声道。-ar 16000
: 设置输出音频的采样率为16000 Hz。-f wav
: 指定输出音频格式为WAV。an.wav
: 指定输出的音频文件名为"an.wav"。命令的作用是从输入的视频文件中提取音频,并将其保存为单声道、采样率为16000 Hz的WAV格式音频文件"an.wav"。
(2)去除静音 得到 目标 wav
对于静音部分剔除掉,加快播放速度
ffmpeg.exe -i an.wav -af silenceremove=stop_periods=-1:stop_duration=0.3:stop_threshold=-30dB an001.wav
-i an.wav
: 指定输入文件为"an.wav",这是要进行静音删除的音频文件。
-af silenceremove=stop_periods=-1:stop_duration=0.3:stop_threshold=-30dB
: 应用silenceremove滤镜来删除静音段。
stop_periods=-1
: 设置停止段数为-1,表示不限制停止段数。stop_duration=0.3
: 设置停止段的最小持续时间为0.3秒,持续时间低于该阈值的段落将被删除。stop_threshold=-30dB
: 设置停止段的音量阈值为-30dB,低于该阈值的段落被认为是静音部分。
an001.wav
: 指定输出的音频文件名为"an001.wav"。命令的作用是对输入的音频文件应用静音删除滤镜,将删除静音部分后的音频保存为"an001.wav"。
(3)合并 开始前面 和 后续 wav
如果你有多个wav 文件需要拼接,可以使用下面的命令进行合并(这里应该可以通过命令行输入多个文件解决,而不是通过读文件解决)
新建一个文件 写入 1.txt
file 'raudio.wav'
file 'an001.wav'
执行命令合并wav 文件
ffmpeg.exe -f concat -i 1.txt -c copy total.wav
使用FFmpeg的concat协议,将多个音频文件按顺序拼接在一起,并将拼接后的音频保存为"total.wav"文件。各个参数的含义:
-f concat
: 指定输入文件格式为concat,表示要使用concat协议进行文件拼接。-i 1.txt
: 指定输入的文本文件为"1.txt",该文本文件包含了要拼接的音频文件列表及其路径信息。-c copy
: 设置输出的音频流采用拷贝方式,即不进行重新编码,保持原始音频的编码格式和质量。total.wav
: 指定输出的音频文件名为"total.wav"。命令的作用是根据指定的文本文件中的音频文件列表,将这些音频文件按顺序拼接在一起,并将拼接后的结果保存为"total.wav"文件。确保在指定的文本文件中正确列出了要拼接的音频文件及其路径信息。
(5)执行 MP4 和音频合并
将音频与视频进行合并,例如将音频合并回 原来的视频中(原来视频中的音频会去除了,这里是否能添加参数,指定保留原来视频中的音频?)
ffmpeg.exe -i 5f.mp4 -i total.wav -c:v copy -c:a aac -strict experimental -map 0:v:0 -map 1:a:0 outputname.mp4
使用FFmpeg将一个视频文件"5f.mp4"和一个音频文件"total.wav"进行合并,并将合并后的结果保存为"outputname.mp4"文件。各个参数的含义:
-i 5f.mp4
: 指定输入的第一个文件为"5f.mp4",要进行合并的视频文件。-i total.wav
: 指定输入的第二个文件为"total.wav",要进行合并的音频文件。-c:v copy
: 使用视频流的拷贝方式进行编码,表示视频流不进行重新编码,保持原始视频的编码格式和质量。-c:a aac
: 使用AAC编码对音频流进行编码,表示音频流将使用AAC格式进行编码。-strict experimental
: 设置使用实验性的AAC编码器,选项在一些旧版本的FFmpeg中可能是必需的,保证旧的版本的ffmpeg 也可以运行。-map 0:v:0
: 指定要映射的第一个输入文件的视频流,这里的"0:v:0"表示第一个输入文件的第一个视频流。-map 1:a:0
: 指定要映射的第二个输入文件的音频流,这里的"1:a:0"表示第二个输入文件的第一个音频流。outputname.mp4
: 指定输出的文件名为"outputname.mp4"。作用是将输入的视频文件"5f.mp4"和音频文件"total.wav"进行合并,保持视频流不进行重新编码,使用AAC编码对音频流进行编码,并将合并后的结果保存为"outputname.mp4"文件。
熟练掌握上述命令,基本上后面遇到影视频相关的操作问题,基本都可以解决。上述脚本基本涉及了音视频所有操作,满足绝大数的需求。