我试图让 FFmpeg 遍历我运行命令的路径下的所有文件和子文件夹,以将任何 MKV 文件转换为 MP4 容器。
我已经让下面的命令工作了,但是除了新的 MP4 扩展名之外,创建的新 MP4 文件仍然具有 MKV 扩展名。
find ./ -iname '*.avi' -o -iname '*.mkv' -exec bash -c 'ffmpeg -i "{}" -vcodec copy -acodec copy "{}".mp4' \;
例如 :
abcd.mkv (original file)
abcd.mkv.mp4 (new file)
如何调整命令以摆脱原始文件扩展名?
如果您热衷于保留现有语法(这可能对您来说很有意义),那么以下轻微修改应该保持这个含义,同时还完成所需的文件名重命名:
请注意,我还使用 FFmpeg简化了您的
copy
语法...有一种更简单的方法可以做到这一点,将您的
ffmpeg
命令放入bash
脚本并使用bash
工具。代替:使用
find
andxargs
将文件名列表(包括带空格的文件名)传递给例如$HOME/bin/fixthem
(readman find;man xargs
):$HOME/bin/fixthem
像(和'chmod +x
d)这样的东西:注意:未经测试,但通过
/usr/bin/shellcheck
.另一种方式,如果您的文件名没有空格、换行符或其他奇怪的字符:
这将删除最后一个点 (.) 之后的所有扩展名,然后添加
.mp4
. 如果文件名中可能有空格,请改用:由于弄乱很多代码有点麻烦,我只是在编码开始之前添加了一个重命名命令并删除了
.mp4
扩展名。这是我文件夹中的屏幕截图: