多张图片合成 GIF / 视频
使用 ImageMagick 的 magick 命令将一系列按时间顺序命名的 PNG 截屏图片合成为一个无限循环播放的动态 GIF 动图。
合成 GIF
magick -delay 200 -loop 0 \
'/Users/junjian/截屏/截屏2026-05-24 18.44.59.png' \
'/Users/junjian/截屏/截屏2026-05-24 18.46.39.png' \
'/Users/junjian/截屏/截屏2026-05-24 18.47.23.png' \
'/Users/junjian/截屏/截屏2026-05-24 18.47.56.png' \
'/Users/junjian/截屏/截屏2026-05-24 18.49.49.png' \
'/Users/junjian/截屏/截屏2026-05-24 19.26.09.png' \
'/Users/junjian/截屏/截屏2026-05-24 19.26.19.png' \
'/Users/junjian/截屏/截屏2026-05-24 19.26.24.png' \
'/Users/junjian/截屏/截屏2026-05-24 19.26.27.png' \
'/Users/junjian/截屏/截屏2026-05-24 19.26.29.png' \
'/Users/junjian/截屏/截屏2026-05-24 19.26.32.png' \
'/Users/junjian/截屏/截屏2026-05-24 19.26.35.png' \
'/Users/junjian/截屏/截屏2026-05-24 19.26.37.png' \
'/Users/junjian/截屏/截屏2026-05-25 10.44.07.png' \
'/Users/junjian/截屏/OpenDesign.gif'
magick:ImageMagick v7 的主命令,告诉系统调用这个图片处理工具。-delay 200:设置帧间隔时间(播放速度)。单位是 1/100 秒,所以200代表每张图片停留 2 秒 钟。-loop 0:设置循环次数。0代表无限循环播放(如果设为 1,动图播完一次就会静止)。- 中间一长串
.png路径:动画的原材料(输入文件)。它们已经按照文件名中的时间戳从早到晚排好了序,决定了动图的播放顺序。 '.../OpenDesign.gif':最终生成的动态图文件名和保存路径(输出文件)。
合成视频
magick -delay 200 -loop 0 \
'/Users/junjian/截屏/截屏2026-05-24 18.44.59.png' \
'/Users/junjian/截屏/截屏2026-05-24 18.46.39.png' \
'/Users/junjian/截屏/OpenDesign.mp4'
'.../OpenDesign.mp4':ImageMagick 会自动识别并将其转换为 MP4 视频。
智能压缩视频(丢弃重复画面)
这三个 FFmpeg 命令的核心目的都是通过识别并剔除视频中的静态/重复画面(如录屏中的无位移段落)来大幅压缩体积。由于处理音频和时间戳的策略不同,它们分别适用于不同的应用场景。
命令一:极客物理抽帧版(保留音频,部分播放器有兼容风险)
ffmpeg -i "/Users/junjian/截屏/录屏2026-05-24 20.34.05.mov" \
-vf "mpdecimate,setpts=N/FRAME_RATE/TB" \
-c:v hevc_videotoolbox \
-c:a copy \
"/Users/junjian/截屏/录屏2026-05-24 20.34.05-compress.mp4"
-
-i "...mov":指定输入的原始录屏视频文件。 -
-vf "mpdecimate,setpts=...":视频滤镜组合(核心压缩逻辑)。 -
mpdecimate:自动检测相邻帧,直接丢弃与前一帧几乎完全相同的重复画面。 -
setpts=N/FRAME_RATE/TB:丢弃重复帧后,重新计算并紧凑排列剩余帧的时间戳。这会使静态画面在物理层面上被“剪掉”或“快进”。 -
-c:v hevc_videotoolbox:调用 macOS 系统的硬件加速器,以 H.265 (HEVC) 格式对视频进行高效重编码,速度极快。 -
-c:a copy:直接复制原视频的音频流,不进行重新编码。 -
"...-compress.mp4":输出的目标文件路径。 -
⚠️ 注意:由于视频时间轴被物理缩短,而音频保持原长,会导致音视频严重不同步,QuickTime 播放器通常会报错打不开。
命令二:无声高压快进版(最适合无声录屏)
ffmpeg -i "/Users/junjian/截屏/录屏2026-05-24 20.34.05.mov" \
-vf "mpdecimate,setpts=N/FRAME_RATE/TB" \
-c:v hevc_videotoolbox \
-an \
"/Users/junjian/截屏/录屏2026-05-24 20.34.05-compress.mp4"
-an(Audio None):直接剥离并完全丢弃音频。- 逻辑差异:配合
mpdecimate,setpts=...滤镜,它彻底消除了命令一中由于“视频变短、音频未变”导致的时间戳冲突。 - 适用场景:最适合不需要声音的常规操作录屏、代码演示等。静止不动的死画面会被完全抽走,视频会自动“智能快进”到有画面变化的地方,体积缩减到极致且兼容性完美。
命令三:标准逻辑压缩版(音视频完美同步,最通用)
ffmpeg -i "/Users/junjian/截屏/录屏2026-05-24 20.34.05.mov" \
-vf "mpdecimate" \
-vsync vfr \
-c:v hevc_videotoolbox \
-c:a AAC \
"/Users/junjian/截屏/录屏2026-05-24 20.34.05-compress.mp4"
-vf "mpdecimate":同样检测并丢弃相同的重复帧,但没有使用setpts去强行缩短时间轴。-vsync vfr(Variable Framerate):开启可变帧率支持。遇到长时间静止的画面,FFmpeg 会丢弃中间的重复帧,只保留一帧,并让这一帧“拉长”显示到下一个画面变化为止。-c:a AAC:将音频重新编码为标准的通用 AAC 格式(而不是直接copy),以确保音视频轨更好地适配可变帧率容器。- 适用场景:最完美的日常压缩方案。视频总时长不变,音视频完美同步。虽然播放时静态画面依然停留在那里,但底层文件由于没有重复的数据帧,体积同样得到了巨大的压缩,且全平台播放器(包括 QuickTime)都能正常顺畅播放。
macOS 录屏最佳压缩(恒定帧率版)
该命令的核心目的是在极高兼容性的前提下,将 Mac 自带的录屏文件(通常很大且为可变帧率)压缩为标准的、适合全平台播放与剪辑的 MP4 视频。它通过强制锁定恒定帧率,彻底解决了很多视频处理中常见的“丢帧”和“音画不同步”顽疾。
ffmpeg -i 输入文件.mov \
-c:v libx264 \
-crf 23 \
-r 60 \
-vsync cfr \
-pix_fmt yuv420p \
-c:a aac -b:a 128k \
输出文件.mp4
-
-i 输入文件.mov:指定输入的原始苹果录屏文件(通常由 Mac 自带的 QuickTime 或快捷键Cmd+Shift+5录制)。 -
-c:v libx264:指定视频编码器为经典的 H.264 (AVC)。虽然 H.265 (HEVC) 压缩率更高,但 H.264 拥有绝对的兼容性,无论是导入剪辑软件(如 Premiere、FCPX)、网页播放还是发给 Windows/Android 用户,都能做到 100% 顺畅播放。 -
-crf 23:恒定速率因子(Constant Rate Factor)。控制视频画质的核心参数,范围为 0–51。数值越小画质越好: -
18–20为超高清无损质感(体积稍大)。 -
23是官方默认的黄金平衡点,能在肉眼几乎看不出画质损失的情况下,带来极高的压缩比。 -
-r 60:强制设定输出视频的帧率为 60 FPS。这确保了录屏中的鼠标轨迹、窗口拖动等高动态瞬间依然丝滑流畅。 -
-vsync cfr(Constant Framerate):强制恒定帧率输出(核心控噪参数)。Mac 原生录屏为了省空间,默认采用可变帧率(VFR,画面不动时降低帧率)。但在很多剪辑软件或旧播放器中,VFR 会直接引发音画不同步、视频卡死、音频错位的问题。改用cfr可以在每一秒内均匀补齐 60 帧,彻底消除时间轴隐患。 -
-pix_fmt yuv420p:指定像素色彩格式为 YUV 4:2:0 8-bit。Mac 原生录屏有时会采用更高规格的色彩(如 YUV444 或 10-bit),直接压缩可能导致很多手机或老电脑播放时“只有声音没有画面(黑屏)”。强制指定yuv420p是跨平台播放的行业通用标准。 -
-c:a aac -b:a 128k:音频编码策略。将音频转码为通用的 AAC 格式,并锁定码率为 128kbps。这个码率足够完美保留录屏中的人声、系统提示音或麦克风讲解,同时占用极小的体积。 -
输出文件.mp4:最终生成的标准 MP4 视频路径。
📌 适用场景
当你需要将 Mac 录屏用于专业视频剪辑、上传至主流视频网站(B站、YouTube等)、或者分发给不同系统平台的用户观看时,这是最安全、最稳妥且画质优秀的“万能全能模板”。
N 倍速快进压缩
要对视频进行 N 倍速快进 压缩,FFmpeg 的核心逻辑是:同时修改视频的时间戳(PTS)和音频的播放速度(Atempo)。如果只改视频不改音频,会导致严重的音画不同步或文件损坏。
在 macOS 上,利用 M 系列芯片的硬件加速(hevc_videotoolbox),以下是最高效、最稳妥的 N 倍速压缩方案。
🚀 核心通用命令
请将命令中的 N 替换为你想要的倍速数字(例如 2 代表 2 倍速,0.5 代表减速一半,注意音频和视频的换算系数不同,见后文详解):
ffmpeg -i '/Users/junjian/截屏/录屏2026-05-25 20.04.25.mov' \
-vf "setpts=1/N*PTS" \
-af "atempo=N" \
-c:v hevc_videotoolbox \
-c:a aac \
'/Users/junjian/截屏/录屏2026-05-25 20.04.25-fast.mp4'
💡 常用倍速模板
由于 FFmpeg 视频滤镜里的计算逻辑是 1/N,为了方便你使用,这里直接给出常用的倍速模板:
2 倍速快进(最常用)
视频帧间隔缩短为 (即 1/2),音频速度设为 2:
ffmpeg -i '/Users/junjian/截屏/录屏2026-05-25 20.04.25.mov' \
-vf "setpts=0.5*PTS" \
-af "atempo=2.0" \
-c:v hevc_videotoolbox \
-c:a aac \
'/Users/junjian/截屏/录屏2026-05-25 20.04.25-2x.mp4'
4 倍速狂飙(适合长录屏)
视频帧间隔缩短为 (即 1/4),音频速度由于超过了单一滤镜的 2 倍上限,需要叠加串联(atempo=2.0,atempo=2.0):
ffmpeg -i '/Users/junjian/截屏/录屏2026-05-25 20.04.25.mov' \
-vf "setpts=0.25*PTS" \
-af "atempo=2.0,atempo=2.0" \
-c:v hevc_videotoolbox \
-c:a aac \
'/Users/junjian/截屏/录屏2026-05-25 20.04.25-4x.mp4'
10 倍速极速(完全当做纯画面快进,丢弃声音)
如果你要提速 10 倍或更高,声音通常已经尖锐到无法听清了。建议直接剥离音频(-an),不仅处理速度极快,还能规避音频滤镜的叠加限制:
ffmpeg -i '/Users/junjian/截屏/录屏2026-05-25 20.04.25.mov' \
-vf "setpts=0.1*PTS" \
-an \
-c:v hevc_videotoolbox \
'/Users/junjian/截屏/录屏2026-05-25 20.04.25-10x.mp4'
🔍 参数深入剖析
-vf "setpts=1/N*PTS":视频滤镜(Video Filter)。PTS代表 Presentation Time Stamp(显示时间戳)。当你乘以一个小于 1 的系数(如0.5),意味着每一帧画面的显示时间提前了,从而在视觉上实现了 N 倍速快进。-af "atempo=N":音频滤镜(Audio Filter)。调整音频的播放速度。
⚠️ FFmpeg 核心大坑:
atempo滤镜接收的参数范围是0.5到2.0。如果倍速 ,必须通过逗号将多个滤镜串联起来。例如 4 倍速写成atempo=2.0,atempo=2.0;8 倍速写成atempo=2.0,atempo=2.0,atempo=2.0。
-c:v hevc_videotoolbox:调用 macOS 独占的硬件加速,让 Mac 的 M 系列芯片硬件编码器去高效率处理 H.265 视频,比纯 CPU 压制快数倍且不发热。-c:a aac:变速后的音频必须重新编码,这里指定为兼容性最好的 AAC 格式。