FFmpeg 音视频处理

我们知道,使用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"文件。

熟练掌握上述命令,基本上后面遇到影视频相关的操作问题,基本都可以解决。上述脚本基本涉及了音视频所有操作,满足绝大数的需求。

相关推荐
hunandede2 小时前
FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码,AVPacket 重要函数,结构体成员学习
c++·ffmpeg·音视频
橘子味的茶二2 小时前
SDL读取PCM音频
ffmpeg·音视频·pcm
MediaTea14 小时前
Pr 视频过渡:沉浸式视频 - VR 色度泄漏
音视频·vr
LNTON羚通14 小时前
算法定制LiteAIServer摄像机实时接入分析平台烟火检测算法的主要功能
音视频·视频监控
EasyCVR19 小时前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
简鹿办公20 小时前
使用 FFmpeg 进行音视频转换的相关命令行参数解释
ffmpeg·简鹿视频格式转换器·ffmpeg视频转换
冷凝女子1 天前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
安步当歌1 天前
【WebRTC】视频编码链路中各个类的简单分析——VideoStreamEncoder
音视频·webrtc·视频编解码·video-codec
顾北川_野1 天前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
顶呱呱程序1 天前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法