为什么 ${1:r} 不删除我的 zsh 脚本中的文件扩展名?

Why doesn't ${1:r} strip file extension in my zsh script?

我正在编写一个 zsh 脚本来自动执行一些视频编码。要转换的文件将是脚本的第一个参数,其中包含以下行:

ffmpeg -i  -ac 0 -vcodec libx264 -b:v 500k -crf 20 ${1:r}.mp4

我希望 ${1:r}.mp4 创建一个与我的 .mov 输入同名的文件,但使用 .mp4 文件扩展名替换 .mov。但我得到的是 input.mov.mp4。为什么 :r 修饰符不去除文件扩展名?

我遇到过类似的事情,zsh 似乎不接受位置参数上的 :r。相反,您可以这样做:

file=
ffmpeg -i  -ac 0 -vcodec libx264 -b:v 500k -crf 20 ${file:r}.mp4