FFmpeg 基础概念
在开始之前,先理解几个核心概念,这能帮助你更好地理解命令:

(图片来源网络,侵删)
-
FFmpeg: 一个强大的音视频处理工具集,它包含三个主要工具:
ffmpeg: 用于转换、录制和流处理音视频。ffplay: 一个简单的基于命令行的播放器。ffprobe: 用于分析音视频文件格式的工具。
-
基本命令结构: 一个典型的 FFmpeg 命令由三部分组成:
ffmpeg [输入选项] -i "输入文件路径" [输出选项] "输出文件路径"
-i: 输入文件的标志,后面跟着文件路径。[输入选项]: 作用于输入文件的参数,如-ss(开始时间),-t(持续时间)。[输出选项]: 作用于输出文件的参数,如-c:v(视频编码器),-b:v(视频码率)。"输出文件路径": 你要生成的文件名和路径。
-
查看帮助: 如果对某个参数不确定,可以使用
-h参数,查看所有编码器:ffmpeg -encoders
查看某个编码器的详细帮助(如 H.264):
(图片来源网络,侵删)ffmpeg -h encoder=libx264
核心参数详解
输入/输出控制
| 参数 | 说明 | 示例 |
|---|---|---|
-i |
指定输入文件 (必须) | -i "input.mp4" |
-ss |
设置开始时间 (可以放在输入前或输出前,位置影响处理速度) | -ss 00:01:30 (从1分30秒开始) |
-t |
设置持续时间 (从 -ss 指定的时间开始,持续多长时间) |
-t 10 (持续10秒) |
-to |
设置结束时间 (从 -ss 指定的时间开始,到某个时间结束) |
-to 00:02:00 (到2分钟结束) |
-y |
覆盖输出文件 (如果文件已存在,直接覆盖,不询问) | -y "output.mp4" |
-n |
不覆盖输出文件 (如果文件已存在,直接跳过) | -n "output.mp4" |
视频参数
| 参数 | 说明 | 示例 |
|---|---|---|
-c:v |
指定视频编码器 | -c:v libx264 (使用 H.264 编码) |
-b:v |
设置视频码率 (影响文件大小和质量) | -b:v 1M (1兆比特每秒) |
-crf |
恒定质量因子 (仅用于 H.264/H.265,值越小质量越高,文件越大,18-28 是常用范围) | -crf 23 (H.264 的默认值) |
-preset |
编码预设 (影响编码速度和压缩率),可选:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。medium 是默认值。 |
-preset fast (编码更快,但文件稍大) |
-s |
设置视频分辨率/尺寸 | -s 1280x720 (设置为 720p) |
-r |
设置帧率 | -r 30 (设置为 30 fps) |
-vf |
视频滤镜 (用于复杂的视频处理,如裁剪、缩放、加水印等) | -vf "scale=1280:-2" (按比例缩放到1280宽) |
音频参数
| 参数 | 说明 | 示例 |
|---|---|---|
-c:a |
指定音频编码器 | -c:a aac (使用 AAC 编码) |
-b:a |
设置音频码率 | -b:a 128k (128千比特每秒) |
-ar |
设置音频采样率 | -ar 44100 (设置为 44.1 kHz) |
-ac |
设置音频声道数 | -ac 2 (设置为立体声) |
-af |
音频滤镜 (用于音频处理,如音量调整、降噪等) | -af "volume=2.0" (将音量加倍) |
容器/格式参数
| 参数 | 说明 | 示例 |
|---|---|---|
-f |
指定输出容器格式 (通常根据文件扩展名自动判断,但有时需要手动指定) | -f mp4 |
-movflags |
设置 MP4 容器特定标志 (对于 Web 播放很重要) | -movflags +faststart (将索引放在文件开头,便于边下边播) |
常用场景实战示例
场景1:视频格式转换 (MP4 转 MKV)
最简单的转换,保持原有编码和参数不变。
ffmpeg -i "input.mp4" "output.mkv"
场景2:视频压缩 (使用 CRF)
这是最推荐的压缩方法,可以在保持较好质量的同时显著减小文件体积。
# 将 input.mp4 压缩为 output.mp4,使用 H.264 编码,CRF 值设为 28 (质量稍低但文件很小) ffmpeg -i "input.mp4" -c:v libx264 -crf 28 -preset medium -c:a copy "output.mp4" # -c:a copy 表示直接复制音频流,不重新编码,以节省时间
场景3:调整视频分辨率 (转为 720p)
# 将视频宽度缩放到 1280,高度按比例自动调整 (-2 表示 FFmpeg 自动计算) ffmpeg -i "input.mp4" -s 1280x720 -c:v libx264 -c:a copy "output_720p.mp4"
场景4:剪辑视频片段
方法A:使用 -ss 和 -t (精确时长)
# 从视频的第 30 秒开始,截取 10 秒长的片段 ffmpeg -ss 00:00:30 -t 10 -i "input.mp4" -c:v libx264 -c:a copy "output_clip.mp4"
方法B:使用 -ss 和 -to (精确结束时间)
# 从视频的第 30 秒开始,截取到 1 分钟结束 ffmpeg -ss 00:00:30 -to 00:01:00 -i "input.mp4" -c:v libx264 -c:a copy "output_clip.mp4"
提示:
-ss放在-i前面,FFmpeg 会先解码再找到时间点,速度慢但时间点精确,如果放在-i后面,FFmpeg 会快速搜索关键帧,速度快但剪辑点不一定精确。
场景5:提取视频中的音频
# 提取为 MP3 格式 ffmpeg -i "input.mp4" -vn -acodec libmp3lame -q:a 2 "output.mp3" # -vn: 禁用视频 # -q:a 2: 设置 MP3 的质量 (2是高质量,0是最高) # 提取为无损的 WAV 格式 ffmpeg -i "input.mp4" -vn -acodec pcm_s16le "output.wav"
场景6:从视频中提取图片序列
# 每秒提取一帧图片,命名为 output_001.jpg, output_002.jpg ... ffmpeg -i "input.mp4" -vf fps=1 "output_%03d.jpg" # 每秒提取 30 帧 ffmpeg -i "input.mp4" -vf fps=30 "output_%03d.jpg"
场景7:为视频添加图片水印
# 在视频的右下角 (10% from right, 10% from top) 添加一个水印 ffmpeg -i "input.mp4" -i "watermark.png" -filter_complex "overlay=W-w-0.1*W:H-h-0.1*H" "output.mp4" # overlay=W-w-0.1*W:H-h-0.1*H 的解释: # W: 视频总宽度, w: 水印宽度 # H: 视频总高度, h: 水印高度 # 0.1*W 表示距离右边10%的距离 # 0.1*H 表示距离底部10%的距离
场景8:合并视频和音频 (无重新编码)
假设你有一个纯视频文件 (.h264) 和一个纯音频文件 (.aac),想将它们合并成一个 MP4。
# -c:v copy -c:a copy 表示直接复制流,不重新编码,速度极快 ffmpeg -i "video.h264" -i "audio.aac" -c:v copy -c:a copy -movflags +faststart "output.mp4"
场景9:录制屏幕 (Windows)
FFmpeg 可以使用 gdigrab 或 dshow 作为输入源来录制屏幕。
使用 gdigrab (推荐,性能更好)
# 录制整个屏幕,帧率30,输出为output.mp4 ffmpeg -f gdigrab -framerate 30 -i desktop "output.mp4" # 录制指定区域 (例如从 1920,1080 开始,宽1280,高720) ffmpeg -f gdigrab -framerate 30 -offset_x 1920 -offset_y 1080 -video_size 1280x720 -i desktop "output.mp4"
FFmpeg 在 Windows 上的使用技巧
-
安装与配置:
- 访问 FFmpeg 官网 下载 Windows 版本。
- 下载后解压到一个固定目录,
C:\ffmpeg。 - 强烈建议将
C:\ffmpeg\bin添加到系统环境变量 Path 中,这样你就可以在任何命令行窗口中直接使用ffmpeg命令,而无需每次都切换到bin目录。
-
处理包含空格或特殊字符的路径:
- 在 Windows 命令提示符或 PowerShell 中,如果文件路径包含空格,必须用双引号 括起来。
# 正确 ffmpeg -i "C:\My Videos\my video.mp4" "C:\My Videos\output.mp4"
错误 (会报错找不到文件)
ffmpeg -i C:\My Videos\my video.mp4 C:\My Videos\output.mp4
- 在 Windows 命令提示符或 PowerShell 中,如果文件路径包含空格,必须用双引号 括起来。
-
查看详细输出:
- FFmpeg 的默认输出信息很多,有时会干扰查看进度,你可以使用
-hide_banner参数来隐藏版权和编译信息。ffmpeg -i input.mp4 -hide_banner "output.mp4"
- FFmpeg 的默认输出信息很多,有时会干扰查看进度,你可以使用
-
批处理:
- 你可以将多个 FFmpeg 命令写入一个
.bat(批处理) 文件中,然后双击运行,实现自动化处理,一个批量转码的脚本:@echo off for %%f in (*.mp4) do ( echo Processing "%%f"... ffmpeg -i "%%f" -c:v libx264 -crf 23 "output_%%~nf.mp4" ) echo All done! pause
这个脚本会遍历当前目录下所有的
.mp4文件,并对每个文件执行转码操作,输出文件名前加上output_。
- 你可以将多个 FFmpeg 命令写入一个
编码器选择速查表
| 目标 | 推荐视频编码器 | 推荐音频编码器 | 说明 |
|---|---|---|---|
| 通用/网络 | libx264 (H.264) |
aac |
兼容性最好,文件大小和质量平衡。 |
| 高质量/小体积 | libx265 (H.265/HEVC) |
aac |
压缩率更高,但编码慢,旧设备可能不支持。 |
| Apple 设备 | libx264 |
aac |
使用 -movflags +faststart 优化。 |
| Android 设备 | libx264 或 libx265 |
aac |
兼容性良好。 |
| 无损压缩 | ffv1 或 libx264 -crf 0 -preset slow |
flac |
文件巨大,用于后期制作存档。 |
| 快速录制 | libx264 -preset ultrafast |
aac |
牺牲压缩率换取极快的编码速度。 |
希望这份详细的指南能帮助你在 Windows 上熟练使用 FFmpeg!
