• 欢迎访问好鸭博客网站,WordPress信息,WordPress教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入 QQ群
  • Git主题现已支持滚动公告栏功能,兼容其他浏览器,看到的就是咯,在后台最新消息那里用li标签添加即可。

shell下使用ffmpeg批量将wav转码为mp3

Linux haoduck 7个月前 (01-04) 9次浏览 0个评论

需求是这样的

在当前目录下有一些子目录,子目录下有一些wav文件,我的需求是把它们转为mp3

find命令实现查找所有wav文件
$ find -type f -name "*.wav"
./EXdata/NOSE/hoiku_Tr01_NoSE.wav
./EXdata/NOSE/hoiku_Tr02_NoSE.wav
./EXdata/NOSE/hoiku_Tr03_NoSE.wav
./EXdata/NOSE/hoiku_Tr04_NoSE.wav
./EXdata/NOSE/hoiku_Tr05_NoSE.wav
./EXdata/NOSE/hoiku_Tr06_NoSE.wav
./EXdata/NOSE/hoiku_Tr07_NoSE.wav
./EXdata/NOSE/hoiku_Tr08_NoSE.wav
./本編/hoiku_Tr00.wav
./本編/hoiku_Tr01.wav
./本編/hoiku_Tr02.wav
./本編/hoiku_Tr03.wav
./本編/hoiku_Tr04.wav
./本編/hoiku_Tr05.wav
./本編/hoiku_Tr06.wav
./本編/hoiku_Tr07.wav
./本編/hoiku_Tr08.wav

遍历它们就可以做想做的操作了,像这样
$ find -type f -name "*.wav"|while read filename
> do
> echo "$filename"
> done
./EXdata/NOSE/hoiku_Tr01_NoSE.wav
./EXdata/NOSE/hoiku_Tr02_NoSE.wav
./EXdata/NOSE/hoiku_Tr03_NoSE.wav
./EXdata/NOSE/hoiku_Tr04_NoSE.wav
./EXdata/NOSE/hoiku_Tr05_NoSE.wav
./EXdata/NOSE/hoiku_Tr06_NoSE.wav
./EXdata/NOSE/hoiku_Tr07_NoSE.wav
./EXdata/NOSE/hoiku_Tr08_NoSE.wav
./本編/hoiku_Tr00.wav
./本編/hoiku_Tr01.wav
./本編/hoiku_Tr02.wav
./本編/hoiku_Tr03.wav
./本編/hoiku_Tr04.wav
./本編/hoiku_Tr05.wav
./本編/hoiku_Tr06.wav
./本編/hoiku_Tr07.wav
./本編/hoiku_Tr08.wav

文件名不需要改变,只要后缀改为mp3即可,使用变量的字符串截取实现,也就是对$filename变量操作,像这样

${filename:2:-4}截取第2位到-4位,也就是去掉前面的./和后面的.wav

$ find -type f -name "*.wav"|while read filename; do echo "${filename:2:-4}"; done
EXdata/NOSE/hoiku_Tr01_NoSE
EXdata/NOSE/hoiku_Tr02_NoSE
EXdata/NOSE/hoiku_Tr03_NoSE
EXdata/NOSE/hoiku_Tr04_NoSE
EXdata/NOSE/hoiku_Tr05_NoSE
EXdata/NOSE/hoiku_Tr06_NoSE
EXdata/NOSE/hoiku_Tr07_NoSE
EXdata/NOSE/hoiku_Tr08_NoSE
本編/hoiku_Tr00
本編/hoiku_Tr01
本編/hoiku_Tr02
本編/hoiku_Tr03
本編/hoiku_Tr04
本編/hoiku_Tr05
本編/hoiku_Tr06
本編/hoiku_Tr07
本編/hoiku_Tr08

加上.mp3后缀就是这样

