这真让我抓狂。
我有一堆 mp3,我想使用ffmpeg
.
我正在尝试使用这一行(脚本更大,这是有问题的部分):
find . -type f \( -iname \*.mp3 \) | parallel ffmpeg -i "{}" -acodec libmp3lame -ab 128k "$output_folder_with_spaces/{.}-128k.mp3" \;
(该iname
部分存在是因为将来可能会使用更多扩展)
但即使使用引号{}
,我总是得到No such file or directory
,因为 mp3 已命名01 - My song
。我也不知道是否"$output_folder_with_spaces"
会起作用。
我在谷歌上搜索了很多,但找不到这个例子:使用{}
fromfind
包含{}
空格。我只发现在引号中使用变量或硬编码路径时。
有人知道在这种情况下我该如何解决这个空间问题吗?
答案1
您使用了错误的替换字符串parallel
;您还需要-q
传递带引号的参数,我不确定尾随的作用\;
是什么...
示例:
dirname_with_spaces="/home/don/my dir with spaces/"
/
(请注意分配给 的路径中的尾随dirname_with_spaces
)以及目录mp3
下的一些带有空格的文件名test
,就在cwd
:
./test/Commercial DEMO - 09.mp3
./test/Commercial DEMO - 11.mp3
./test/Handel Royal Fireworks - 07.mp3
./test/Jazz Rag Ensemble - 10.mp3
./test/Mouret - Rondeau.mp3
使用
find . -type f -iname \*.mp3 | parallel -q ffmpeg -i {} -acodec \
libmp3lame -ab 128k "$dirname_with_spaces"{/.}-128k.mp3
产生以下文件:
/home/don/my dir with spaces/Commercial DEMO - 11-128k.mp3
/home/don/my dir with spaces/Commercial DEMO - 09-128k.mp3
/home/don/my dir with spaces/Handel Royal Fireworks - 07-128k.mp3
/home/don/my dir with spaces/Jazz Rag Ensemble - 10-128k.mp3
/home/don/my dir with spaces/Mouret - Rondeau-128k.mp3
请注意命令行q
uoting ( parallel -q
) 和以下命令的用法:
{}
Input line.
find
这意味着来自输出的路径,例如./test/Mouret - Rondeau.mp3
和
{/.}
Basename of input line without extension.
扩展为Mouret - Rondeau
然后 "$dirname_with_spaces"{/.}
扩展为/home/don/my dir with spaces/Mouret - Rondeau
后者与{.}
您的命令中使用的有很大不同
{.}
Input line without extension.
它将扩展到./test/Mouret - Rondeau
然后 "$dirname_with_spaces"{.}
将扩展到/home/don/my dir with spaces/./test/Mouret - Rondeau
。显然,这会出错,因为没有/./test/
under /home/don/my dir with spaces
。
答案2
您误解了find
的语法。该{}
语法与 结合使用-exec
。另外,你不需要那些括号;仅当您想覆盖默认的操作顺序(例如,不从左到右评估)时才需要它们。总的来说,对于 exec,它看起来像这样(分割以避免水平滚动):
find . -type f -iname \*.mp3 -exec \
ffmpeg -i "{}" -acodec libmp3lame -ab 128k \
"$output_folder_with_spaces/{}-128k.mp3" \;
请注意,这将为您提供名为foo.mp3-128.mp3
...的文件,我希望这就是您想要的;我不知道这{.}
是什么意思——这不是有效的语法,至少对于 GNU find 来说是这样。
我建议lame
直接使用,而不是通过 FFmpeg (如果-ab
使用 ABR 模式而不是 VBR 模式,我会建议在没有充分理由的情况下反对)。实际上,我建议不要对 MP3 进行重新编码;通过从无损源进行编码,可以在相同比特率下获得更好的质量。