FFmpeg 常用用法整理
本文整理了一些 FFmpeg 的常见用法,适合在视频处理、RTSP 拉流、截图、转码等场景中快速参考。
说明:以下命令中的
input、output、rtsp://...等均需要替换为实际文件路径或流地址。
1. 保存视频
如果需要将输入流直接保存为一个新文件,而不做重编码,可以使用以下命令:
1 | |
该方式适合:
- 直接拷贝视频流
- 保持原始编码格式
- 适合快速封装或转存
2. 转码
如果需要重新编码视频,例如转换成 H.264 编码,可以使用:
1 | |
其中:
-vcodec h264:指定视频编码器为 H.264-an:去掉音频-y:覆盖已有输出文件
如果需要保留音频,可以去掉 -an。
3. 推流到 RTSP
下面示例将本地文件循环推送到 RTSP 地址:
1 | |
参数说明:
-re:按真实速度读取输入-stream_loop -1:循环读取输入-r 25:输出帧率为 25 fps-an:不推送音频-vcodec copy:直接复制视频流,不重新编码-f rtsp:指定输出格式为 RTSP
4. 截图
如果要从 RTSP 流中抓取一张图片,可以使用:
1 | |
该命令的作用是:
- 使用 TCP 方式拉流
- 从指定 RTSP 地址抓取一帧图像
- 将分辨率调整为
1920x1080 - 输出为 JPG 图片
5. 常用参数速查
参考链接:
| 功能 | 参数 |
|---|---|
| TCP 协议拉流 | -rtsp_transport tcp |
| 循环读取文件 | -stream_loop -1 |
| 修改分辨率 | -vf scale=1280:720 |
| 不重新编解码 | -vcodec copy -acodec copy |
| 重新编解码 | -vcodec h264 |
| 分割视频 | -ss 开始时间 -t 持续时间 |
6. 视频分割
如果只想截取一段视频,可以使用:
1 | |
说明:
-ss:开始截取的位置-t:截取时长-c copy:直接复制编码,不重新编码
7. 修改分辨率
1 | |
如果想保留原视频格式并只修改分辨率,通常可以结合 -c:v libx264 等参数进行重编码。
8. 特殊字符处理
如果 URL 中包含特殊字符,例如 @、!,在命令行中可能需要转义。
例如原始地址:
1 | |
转义后:
1 | |
常见处理方式:
- 对
@、!等特殊字符进行转义 - 如果命令行解析异常,可尝试使用单引号包裹 URL
示例:
1 | |
9. 实用建议
在实际使用中,推荐遵循以下做法:
- 对于不需要重新编码的场景,优先使用
-vcodec copy -acodec copy - 对于需要格式转换或压缩的场景,使用 H.264 / H.265 等编码器重新编码
- 在 RTSP 拉流场景下,若网络环境不稳定,可以尝试使用 TCP 拉流(
-rtsp_transport tcp) - 对于脚本化使用,建议将 URL、输入输出路径统一写入变量,减少手工修改错误
10. 总结
FFmpeg 是一款功能强大的多媒体处理工具,适合处理:
- 视频转换
- 视频裁剪
- RTSP 推流与拉流
- 图片抓取
- 音视频封装与重编码
如果你在实际使用过程中遇到特定问题,例如 RTSP 断流、码率控制、无声音频、H.264/H.265 转码参数调优,可以进一步深入研究对应的 FFmpeg 参数组合。
FFmpeg 常用用法整理
https://jgq12138.github.io/2023/06/19/ffmpeg/