我想使用以下命令将一堆 mkv 转换为 mp4:
for i in $(ls *mkv); do ffmpeg -i $i -vcodec copy -acodec copy $i.mp4; done;
但是,文件名中包含空格和连字符,因此该命令无法正常工作。 (当我手动替换The File - 01.mkv
为时The\ File\ \-\ 01.mkv
,相同的命令有效)。
让它发挥作用的最佳方法是什么?
答案1
您需要引用变量并避免命令替换:
for i in ./*.mkv; do ffmpeg -i "${i}" -vcodec copy -acodec copy "${i}.mp4"; done
看什么时候需要双引号?有关引用的详细解释。
当我这样做时,上面生成了带有.mkv.mp4
扩展名的文件;解决这个问题:
for i in ./*.mkv; do ffmpeg -i "${i}" -vcodec copy -acodec copy "${i%%.mkv}.mp4"; done