我有我的文件夹中的3个.wav文件,我想将它们转换成MP3播放与ffmpeg的我写了这个bash脚本,将来作为跟随,但是当我执行它,只有第一个将被转换为MP3,我应该怎么做让脚本不断浏览我的文件
这是脚本:
#!/bin/bash
find ./ -name "*.wav" -print | while read f
do
    name=${f:2:${#f}-6}
    cmd='ffmpeg -i "$name.wav" -ab 320k -ac 2 "$name.mp3"'
    eval $cmd<br>
done
Sha*_*Lee 34
使用-nostdinffmpeg命令行中的标志
ffmpeg -nostdin -i "$name.wav" -ab 320k -ac 2 "$name.mp3"
请参阅此页面上的"-stdin/-nostdin"标志=> https://ffmpeg.org/ffmpeg.html
che*_*ner 16
如果您确实需要find(查看子目录或执行更高级的过滤),请尝试以下操作:
find ./ -name "*.wav" -exec ffmpeg -i "{}" -ab 320k -ac 2 '$(basename {} wav)'.mp3 \;
管道输出find到while循环有两个缺点:
ffmpeg由于我不知道的某些原因,将从标准输入读取,这会干扰read命令.通过简单地重定向标准输入即可轻松修复/dev/null,即   find ... | while read f; do ffmpeg ... < /dev/null; done.在任何情况下,都不要将命令存储在变量名中并使用它们进行评估eval.进入是危险的,也是一种坏习惯.如果确实需要将实际命令行分解出来,请使用shell函数.
#!/bin/bash
for name in *.wav; do
  ffmpeg -i "$name" -ab 320k -ac 2 "${name%.*}.mp3" 
done