为什么要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的手册页。