Mokiia's Blog

Back

Mac 终端一键转换 AVCHD 到 MP4:从安装到批处理的完整指南

Powered by Kimi 2.6 Agent. AI may make mistakes, double check before execute.

你的摄像机素材为什么打不开#

AVCHD(.MTS / .m2ts)是索尼、松下等摄像机常用的蓝光标准格式。我自己就吃过这个苦头——手头有一台索尼 A7R2,这台老机器画质依然能打,但录出来的素材偏偏是 AVCHD 格式。把卡插到 Mac 上,QuickTime 可以查看但是无法编辑,Premiere 和 Final Cut Pro 导入后根本不支持打开。更让人头疼的是,AVCHD 并不是单个视频文件,而是一整套 BDMV 文件夹结构,CLIPINF、PLAYLIST、STREAM 层层嵌套,体积庞大却不知道怎么下手。

很多人第一反应是去下载格式工厂或者付费转码软件,其实完全没必要。FFmpeg 这条命令就能搞定,免费、无损、速度极快。


环境准备:安装 FFmpeg#

macOS 上安装 FFmpeg 主要有两种方式,看你电脑上已经有什么环境:

Homebrew 安装(推荐)#

如果你之前用 Homebrew 装过其他软件,这条命令就够了:

brew install ffmpeg
bash

Homebrew 会自动处理所有依赖,适合绝大多数 Mac 用户。

conda 安装#

如果你平时用 Anaconda 或 Miniconda 做数据分析,走 conda-forge 更方便:

conda install -c conda-forge ffmpeg
bash

这样 FFmpeg 会被装在你的 conda 环境里,不会和系统其他工具冲突。

装完之后,在终端输入以下命令验证:

ffmpeg -version
bash

如果看到版本号输出,说明安装成功。如果提示 command not found,先检查安装过程有没有报错,然后确认你的 PATH 环境变量是否包含了 FFmpeg 的安装路径(比如 /opt/homebrew/bin/usr/local/bin)。


核心知识:无损复制 vs 重新编码#

在动手转换之前,先理解 FFmpeg 的两种工作模式,这能帮你根据实际情况做出选择。

