FFmpeg 常用用法整理

本文整理了一些 FFmpeg 的常见用法,适合在视频处理、RTSP 拉流、截图、转码等场景中快速参考。

说明:以下命令中的 inputoutputrtsp://... 等均需要替换为实际文件路径或流地址。

1. 保存视频

如果需要将输入流直接保存为一个新文件,而不做重编码,可以使用以下命令:

1
ffmpeg -i input -vcodec copy -acodec copy output

该方式适合:

  • 直接拷贝视频流
  • 保持原始编码格式
  • 适合快速封装或转存

2. 转码

如果需要重新编码视频,例如转换成 H.264 编码,可以使用:

1
ffmpeg -i input -vcodec h264 -an -y output

其中:

  • -vcodec h264:指定视频编码器为 H.264
  • -an:去掉音频
  • -y:覆盖已有输出文件

如果需要保留音频,可以去掉 -an

3. 推流到 RTSP

下面示例将本地文件循环推送到 RTSP 地址:

1
ffmpeg -re -stream_loop -1 -i input -r 25 -an -vcodec copy -f rtsp rtsp://192.168.1.10/live/stream

参数说明:

  • -re:按真实速度读取输入
  • -stream_loop -1:循环读取输入
  • -r 25:输出帧率为 25 fps
  • -an:不推送音频
  • -vcodec copy:直接复制视频流,不重新编码
  • -f rtsp:指定输出格式为 RTSP

4. 截图

如果要从 RTSP 流中抓取一张图片,可以使用:

1
ffmpeg -rtsp_transport tcp -i rtsp://192.168.99.148/jtwf/1102E/000000_001 -vf scale=1920:1080 -r 1 -vframes 1 -an -vcodec mjpeg 000000_001.jpg

该命令的作用是:

  • 使用 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
ffmpeg -i input -ss 00:00:10 -t 00:00:30 -c copy output.mp4

说明:

  • -ss:开始截取的位置
  • -t:截取时长
  • -c copy:直接复制编码,不重新编码

7. 修改分辨率

1
ffmpeg -i input -vf scale=1280:720 output.mp4

如果想保留原视频格式并只修改分辨率,通常可以结合 -c:v libx264 等参数进行重编码。

8. 特殊字符处理

如果 URL 中包含特殊字符,例如 @!,在命令行中可能需要转义。

例如原始地址:

1
ffplay -i rtsp://root:Hik@2021!@15.144.124.204/Streaming/Channels/101

转义后:

1
ffplay -i rtsp://root:Hik\@2021\!@15.144.124.204/Streaming/Channels/101

常见处理方式:

  • @! 等特殊字符进行转义
  • 如果命令行解析异常,可尝试使用单引号包裹 URL

示例:

1
ffplay -i 'rtsp://root:Hik@2021!@15.144.124.204/Streaming/Channels/101'

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/
作者
JGQ12138
发布于
2023年6月19日
许可协议