1

我遇到了文件命名扩展输出的问题。我的输入是需要使用 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
4

1 回答 1

0

像这样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"'
于 2020-06-30T09:36:15.287 回答