你是不是常常为导出视频体积太大、平台上传慢、字幕丢失或画质下降而头疼?
本文用最实用的 ffmpeg 命令教你如何:批量压缩视频、保留或烫印字幕、加入水印、生成缩略图与元数据,并提供 Windows / macOS / Linux 的一键脚本。步骤清晰、可复制,适合短视频创作者、内容产出者和小团队。

为什么用 ffmpeg?
- 免费开源、跨平台、支持硬件加速
- 命令可自动化、适合批量处理
- 可以完全控制编码参数(质量 vs 体积)与字幕处理方式
适用场景
- 把高清影片压成适合抖音 / 快手 / B站上传的小尺寸文件
- 批量把字幕(.srt)嵌入或保留为软字幕
- 给视频统一加水印、生成缩略图、提取音频用于播客
一:准备工作(安装 ffmpeg)
macOS(Homebrew)
brew install ffmpeg
Ubuntu / Debian
sudo apt update
sudo apt install ffmpeg -y
Windows
- 推荐使用 [ffmpeg 的静态包](解压到某文件夹并把 bin 路径加入 PATH),或使用 choco install ffmpeg(若安装了 Chocolatey)。
- (说明里不写外链;如需链接我可以给你)

二:常用参数速览(先记住这几项)
- -c:v libx264:CPU x264 编码(兼容性强)
- -preset slow|medium|fast:编码速度/压缩效率权衡(slow 质量更优但慢)
- -crf 18–28:质量控制(数值越小画质越好/体积越大)。常用:YouTube 1822,短视频 2024。
- -c:a aac -b:a 128k:音频编码与比特率
- 硬件编码示例:-c:v h264_nvenc(NVIDIA),-c:v h264_qsv(Intel QSV),-vaapi(Linux VAAPI)
- -c:s mov_text:把字幕嵌为 MP4 的软字幕(保留,可开关)
- 烫印字幕(burn-in):-vf subtitles=subtitle.srt(需要 ffmpeg 编译时支持)
三:单文件压缩(保留软字幕,不烫印)
假设原视频 in.mp4,字幕 in.srt(同名),输出 out.mp4:
ffmpeg -i in.mp4 -i in.srt -map 0 -map 1 -c:v libx264 -preset medium -crf 22 -c:a aac -b:a 128k -c:s mov_text out.mp4
说明:
- -map 0 把原视频流/音频流映射进去,-map 1 把 srt 映射为字幕流(软字幕)。
- 输出文件为 MP4,播放器/平台若支持会显示可切换字幕。
四:单文件压缩(把字幕烫入画面 — 所有设备都能看到)
适合短视频平台或不支持软字幕的平台:
ffmpeg -i in.mp4 -vf “subtitles=in.srt:force_style='FontName=Arial,FontSize=24'” -c:v libx264 -preset medium -crf 22 -c:a aac -b:a 128k out_burnin.mp4
说明:
- subtitles 需要 ffmpeg 支持 libass(多数预编译版支持)。
- 可用 force_style 调整字体/大小/颜色。
五:加入透明水印(右下角,保持 10% 边距)
水印图片 logo.png(含透明通道):
ffmpeg -i in.mp4 -i logo.png -filter_complex “overlay=W-w-10:H-h-10” -c:v libx264 -preset medium -crf 22 -c:a copy out_watermark.mp4
说明:
- overlay=W-w-10:H-h-10 表明右下角偏移 10px。
六:硬件加速压缩示例(NVIDIA NVENC)
如果你有 NVIDIA GPU,速度会快许多(但 CRF 表明略有不同):
ffmpeg -hwaccel nvdec -i in.mp4 -c:v h264_nvenc -preset slow -rc vbr_hq -cq 19 -b:v 0 -c:a aac -b:a 128k out_nvenc.mp4
说明:
- -cq 类似于质量目标,数值越小画质越好(参考厂商文档微调)。
七:一键批量处理(Linux / macOS Bash 脚本)
把本目录下所有 .mp4 压缩并保留同名 .srt(软字幕),输出到 ./out:
mkdir -p out
for f in *.mp4; do
if [ -f “${name}.srt” ]; then
ffmpeg -i “$f” -i “${name}.srt” -map 0 -map 1 -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -c:s mov_text “out/${name}_small.mp4”
else
ffmpeg -i “$f” -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k “out/${name}_small.mp4”
fi
done
说明:
- crf=23 为通用短视频压缩值,若追求更高质量可设 20。
八:Windows PowerShell 批量脚本
在文件夹中运行,输出到 out:
New-Item -ItemType Directory -Path .out -Force
Get-ChildItem -Filter *.mp4 | ForEach-Object {
$name = $_.BaseName
if (Test-Path “$name.srt”) {
ffmpeg -i “$($_.FullName)” -i “$name.srt” -map 0 -map 1 -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -c:s mov_text “.out$name_small.mp4”
} else {
ffmpeg -i “$($_.FullName)” -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k “.out$name_small.mp4”
}
}
九:生成缩略图(中间帧 + 多分辨率)
单张缩略图(取视频第 10 秒):
ffmpeg -ss 00:00:10 -i in.mp4 -frames:v 1 -q:v 2 thumb.jpg
多张缩略图(每 30 秒一张):
ffmpeg -i in.mp4 -vf “fps=1/30,scale=1280:-1” -qscale:v 2 thumbs_%03d.jpg
十:提取音频(mp3 或 aac)
# MP3(用于播客)
ffmpeg -i in.mp4 -vn -c:a libmp3lame -b:a 192k out.mp3
# AAC(更小更现代)
ffmpeg -i in.mp4 -vn -c:a aac -b:a 128k out.m4a
十一:进阶技巧与提议(提高上传成功率与画质)
- 目标平台参数
- 抖音/快手:竖屏优先 1080×1920(或 720×1280);帧率保持 25/30fps;crf 20~24。
- B站/YouTube:横屏 1920×1080;crf 18~22。
- 两遍编码(需要极致压缩与质量)
- 对于 x264,两遍可以更准确控制平均码率:
ffmpeg -y -i in.mp4 -c:v libx264 -b:v 2500k -pass 1 -an -f mp4 /dev/null &&
ffmpeg -i in.mp4 -c:v libx264 -b:v 2500k -pass 2 -c:a aac -b:a 128k out.mp4
- 一般短视频用 CRF 即可,速度更快。
- 保留字幕 vs 烫入字幕
- 保留软字幕(mov_text)体积小且可切换,但部分手机/平台不支持。
- 烫入字幕可保证任何平台都能看到,但无法关闭且对画质有轻微影响。
- 文件名与元数据
- 使用 -metadata title=”标题” 添加元数据,便于管理与上传后平台识别。
- 硬件加速注意事项
- NVENC / QSV 等速度快,但在低比特率下可能产生宏块或画质瑕疵,需多做对比。
- 测试不同 -preset / -cq 或 -rc 设置找到最佳平衡。
- 水印与位置
- 对移动端视频提议放在保守区域(避免被平台 UI 遮盖),常用右下或左上留白 10% 区域。
十二:常见问题(FAQ)
- ffmpeg 报错找不到字幕滤镜:说明你的 ffmpeg 没启用 libass,换用预编译较全的版本或用系统包管理器安装完整版。
- 上传后平台自动转码导致花屏:尝试提高目标文件比特率或使用平台推荐的参数。
- 批处理速度慢:启用硬件编码或并行处理多线程(注意不要超载磁盘/CPU)。
结语(呼吁行动)
用好 ffmpeg,你能把制作时间变成自动化流程:批量压缩、统一字幕处理、自动生成缩略图与水印,一键输出适合各平台的最终文件。
如果你愿意,我可以:
- 把上面的脚本按你的平台(Windows / macOS / Linux)改写成一键执行的工具;
- 或者为你生成适配抖音/YouTube/微信视频的具体参数表与封面模板。