【FFMpeg 命令行】基本应用

1. pcm转wav

ffmpeg -f s16le -ar 16k -ac 1 -i input.pcm output.wav

-f format 可以用-formats查看支持的格式,s16le代表pcm16位有符号小端存储
-ar audio rate 采样率,单位是Hz,每秒的采样数
-ac audio channel数,一般默认是1
-i 输入

2. wav转pcm

 ffmpeg -i input.wav -f s16le -ar 48000 -ac 1 -acodec pcm_s16le output.pcm

-acodec 编码器格式

3. wav重采样

ffmpeg -i input.wav -ar 48000 output.wav

4. 把两个单通道的wav合成一个双通道的wav

ffmpeg -i left.wav -i right.wav -filter_complex "[0]apad[FL];[FL][1]amerge[aout]" -map  "[aout]" out.wav

滤镜查询地址 https://ffmpeg.org/ffmpeg-filters.html
-filter_complex 后面加一个滤镜
apad 静音填充 输入[0]静音填充输出为[FL]
amerge 两个或多个音频合并为一个多声道流 [FL][0]合成为[aout]
-map 映射输出到输出文件

5. 两个音频叠加

ffmpeg -i ${speechpath} -i ${noisepath} \
-filter_complex \
"amovie=${speechpath} [s];amovie=${noisepath} [n]; \
[s] adelay=${delay}ms [s1]; \
[n][s1]amix=inputs=2:duration=longest:dropout_transition=3:weights='${a} ${b}'" \
${outpath}

● amovie 相当于给输入重命名,否则用[0] [1]
● 分号用来把单个filter隔开,冒号分割参数
● adelay是将输入延迟
● amix用来合成
● 思路为通过三个随机数,即延迟和两个权重来进行随机控制,将语音随机延迟之后和噪声进行合成

6. 获取音频的长度,并转化为毫秒

duration=$(ffmpeg -i ${speechpath} 2>&1 \
	| grep 'Duration' | cut -d ' ' -f 4 | sed s/,//)
ss=$(awk "BEGIN{print ${duration:0:2}*3600000+ \
  ${duration:3:2}*60000+ \
  ${duration:6:2}*1000+ \
  ${duration:9:2}*10}") #语音毫秒数

● 把ffmpeg的输出重定向,获取到Duration的行,使用cut命令用空格分开,得到第四列,把逗号删除掉
● 毫秒数直接用awk来计算

7. 干掉音频前后的静音部分

在处理正样本语音部分很有用

ffmpeg -i ${voicedir}/${filename} -filter_complex \
silenceremove=start_periods=1:start_duration=0.1:start_threshold=-50dB: \
stop_periods=-1:stop_duration=0.1:stop_threshold=-50dB \
${outdir}/${filename}

● start开头的一组参数是干掉音频开头小于-50dB且时长大于0.1s的静音
● stop开头的一组是干掉完开头之后,再干掉结尾小于-50dB且长度大于0.1s的静音
● stop只有在start设置了的情况下有效

8. 截取前后两部分并将后前填充0

ffmpeg -i input.wav -filter_complex "[0]atrim=0:1.05[l];[l]apad=whole_len=32000" out.wav
ffmpeg -i input.wav -filter_complex "0[atrim]=1.05:2[r];[r]adelay=1050" out.wav

● atrim 的单位是秒 支持小数
● adelay单位是ms
● apad的单位是采样数

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值