ffmpeg 存储视频文件的核心命令是 -c:v libx264 -preset medium -crf 23,但实际使用中需要根据场景调整参数才能平衡体积与画质。
不论是刚接触视频处理的新手,还是需要批量转码的老手,ffmpeg 都是绕不开的命令行工具,它免费、跨平台,支持几乎所有格式,但上手时最让人头疼的就是“存储视频文件”这一环节怎么把一段视频无损保存、怎么压缩到最小、怎么转成其他格式,下面从实际操作出发,带你一步步搞清楚 ffmpeg 存储视频文件的完整流程。
ffmpeg 存储视频文件 基础命令
安装与环境配置
ffmpeg 支持 Windows、macOS 和 Linux,下载官方编译包后解压,将 bin 目录加入系统 PATH 即可使用,macOS 用户推荐用 Homebrew 安装:brew install ffmpeg,Linux 用户直接用包管理器,sudo apt install ffmpeg,安装完成后在终端输入 ffmpeg -version 确认版本,社区版通常够用。
核心存储命令格式
最简单的存储命令是直接复制流,不重新编码:
ffmpeg -i input.mp4 -c copy output.mkv
-c copy 表示直接复制视频和音频流,不做任何压缩,速度最快,但文件体积不变,多数场景下我们需要重新编码以调整大小或格式,这时命令变为:
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
-c:v libx264:视频编码器选用 H.264,兼容性最广。-c:a aac:音频编码为 AAC,兼顾音质和体积。output.mp4:输出容器格式,MP4 最通用。
关键点:输入文件路径和输出文件名必须写对,否则会提示找不到文件,如果输出路径包含空格,记得用引号包裹。
常用参数速查表
| 参数 | 作用 | 示例 |
|---|---|---|
-c:v libx265 |
使用 H.265 编码,体积更小 | -c:v libx265 |
-preset ultrafast |
编码速度最快,但体积较大 | -preset ultrafast |
-crf 28 |
控制质量,数值越大体积越小 | -crf 28 |
-b:v 1M |
固定视频比特率 1Mbps | -b:v 1M |
-s 1280x720 |
设置输出分辨率 | -s 1280x720 |
ffmpeg 视频压缩 参数怎么调
压缩是存储视频文件最常用的场景,参数调好了能省下大量硬盘空间。
控制视频质量的 CRF 值
CRF(Constant Rate Factor)是 ffmpeg 进行视频压缩时最直观的参数,范围 0–51,0 表示无损,51 表示最差。业内共识是 18–28 之间最常用:18 接近无损,23 是默认值,28 适合网络传输,具体用多少,取决于你愿意牺牲多少画质。
- 存档用途:CRF 18–20,体积比原始文件小不少,肉眼几乎看不出区别。
- 日常分享:CRF 23–25,体积适中,手机上播放完全够用。
- 极致压缩:CRF 28–30,适合发到微信或上传论坛,但仔细观察有块状噪声。
举例:一段 1080p 的 10 分钟视频,原始文件 2GB,用 -crf 23 压缩后通常在 200–400MB 之间,具体取决于画面的复杂程度,如果画面以静态为主(比如录屏),体积会小得多;动作电影或游戏录像则偏大。
预设模式与速度权衡
-preset 决定编码器在压缩时花多少时间寻找最佳压缩方案,速度越快,体积越大;速度越慢,体积越小(但画质不变),速度从快到慢依次为:
- ultrafast、superfast、veryfast、faster、fast
- medium(默认)
- slow、slower、veryslow、placebo(placebo 提升极小,不推荐用)
建议:日常使用 medium 或 slow 即可。veryslow 能比 slow 多节省 5%–10% 体积,但编码时间可能翻倍,如果你只是转几个文件,用 slow 足够;如果批量处理几百个,medium 更现实。
调整分辨率与比特率
有时 CRF 不能满足需求,尤其是需要固定输出大小(比如上传到某个平台限制 100MB),这时用二遍编码(2-pass)配合目标比特率更精准。
- 第一遍:
ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 1 -f mp4 /dev/null(Windows 用 NUL) - 第二遍:
ffmpeg -i input.mp4 -c:v libx264 -b:v 1M -pass 2 output.mp4
比特率单位常用 K(千比特/秒)或 M(兆比特/秒)。经验值:1080p 视频用 2–4Mbps 码率能获得不错画质,720p 用 1–2Mbps,480p 用 500Kbps 左右,如果画面内容简单(如讲座),码率可以更低。
ffmpeg 转换格式 场景对比
选择合适的容器和编码器,能直接影响存储视频文件的效率和兼容性。
不同容器格式的选择
-
MP4:最通用,几乎所有设备都支持,视频编码通常用 H.264 或 H.265,音频用 AAC,适合网络分发、社交平台、手机播放。
- MKV:支持多音轨、多字幕、章节信息,适合本地收藏原始质量的视频,编码器可以选 H.264、H.265 甚至无损格式。
- AVI:老旧格式,体积大,兼容性差,除非特殊需求(比如老设备),否则不推荐用 ffmpeg 存储为 AVI。
- MOV:苹果生态常见,支持高质量编码,用于后期剪辑工程存储,但 web 端兼容性不如 MP4。
场景建议:如果你的视频要在手机、电视、电脑之间流畅播放,无脑选 MP4 + H.264,如果是收藏蓝光原盘或者做字幕封装,MKV 是更好的选择。
编码器对比:H.264 vs H.265
| 特性 | H.264 (libx264) | H.265 (libx265) |
|---|---|---|
| 兼容性 | 极高,几乎全平台 | 较新设备才支持 |
| 编码速度 | 快 | 慢(约 2–4 倍) |
| 同画质下体积 | 1x | 约 50%–60% |
| 适用场景 | 通用存储、上传 | 存档、4K/8K 视频 |
行业共识:如果你追求最小体积且目标设备支持 H.265,优先选 libx265,但要注意,老款手机、部分电视盒子可能无法解码 H.265,转码后反而播放卡顿,所以对于普通用户,H.264 仍然是存储视频文件最稳妥的选择。
针对特定用途的存储优化
- 网络分发(如发到微信、朋友圈):用 H.264 + CRF 28 + 分辨率 720p 或更低,体积控制在 10MB 以内。
- 本地存档:用 H.265 + CRF 20 + 原始分辨率,保留原音频格式(如 FLAC 无损)。
- 后期剪辑:使用 ProRes 或 DNxHD 编码,避免再次压缩导致画质损失,ffmpeg 命令:
-c:v prores_ks -profile:v 3。
ffmpeg 存储视频文件 常见问题
如何保持画质的同时减小体积
这是最常被问的问题。正确做法:先用 CRF 18 压一次,观察体积和画质,再逐步调高 CRF 直到画质变差为止,多数视频在 CRF 20–22 时体积能减少 50%–70%,且肉眼几乎看不出区别,如果画面细节密集(如树叶、雪花),CRF 建议不超过 20。不要用 -b:v 固定比特率去压制静态画面多的视频,那样会浪费空间。
批量处理多个文件
写一个简单脚本可以循环处理所有视频,Windows 下用批处理:
for %%i in (.mp4) do ffmpeg -i "%%i" -c:v libx264 -crf 23 -c:a aac "compressed%%~ni.mp4"
Linux/macOS 用 bash:
for f in .mp4; do ffmpeg -i "$f" -c:v libx264 -crf 23 -c:a aac "compressed/${f%.}.mp4"; done
这样就能把当前目录下所有 MP4 压缩到 compressed 文件夹,保留原文件名,注意输出路径要提前创建。
硬件加速加速转码
CPU 比较老,编码速度慢,可以尝试硬件加速,ffmpeg 支持 Intel QuickSync(h264_qsv)、NVIDIA NVENC(h264_nvenc)、AMD AMF(h264_amf),命令示例:
ffmpeg -i input.mp4 -c:v h264_nvenc -preset p4 -b:v 2M output.mp4
注意:硬件加速编码的画质通常不如软件编码,在低码率下更明显,适合对速度要求高、对画质要求不苛刻的场景(如直播录制、日常转码),如果追求极致画质,还是用 libx264 跑 slow 预设。
ffmpeg 存储视频文件的本质是“根据需求选择合适的编码器、参数和容器”,先从 CRF 预设开始,熟悉后再接触 bitrate 和 2-pass,记住一个原则:快压缩选 preset fast + CRF 25,高质量存档选 preset slow + CRF 18,多试几次,你就能找到最适合自己场景的配置。
ffmpeg 存储视频文件 常见问题解答
ffmpeg 存储视频文件 命令是什么?
最简单的存储命令是 ffmpeg -i input.mp4 -c copy output.mkv,这直接复制流不重编码,如果需要压缩,用 ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4,CRF 值按需调整,23 是通用起点。
ffmpeg 视频压缩 如何平衡质量和大小?
使用 CRF 模式,数值在 18–28 之间,先试 23,如果体积太大就提高 2 个点,如果画质太差就降低 2 个点,同时配合 -preset slow 可以在不牺牲画质的前提下进一步减小体积,如果固定产物大小,用二遍编码加上目标比特率。
ffmpeg 转换格式 时如何保留原质量?
用 -c copy 直接复制流,不重新编码,这样视频和音频完全保留原始质量,但容器格式变化时,务必确认目标容器支持源编码器,MP4 不支持无损 FLAC 音频,需要转码为 AAC 或 ALAC,如果必须重新编码,设置 -crf 0 用于 libx264 可实现视觉无损,但文件体积很大。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/537160.html


