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

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

相关推荐
Simorel3 小时前
解决获取视频第一帧黑屏问题
视频·封面
神探小白牙6 小时前
vue-video-player视频保活成功确无法推送问题
前端·vue.js·音视频
春末的南方城市14 小时前
Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然
人工智能·计算机视觉·自然语言处理·aigc·音视频
Hygge-star1 天前
Flask音频处理:构建高效的Web音频应用指南
前端·flask·音视频·pygame·csdn开发云
hao_wujing2 天前
使用有限计算实现视频生成模型的高效训练
音视频
追随远方2 天前
Android音频开发:Speex固定帧与变长帧编解码深度解析
android·音视频
aqi002 天前
FFmpeg开发笔记(六十四)使用国产的RedPlayer播放器观看网络视频
android·ffmpeg·音视频·直播·流媒体
英英_2 天前
视频爬虫的Python库
开发语言·python·音视频
道剑剑非道2 天前
QT开发技术【ffmpeg + QAudioOutput】音乐播放器 完善
开发语言·qt·ffmpeg
毒果2 天前
FFmpeg 低延迟同屏方案
ffmpeg·同屏