无损复制(-c copy 的意思是只换容器格式,完全不碰里面的音视频数据。AVCHD 的本质是 H.264 视频 + AC3 音频,只是套了一个 MTS 外壳。-c copy 就是把这个外壳换成 MP4,里面的内容原封不动。速度有多快?我亲测过,50GB 的素材几分钟就转完了,画质零损失,因为根本没有重新编码。

重新编码(-c:v libx264 -c:a aac 则是把视频和音频都重新压一遍。这种方式耗时更长,CPU 风扇会狂转,但换来的是更好的兼容性——转成 AAC 音频后,iPhone、网页播放器、各种剪辑软件都不会出现”有画面没声音”的尴尬。

我的建议:先无脑用无损复制试试,如果导入剪辑软件或播放器时报错,再换回重新编码方案。


实战操作:三种常见场景#

场景 A:单个文件转换#

只想转某一个文件?一行命令:

ffmpeg -i input.MTS -c copy output.mp4
bash

-i 后面跟输入文件名,最后面是输出文件名。FFmpeg 会根据后缀自动判断容器格式。

场景 B:批量转换同一文件夹#

摄像机导出来的素材通常有几十个 .MTS 文件,手动一条一条敲不现实。用 for 循环批量处理:

# 进入 STREAM 目录(AVCHD 的实际视频文件都在这里)
cd /Users/你的用户名/Desktop/AVCHD/BDMV/STREAM

# 无损批量转换所有 .MTS 文件
for f in *.MTS; do ffmpeg -i "$f" -c copy "${f%.MTS}.mp4"; done
bash

${f%.MTS}.mp4 是个实用的 shell 技巧:% 号去掉原文件的后缀 .MTS,然后接上 .mp4。如果你的文件后缀是 .m2ts.mts(小写),把通配符和去掉后缀的部分对应改掉即可,比如 *.m2ts${f%.m2ts}.mp4

场景 C:输出到桌面,不污染原目录#

不想在原文件夹里生成一堆 MP4 和其他文件混在一起?指定绝对路径输出到桌面:

for f in *.MTS; do ffmpeg -i "$f" -c copy "/Users/你的用户名/Desktop/${f%.MTS}.mp4"; done
bash

这样原卡里的目录结构保持不动,桌面直接拿到干净的 MP4 文件。

场景 D:重新编码(兼容性优先)#

如果无损复制出来的 MP4 在某些设备上播不了,用这个重新编码的版本:

for f in *.MTS; do
  ffmpeg -i "$f" \
    -c:v libx264 -crf 23 \
    -c:a aac -b:a 192k \
    -movflags +faststart \
    "${f%.MTS}.mp4"
done
bash

-crf 23 是画质控制参数,数字越小画质越好、文件越大,23 是平衡画质和体积的常用值。-movflags +faststart 会把视频的关键信息移到文件开头,优化网页播放时的加载速度。


进阶:处理 BDMV 目录结构#

很多人第一次接触 AVCHD 会懵——插卡后看到的是一个 AVCHD 文件夹,点进去有 BDMV,里面又有 CLIPINFPLAYLISTSTREAM……真正的视频文件只在 STREAM 文件夹里,后缀是 .MTS。其他的文件是摄像机用来管理播放列表、时间码等元数据的,转格式时不需要动它们。

如果你不确定视频文件具体散落在哪,用这条命令一键找出所有 .MTS:

find /Users/你的用户名/Desktop/AVCHD -name "*.MTS"
bash

找到之后,cd 进那个 STREAM 目录再执行上面的批量转换命令即可。不要删除或修改 BDMV 里的 CLIPINF 和 PLAYLIST 文件,除非你确认已经备份好了原卡数据。


常见问题 FAQ#

Q:转换后的 MP4 没有声音?
A:无损复制模式下音频是原生的 AC3 格式,某些播放器或旧版剪辑软件不支持。改用场景 D 的重新编码命令,音频参数 -c:a aac 会把 AC3 转成通用 AAC,兼容性问题解决。

Q:转出来的文件还是很大,能进一步压缩吗?
A:可以。把场景 D 中的 -crf 23 改成 -crf 28,文件体积会明显缩小,画质损失在大多数情况下肉眼不太容易察觉。需要更小还可以调到 30,但别超过 35,否则块效应会比较严重。

Q:转换后时间码或元数据丢了?
A:FFmpeg 默认不会复制 AVCHD 的私有元数据。如果你需要保留原始时间戳等信息,在命令里加上 -map_metadata 0,这会尽量把原文件的元数据映射到新文件。

Q:命令跑完了,输出文件在哪?
A:默认输出到你执行命令时终端所在的目录。不确定的话,在终端输入 pwd 查看当前路径。如果你在场景 C 里指定了桌面路径,就去桌面找。

Q:这套命令能处理 .m2ts 文件吗?
A:完全没问题。.m2ts 和 .MTS 本质是同一种格式,只是后缀不同。把命令里的文件名通配符从 *.MTS 改成 *.m2ts${f%.MTS} 改成 ${f%.m2ts} 即可。


写在最后#

FFmpeg 是 Mac 上处理 AVCHD 素材最高效的工具——免费、开源、无损复制速度快到离谱。下次从摄像机导素材时,打开终端复制粘贴上面的命令,等几分钟就能拿到剪辑软件流畅编辑的 MP4 文件。建议把这篇文章收藏,或者直接把那条批量转换命令保存在备忘录里,随取随用。

Mac 终端一键转换 AVCHD 到 MP4:从安装到批处理的完整指南
https://mokiia1107.pages.dev/blog/blog10
Author Mokiia
Published at May 30, 2026