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

标签 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 "{}" -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"'

关于bash - fswatch 和 ffmpeg 中的输出文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62653064/

相关文章:

FFMPEG FLV 转 3GP 大于 176x144 大小

grep - 有没有办法中止管道 shell 命令?

linux - 将 Windows 批处理文件移植到 shell 脚本。如果可能的话并行执行任务

linux - 简单的 bash 行中缺少括号错误?

bash - 如何在 bash 中创建嵌套序列?

node.js - 在 Windows 中使用 shell 脚本递归合并和编译 SCSS 文件

bash外壳: for loop returns different values

ios - SDL 在 iOS 上保存屏幕截图

c# - 我有 .H 文件,如何将其公共(public)方法打开到 .Net 库?

linux - 从捕获其输出的函数中退出 bash 脚本