我的文件夹中有三个.wav文件,我想用ffmpeg将它们转换成.mp3。
我写了这个bash脚本,但是当我执行它时,只有第一个脚本被转换为mp3。
我应该怎么做才能让脚本继续浏览我的文件?
脚本是这样的:
#!/bin/bash
find . -name '*.wav' | while read f; do
ffmpeg -i "$f" -ab 320k -ac 2 "${f%.*}.mp3"
done发布于 2014-02-08 01:36:25
没有理由使用find,只需使用bash通配符全局搜索
#!/bin/bash
for name in *.wav; do
ffmpeg -i "$name" -ab 320k -ac 2 "${name%.*}.mp3"
done 发布于 2017-05-30 04:34:56
使用-nostdin标志禁用交互模式,
ffmpeg -nostdin -i "$f" -ab 320k -ac 2 "${f%.*}.mp3"或者让ffmpeg从控制终端而不是stdin读取其输入。
ffmpeg -i "$f" -ab 320k -ac 2 "${f%.*}.mp3" </dev/tty请参阅ffmpeg documentation中的-stdin/-nostdin标志
发布于 2014-02-08 02:02:48
如果您确实需要find (用于查找子目录或执行更高级的过滤),请尝试执行以下操作:
find ./ -name "*.wav" -exec sh -c 'ffmpeg -i "$1" -ab 320k -ac 2 "$(basename "$1" wav).mp3"' _ {} \;通过管道将find的输出传输到while循环有两个缺点:
在匹配的文件名包含换行符character.
ffmpeg,的情况下(可能很少见),它会失败,因为我不知道什么原因,它将从标准输入读取,这会干扰read命令。这很容易修复,只需重定向来自find ... | while read f; do ffmpeg ... < /dev/null; done.的/dev/null标准输入即可
在任何情况下,都不要将命令存储在变量名中并使用eval计算它们。养成这样的习惯既危险又不好。如果您确实需要确定实际的命令行,请使用shell函数。
https://stackoverflow.com/questions/21634088
复制相似问题