You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在macOS 13.2中使用FFmpeg批量转换.mkv到.mp4的方法求助

在macOS 13.2中使用FFmpeg批量转换.mkv到.mp4的方法求助

我尝试在macOS 13.2上用FFmpeg批量把input文件夹里的.mkv文件转成.mp4到mp4文件夹,试了两个命令都出问题了:

第一个命令:

ffmpeg -i input/*.mkv -codec copy mp4/%~n.mp4

得到错误:

zsh: no matches found: input/*.mkv

第二个加了引号的命令:

ffmpeg -i "input/*.mkv" -codec copy mp4/%~n.mp4

FFmpeg输出版本信息后报错:

input/*.mkv: No such file or directory

想问下有没有办法在macOS 13.2上实现批量转换?


解决方法

你遇到的问题主要有两个核心原因:

  1. zsh的通配符逻辑:当input/*.mkv没匹配到任何文件时,zsh会直接报错,不会把它当作字符串传给FFmpeg;就算有匹配,FFmpeg也无法直接处理这种多输入的写法。
  2. %~n是Windows CMD的变量语法,在zsh里完全不生效,得用shell自带的文件名处理工具。

下面是两种可行的批量转换方案:

方法一:用zsh循环逐个处理文件

首先确保目标文件夹mp4存在,先运行:

mkdir -p mp4

然后执行循环命令:

for mkv_file in input/*.mkv; do
  # 获取去掉扩展名的原文件名
  base_name=$(basename "$mkv_file" .mkv)
  # 执行格式转换
  ffmpeg -i "$mkv_file" -codec copy "mp4/${base_name}.mp4"
done

这个循环会遍历input文件夹下所有.mkv文件,逐个调用FFmpeg转换,同时保留原文件名(仅替换扩展名)。

方法二:用find命令递归处理(含子目录场景)

如果你的input文件夹还有子目录里的mkv文件需要转换,可以用find实现递归批量处理:

mkdir -p mp4
find input -name "*.mkv" -type f -exec sh -c '
  for mkv_file do
    base_name=$(basename "$mkv_file" .mkv)
    ffmpeg -i "$mkv_file" -codec copy "mp4/${base_name}.mp4"
  done
' sh {} +

额外注意事项

  • -codec copy是直接复制音视频编码,速度极快,但如果原文件的编码在MP4容器中不兼容,转换会失败。这时可以去掉-codec copy,让FFmpeg自动重新编码(速度会慢一些,但兼容性更好)。
  • 从你的输出信息来看,FFmpeg已经通过Homebrew正确安装,这部分无需额外操作。

备注:内容来源于stack exchange,提问作者Dolphin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:08:03