我有一个快速的 shell 脚本,它逐行获取输入和输出名称列表并将它们提供给 ffmpeg 进行转换。某些输出路径中包含空格,无论我如何转义或双引号包含空格的路径,我都会收到两个错误之一。
输入文件
file1.avi "output path"/file1.mp4
file1.avi "output\ path"/file1.mp4
file1.avi "output path/file1.mp4"
file1.avi output\ path/file1.mp4
转换.sh
while read -r file1 file2; do ffmpeg -i "$file1" -c copy -bsf:a aac_adtstoasc $file2; done <list
我收到的一个错误是:
“输出路径”/file1.mp4:没有这样的文件或目录
我收到的另一个错误是:
无法找到合适的“输出”输出格式
输入文件行中的变化是为了显示我为了逃避空间而尝试过的事情。我也尝试过在周围添加双引号文件2在 shell 脚本中。
答案1
假设您的文件名不包含文字反斜杠字符,那么如果您在文件中使用反斜杠转义符(但不使用引号list
)
file1.avi output\ path/file1.mp4
那么你可以忽略以至于-r
read
做将转义序列(解释为空格)而不是解释为文字字符序列\
。然后你可以简单地以通常的方式对扩展进行双引号:
while read file1 file2; do
ffmpeg -i "$file1" -c copy -bsf:a aac_adtstoasc "$file2"
done <list
为了显示:
$ cat list
file1.avi output\ path/file1.mp4
然后
$ while read file1 file2; do
printf '==%s==\n==%s==\n' "$file1" "$file2"
done <list
==file1.avi==
==output path/file1.mp4==