FFmpeg 每隔一个任务执行一次

FFmpeg 每隔一个任务执行一次

为什么要ffmpeg执行命令的每一个第二项任务?

for i in *.MTS; do
     echo ffmpeg -i \"$i\" -c:a copy -c:v copy \"$i\" | sed 's/MTS/mp4/2'
done | sh

例如,如果我有 9 个 MTS 文件,例如:

0001.MTS
0002.MTS
0003.MTS
0004.MTS
0005.MTS
0006.MTS
0007.MTS
0008.MTS
0009.MTS

这只会转换001 003 005 007 009。有什么原因吗?同样的命令不会| sh打印正确的命令集。当您有 64 个视频文件时,这确实会让人头疼。

答案1

我不知道为什么只ffmpeg执行第二条命令,我无法在我的计算机上重现这种情况。但是,你的方法太复杂了。更简洁的解决方案是:

  • 对于bash兼容的 shell:

    for i in *.MTS; do
      ffmpeg -i $i -c:a copy -c:v copy ${i%MTS}mp4
    done
    

    请阅读%部分中的和相关运算符参数扩展狂欢的手册页。

  • 对于csh兼容的 shell:

    foreach i (*.MTS)
      ffmpeg -i $i -c:a copy -c:v copy $i:r.mp4
    end
    

    在这里,:r修饰符删除了文件扩展名。阅读更多关于其他修饰符在(有点不直观的)部分历史替代tcsh的手册页。

相关内容