ffmpeg bash脚本文件名变量中的空格

ffmpeg bash脚本文件名变量中的空格,bash,ffmpeg,naming-conventions,spaces,Bash,Ffmpeg,Naming Conventions,Spaces,我正在使用OS X优胜美地。我想制作一个简单的bash脚本,允许我对视频进行转码。只要文件不位于有空格的目录中,一切都可以正常工作 这是我的剧本: #!/bin/sh ffmpeg -i “$1” -c:v ffv1 -level 3 -g 1 -c:a copy “$1.mkv” 起初,我没有在变量周围加双引号,但我读到一些堆栈溢出,将其用作解决方案。我不想更改路径或添加斜杠等。我只想运行: ./script.sh filename.mov 下面是我得到的错误: Kierans-i

我正在使用OS X优胜美地。我想制作一个简单的bash脚本,允许我对视频进行转码。只要文件不位于有空格的目录中,一切都可以正常工作

这是我的剧本:

#!/bin/sh

ffmpeg -i “$1” -c:v ffv1 -level 3 -g 1 -c:a copy “$1.mkv” 
起初,我没有在变量周围加双引号,但我读到一些堆栈溢出,将其用作解决方案。我不想更改路径或添加斜杠等。我只想运行:

 ./script.sh filename.mov 
下面是我得到的错误:

Kierans-iMac:~ bla$ ./firstscript.command "/Users/bla/Desktop/untitled\ folder\ 2/v210.mov.mkv" 
ffmpeg version 2.7.2 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.7.2_1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libfaac --enable-libass --enable-ffplay --enable-libopenjpeg --disable-decoder=jpeg2000 --extra-cflags='-I/usr/local/Cellar/openjpeg/1.5.2_1/include/openjpeg-1.5 ' --enable-nonfree --enable-vda
  libavutil      54. 27.100 / 54. 27.100
  libavcodec     56. 41.100 / 56. 41.100
  libavformat    56. 36.100 / 56. 36.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 16.101 /  5. 16.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.100 /  1.  2.100
  libpostproc    53.  3.100 / 53.  3.100
“/Users/bla/Desktop/untitled\: No such file or directory

您引用了两次空格:

./firstscript.command "/Users/bla/Desktop/untitled\ folder\ 2/v210.mov.mkv"
应该是

./firstscript.command "/Users/bla/Desktop/untitled folder 2/v210.mov.mkv"
带引号的字符串
“foo”
相当于
\f\o\o
;每个字符都被转义。原始文件中的反斜杠被视为文字反斜杠

在脚本中,仍然需要引用参数展开:

ffmpeg -i "$1" -c:v ffv1 -level 3 -g 1 -c:a copy "$1.mkv"

请注意,您必须使用常规ASCII引号(
),而不是链接中错误消息所暗示的“智能”引号(
)。

您的实际cmd是
/firstscript.command”/Users/bla/Desktop/untitled\folder\2/v210.mov.mkv“
。路径是一个路径,您可以
cd
到目录并从那里执行,或者必须传递路径(完整或相对)在您的命令中。由于您已经用dbl引用了您的路径,请尝试删除转义空格的2个字符。“\”。或者消除使用unix派生系统时出现的一系列错误,并且在目录或文件名中不使用空格;-!祝您好运。您使用的是正确的ASCII双引号,还是此问题中显示的卷曲引号?谢谢回答ng!我只是使用script.sh作为一个通用示例。我从路径中删除了双引号,因此现在它是./firstscript.command/Users/bla/Desktop/untitled\folder\2/v210.mov.mkv,但这是相同的错误。谢谢!我的脚本中确实有这些智能引号。当我启用ascii引号时,脚本工作了!实际上,我甚至不需要输入终端中命令周围的引号。希望我不必这样做,因为在没有引号的情况下它似乎可以正常工作?对;
“foo bar”
foo\bar
在shell执行引号删除后是相同的字符串