我有一个以目录为输入的 shell 脚本,读取其中的所有mp4
文件并将它们转换为mp3
with ffmpeg
:
#!/bin/bash
dir=$1
while read -rd "" file
do
base=$(basename "$file")
filename=${base%(*}".mp3"
ffmpeg -i "$file" -vn -ar 44100 -ac 2 -ab 192000 -f mp3 "$filename" &
done < <(find $dir -maxdepth 1 -iname "*.mp4" -print0)
wait
exit 0
目前所有这些调用ffmpeg
都是分叉的,因为当我&
在最后省略第一个文件时,只有第一个文件被转换,其他文件被忽略。
但这是有问题的,因为某些文件错误消息会失败,如下所示:
路径/到/文件/文件名 - 带空格(信息)(临时信息).mp4:没有这样的文件或目录
所有文件名通常都包含空格,这可能是某些文件失败的原因。
因此,我有以下问题:
- 当我不分叉
ffmpeg
调用时,为什么只执行第一个文件?我希望循环一直等到过程完成,然后继续下一次迭代。 - 为什么脚本找不到某些文件(可能是 的问题
ffmpeg
)? - 如何解决所有这些问题并使脚本正常工作?