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"文件。

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

相关推荐
Fre丸子_3 小时前
ffmpeg之播放一个yuv视频
ffmpeg·音视频
9527华安3 小时前
FPGA多路MIPI转FPD-Link视频缩放拼接显示,基于IMX327+FPD953架构,提供2套工程源码和技术支持
fpga开发·架构·音视频
catmes4 小时前
设置浏览器声音或视频的自动播放策略
chrome·音视频·edge浏览器
yinqinggong5 小时前
从源码编译支持FFmpeg的OpenCV
opencv·ffmpeg
冰山一脚20136 小时前
ffmpeg添加sps,pps
ffmpeg
杨德杰6 小时前
QT多媒体开发(一):概述
qt·音视频·多媒体
是十一月末7 小时前
Opencv实现图片和视频的加噪、平滑处理
人工智能·python·opencv·计算机视觉·音视频
余~~185381628009 小时前
稳定的碰一碰发视频、碰一碰矩阵源码技术开发,支持OEM
开发语言·人工智能·python·音视频
m0_748232399 小时前
WebRTC学习二:WebRTC音视频数据采集
学习·音视频·webrtc
Kai HVZ11 小时前
python爬虫----爬取视频实战
爬虫·python·音视频