$ find -type f -name "*.wav"|while read filename; do echo "${filename:2:-4}.mp3"; do
ne
EXdata/NOSE/hoiku_Tr01_NoSE.mp3
EXdata/NOSE/hoiku_Tr02_NoSE.mp3
EXdata/NOSE/hoiku_Tr03_NoSE.mp3
EXdata/NOSE/hoiku_Tr04_NoSE.mp3
EXdata/NOSE/hoiku_Tr05_NoSE.mp3
EXdata/NOSE/hoiku_Tr06_NoSE.mp3
EXdata/NOSE/hoiku_Tr07_NoSE.mp3
EXdata/NOSE/hoiku_Tr08_NoSE.mp3
本編/hoiku_Tr00.mp3
本編/hoiku_Tr01.mp3
本編/hoiku_Tr02.mp3
本編/hoiku_Tr03.mp3
本編/hoiku_Tr04.mp3
本編/hoiku_Tr05.mp3
本編/hoiku_Tr06.mp3
本編/hoiku_Tr07.mp3
本編/hoiku_Tr08.mp3

组合一下ffmpeg的命令,ffmpeg的命令是这样的ffmpeg -i filename.wav filename.mp3,和上面的遍历操作,截取文件名操作组合起来,像这样

这里保留了echo,去掉它就是直接执行ffmpeg命令了,对于截取文件名还不确定的时候都建议echo看一下命令有没有问题

$ find -type f -name "*.wav"|while read filename; do echo ffmpeg -i "${filename:2}"
"${filename:2:-4}.mp3"; done
ffmpeg -i EXdata/NOSE/hoiku_Tr01_NoSE.wav EXdata/NOSE/hoiku_Tr01_NoSE.mp3
ffmpeg -i EXdata/NOSE/hoiku_Tr02_NoSE.wav EXdata/NOSE/hoiku_Tr02_NoSE.mp3
ffmpeg -i EXdata/NOSE/hoiku_Tr03_NoSE.wav EXdata/NOSE/hoiku_Tr03_NoSE.mp3
ffmpeg -i EXdata/NOSE/hoiku_Tr04_NoSE.wav EXdata/NOSE/hoiku_Tr04_NoSE.mp3
ffmpeg -i EXdata/NOSE/hoiku_Tr05_NoSE.wav EXdata/NOSE/hoiku_Tr05_NoSE.mp3
ffmpeg -i EXdata/NOSE/hoiku_Tr06_NoSE.wav EXdata/NOSE/hoiku_Tr06_NoSE.mp3
ffmpeg -i EXdata/NOSE/hoiku_Tr07_NoSE.wav EXdata/NOSE/hoiku_Tr07_NoSE.mp3
ffmpeg -i EXdata/NOSE/hoiku_Tr08_NoSE.wav EXdata/NOSE/hoiku_Tr08_NoSE.mp3
ffmpeg -i 本編/hoiku_Tr00.wav 本編/hoiku_Tr00.mp3
ffmpeg -i 本編/hoiku_Tr01.wav 本編/hoiku_Tr01.mp3
ffmpeg -i 本編/hoiku_Tr02.wav 本編/hoiku_Tr02.mp3
ffmpeg -i 本編/hoiku_Tr03.wav 本編/hoiku_Tr03.mp3
ffmpeg -i 本編/hoiku_Tr04.wav 本編/hoiku_Tr04.mp3
ffmpeg -i 本編/hoiku_Tr05.wav 本編/hoiku_Tr05.mp3
ffmpeg -i 本編/hoiku_Tr06.wav 本編/hoiku_Tr06.mp3
ffmpeg -i 本編/hoiku_Tr07.wav 本編/hoiku_Tr07.mp3
ffmpeg -i 本編/hoiku_Tr08.wav 本編/hoiku_Tr08.mp3

像下面这样就是直接执行了

$ find -type f -name "*.wav"|while read filename; do ffmpeg -i "${filename:2}"
"${filename:2:-4}.mp3"; done


极客公园 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:shell下使用ffmpeg批量将wav转码为mp3
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址