ffmpeg shell 脚本路径中有空格

ffmpeg shell 脚本路径中有空格

我有一个快速的 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

那么你可以忽略以至于-rread 将转义序列(解释为空格)而不是解释为文字字符序列\。然后你可以简单地以通常的方式对扩展进行双引号:

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==

相关内容