如何在 bash 脚本中转义这个?

all*_*skd 0 command-line bash ffmpeg

我正在尝试完成一批 3 个视频以将其留在那里直到早上处理,但似乎其中有特殊字符......我在终端中尝试“原始”并且它有效但在 bash 脚本中它停止工作

例子:

args1="-r 29.97 -t 00:13:30 -vsync 0 -vpre libx264-medium -i"
args12="-r 29.97 -ss 00:40:30 -vsync 0 -vpre libx264-medium -i"
args2="[in] scale=580:380 [T1],[T1] pad=720:530:0:50 (other arguments with lots of [ and ]"
Run Code Online (Sandbox Code Playgroud)

在输出中它说

无法为 'scale=580:380' 找到合适的输出格式,不知道为什么......就像我说的,该命令在命令行中运行良好,只是不在脚本中

/usr/local/bin/ffmpeg "$args1" "${file}"  -vf "$args2" "$args3" "${args[0]}_${startingfrom}_0001_02.mp4"
Run Code Online (Sandbox Code Playgroud)

gei*_*rha 5

不要在一个变量中放入多个参数,它适用于非常简单的情况,但除此之外只会给你带来悲伤。改用数组。例如

infile=video.avi
outfile=${infile%.*}.mp4  # video.mp4
args=(
    -r 29.97 
    -t 00:13:30 
    -vsync 0 
    -vpre libx264-medium 
    -vf "[in] scale=580:380 [T1],[T1] pad=720:530:0:50"
)
#...
ffmpeg -i "$infile" "${args[@]}" "$outfile"
Run Code Online (Sandbox Code Playgroud)

(引号很重要)

但在这种情况下,您可能需要一个函数。很难说,因为你的问题有点含糊。

参见BashFAQ 50