Bash fswatch和ffmpeg中的输出文件扩展名

Bash fswatch和ffmpeg中的输出文件扩展名,bash,ffmpeg,sh,fswatch,Bash,Ffmpeg,Sh,Fswatch,我对文件命名扩展名输出有问题。我的输入是需要使用FFMPEG转换为MP4的JPG文件。但是,当我运行下面的代码时,它将输出为img1.jpg.mp4,包括输入文件扩展名,而不仅仅是img1.mp4 fswatch -e ".*" -i "\\.jpg$" . |xargs -n1 basename|xargs -n1 -t -I {} sh -c 'pwd;[[ -f {} ]] && ffmpeg -y -loop 1 -i "

我对文件命名扩展名输出有问题。我的输入是需要使用FFMPEG转换为MP4的JPG文件。但是,当我运行下面的代码时,它将输出为
img1.jpg.mp4
,包括输入文件扩展名,而不仅仅是
img1.mp4

fswatch -e ".*" -i "\\.jpg$" . |xargs -n1 basename|xargs -n1 -t -I {} sh -c 'pwd;[[ -f {} ]] && ffmpeg -y -loop 1 -i "{}" -vf "fade=t=in:st=0:d=1,fade=t=out:st=2:d=1" -preset "ultrafast" -c:v libx264 -t 3 -pix_fmt yuv420p "{}.mp4"'
非常感谢您的帮助

在MAC、SH/BASH上运行

编辑:

顺便说一句,我还尝试了一个循环来完成下面的代码,但我正在寻找更简洁的解决方案,在上面的同一行代码中修复它,或者在
FSWATCH
成功运行后调用函数

 for file in
     *.jpg.mp4; do
        mv "$file" "$(basename "$file" .jpg.mp4).mp4"
    done

与sed类似:

fswatch -e ".*" -i "\\.jpg$" . |
xargs -n1 basename |
sed 's/\.jpg$//' |
xargs -n1 -t -I {} sh -c 'pwd;[[ -f {}.jpg ]] && ffmpeg -y -loop 1 -i "{}.jpg" -vf "fade=t=in:st=0:d=1,fade=t=out:st=2:d=1" -preset "ultrafast" -c:v libx264 -t 3 -pix_fmt yuv420p "{}.mp4"'

与sed类似:

fswatch -e ".*" -i "\\.jpg$" . |
xargs -n1 basename |
sed 's/\.jpg$//' |
xargs -n1 -t -I {} sh -c 'pwd;[[ -f {}.jpg ]] && ffmpeg -y -loop 1 -i "{}.jpg" -vf "fade=t=in:st=0:d=1,fade=t=out:st=2:d=1" -preset "ultrafast" -c:v libx264 -t 3 -pix_fmt yuv420p "{}.mp4"'

谢谢分享!看起来sed没有使用fswatch,这需要依赖项吗?谢谢分享!看起来sed没有与fswatch一起工作,这是否需要任何依赖项?