【发布时间】:2014-12-25 12:43:45
【问题描述】:
我知道已经有很多这样的问题,但我的情况很独特,到目前为止没有一个对我有帮助。
我正在编写一个脚本,它将重新格式化我的(标记不佳的)音乐库。目前格式为 Music/Genre/Artist/Album/##-Title.wav。
我从 Music 目录运行我的 script1,它调用 find -name "*.wav" -exec script2 {} ${other_args}。 Script2解析变量的路径,如果不存在则创建相应的输出目录,然后调用ffmpeg进行压缩。
例如:($sourcefilepath 包含来自 find 的 {})
ffmpeg -i "$sourcefilepath" "$path/$to/$outfile.$extension"
如果我的文件名或路径不包含空格,它就像一个魅力。
如果包含空格,ffmpeg会失败,报错如下:
蓝调/乡村蓝调/节奏、乡村与蓝调/08-Natalie Cole & Reba McEntire since I Fell For You.wav: 没有这样的文件或目录
注意:这是它找不到的源文件。输出文件似乎工作正常,即使有空格。这不是我正在运行的完整命令(它也有一些 -metadata 标志,但它似乎也可以正常工作。我正在使用上面编写的命令进行调试)。
这里有趣的是 ffmpeg 没有将 $sourcefilepath 解释为两个参数,它只是找不到我指定的文件。从 Music 目录运行以下命令。
ffmpeg -i Blues/Country\ Blues/Rhythm\,\ Country\ And\ Blues/08-Natalie\ Cole\ \&\ Reba\ McEntire\ \ \ Since\ I\ Fell\ For\ You.wav output.flac
我有点卡在这里。网络上的其他信息涉及获取命令以查看带有空格的变量作为一个 arg 而不是多个。我似乎已经这样做了,但是 ffmpeg 现在找不到我的文件了。
通常我只会使用find -name "*.wav" -exec ffmpeg -i {} ${args} \;,但我需要处理文件路径来提取我的元数据。
我对 shell 脚本还很陌生;有人知道这里发生了什么吗?
【问题讨论】:
-
您能否在您的脚本中remove everything that isn't vital,验证它是否仍然存在相同的问题,然后将其添加到您的问题中?