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

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

相关推荐
victory04317 小时前
在音频领域采用mamba模型可行性分析
音视频
Black蜡笔小新7 小时前
视频汇聚平台EasyCVR级联播放偶发失败排查:TCP主动模式下的3秒超时响应差
网络·tcp/ip·音视频
未来之窗软件服务8 小时前
未来之窗昭和仙君(二十八)商业收银开发音频播放——东方仙盟筑基期
microsoft·音视频·仙盟创梦ide·东方仙盟·昭和仙君
Code blocks9 小时前
GB28181视频服务wvp搭建(二)
后端·音视频
猫林老师10 小时前
HarmonyOS多媒体开发:自定义相机与音频播放器实战
数码相机·音视频·harmonyos
mortimer12 小时前
用一行 FFmpeg 命令,让噪音俯首,让语音转录更准确一点
ffmpeg·openai
EasyNVR19 小时前
EasyNVR 录像自由时段启停与快照定时更新
音视频
ontheway-xx20 小时前
ffmpeg4.4.2 gcc 15.2.0 编译错误
ffmpeg·音视频
FFZero121 小时前
【C++/Lua联合开发】 (一) Lua基础知识
c++·音视频·lua
EasyCVR1 天前
视频汇聚平台EasyCVR在智慧工地无网线无电线监控现场视频解决方案
音视频