我有一个关于ffmpeg和文件夹/文件名中空格的问题。我的代码如下所示:
/Converted/A/C.mp3 可以正常工作,但是其他包含空格的文件夹或文件名都无法正常工作。
cd /volume1/PUBLIC/Musik/AutoConvert
find . -type d -exec mkdir -p -- /volume1/PUBLIC/Musik/Converted/{} \;
find -type f |sed 's|./||' |while read NEWNAME; do
ffmpeg -i ""/volume1/PUBLIC/Musik/AutoConvert/"$NEWNAME""" -codec:a libmp3lame -qscale:a 2 "/volume1/PUBLIC/Musik/Converted/"${NEWNAME%.[Ff][Ll][Aa][Cc]}".mp3"
echo done with file: "$NEWNAME"
done
但是如果有空格,使用ffmpeg就会失败。我的文件夹结构如下:
user@NAS:/volume1/PUBLIC/Musik/AutoConvert$ find -type f |sed 's|./||'
A B/C.mp3
A B/C D.mp3
A/C D.mp3
A/C.mp3
/Converted/A/C.mp3 可以正常工作,但是其他包含空格的文件夹或文件名都无法正常工作。
[NULL @ 0x20bb3e0] Unable to find a suitable output format for '/volume1/PUBLIC/Musik/Converted/A/C'
/volume1/PUBLIC/Musik/Converted/A/C: Invalid argument
done with file: A/C D.mp3
[NULL @ 0x11bf280] Unable to find a suitable output format for '/volume1/PUBLIC/Musik/Converted/A'
/volume1/PUBLIC/Musik/Converted/A: Invalid argument
done with file: A B/C D.mp3
[NULL @ 0x11f93e0] Unable to find a suitable output format for '/volume1/PUBLIC/Musik/Converted/A'
/volume1/PUBLIC/Musik/Converted/A: Invalid argument
done with file: A B/C.mp3
如果我在FFmpeg命令中不使用双引号,会出现以下错误:
/volume1/PUBLIC/Musik/AutoConvert/A: Is a directory
done with file: A B/C.mp3
/volume1/PUBLIC/Musik/AutoConvert/A: Is a directory
done with file: A B/C D.mp3
/volume1/PUBLIC/Musik/AutoConvert/A/C: No such file or directory
done with file: A/C D.mp3
看起来我正在正确的道路上...只是离我的目标太远了。
有人能提供一些帮助吗?
"/volume1/PUBLIC/Musik/AutoConvert/$NEWNAME" .... "/volume1/PUBLIC/Musik/Converted/${NEWNAME%.[Ff][Ll][Aa][Cc]}.mp3"
?带有空格的变量值应该用双引号括起来。祝你好运。 - shellter./
前缀,而不是直接告诉find
在第一次输出时就不要加上它们呢?例如:find . -type f -printf '%P\0' | while IFS= read -r -d ''
不会有任何./
前缀(虽然这并不会对任何事情造成影响)。 - Charles Duffy""
完全没有任何作用:它启动了一个引用上下文并立即结束它,因此对周围代码的解析方式没有任何影响。 - Charles Duffy