FFmpeg 项目提供了多个命令行工具,覆盖音视频处理的转码、分析、播放、流处理等核心场景。以下是最常用的可执行程序及其功能详解:
一、核心工具
1. ffmpeg
:音视频处理的核心引擎
ffmpeg
是 FFmpeg 最核心的工具,用于音视频的录制、转换、流处理,支持几乎所有音视频格式、编码器和协议的转换。其本质是通过调用 FFmpeg 库(如 libavcodec
、libavformat
)实现复杂的媒体处理流程。
典型场景:
- 转码(如 MP4 → AVI、H.264 → H.265)
- 格式转换(如 TS 流 → MP4)
- 音视频剪辑(截取片段、合并文件)
- 添加滤镜(缩放、旋转、去水印)
- 提取/嵌入音视频流(如从视频中提取音频,或给视频添加字幕)
- 流媒体推拉(RTMP 推流、RTSP 拉流)
常用参数示例:
# 基础转码:将输入视频转为 H.265 编码的 MP4
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -c:a aac output.mp4
# 截取前 10 秒视频
ffmpeg -i input.mp4 -t 10 -c copy output.mp4
# 提取音频(从视频中分离 AAC 音频)
ffmpeg -i input.mp4 -vn -c:a copy output.aac
# 合并多个视频(需先创建列表文件 list.txt,内容为 file '1.mp4'、file '2.mp4')
ffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4
# 推 RTMP 流(直播推流)
ffmpeg -re -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://server/live/stream
参数说明:
-i <输入文件>
:指定输入文件或流地址(如本地文件、RTMP URL)。-c:v <编码器>
:指定视频编码器(如libx264
、libx265
、h264_nvenc
)。-c:a <编码器>
:指定音频编码器(如aac
、libmp3lame
)。-crf <数值>
:视频质量参数(H.264/H.265 适用,值越小质量越高,默认 23)。-t <秒数>
:限制处理时长(截取片段)。
2. ffprobe
:媒体文件分析工具
ffprobe
用于分析媒体文件的元数据(如编码格式、分辨率、帧率、码率、时长等),是调试和验证媒体文件的必备工具。它通过调用 libavformat
和 libavcodec
解析文件结构,输出详细的流信息。
典型场景:
- 查看视频的编码格式(H.264/H.265/AV1 等)。
- 检查音频的采样率、声道数(立体声/单声道)。
- 验证转码后的文件是否符合预期(如分辨率是否正确)。
- 调试媒体文件损坏问题(定位流错误)。
常用命令示例:
# 查看文件基本信息(简洁模式)
ffprobe input.mp4
# 详细输出(JSON 格式,便于脚本解析)
ffprobe -v error -show_format -show_streams -print_format json input.mp4
# 查看视频流编码格式
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=noprint_wrappers=1:nokey=1 input.mp4
# 查看音频流采样率和声道数
ffprobe -v error -select_streams a:0 -show_entries stream=sample_rate,channels -of default=noprint_wrappers=1:nokey=1 input.aac
参数说明:
-v error
:仅显示错误信息(过滤冗余日志)。-show_format
:输出文件整体信息(如时长、文件大小)。-show_streams
:输出每个流(视频、音频、字幕)的详细信息。-print_format json
:以 JSON 格式输出(适合编程解析)。
3. ffplay
:简易媒体播放器
ffplay
是 FFmpeg 内置的简易媒体播放器,基于 SDL 库实现,用于快速预览音视频文件或流。它适合临时测试媒体是否能正常播放,或验证解码是否正常(如检查转码后的文件是否损坏)。
典型场景:
- 快速预览视频/音频(无需安装额外播放器)。
- 测试解码器是否正常工作(如转码后用 ffplay 播放验证)。
- 观察视频滤镜效果(实时预览滤镜处理结果)。
常用命令示例:
# 直接播放视频文件
ffplay input.mp4
# 播放时调整窗口大小(宽 800,高自动适配)
ffplay -vf scale=800:-1 input.mp4
# 播放音频并显示波形(需音频设备支持)
ffplay -nodisp -autoexit input.aac
# 播放 RTMP 流(直播测试)
ffplay rtmp://server/live/stream
# 应用滤镜(如水平翻转视频)
ffplay -vf hflip input.mp4
参数说明:
-vf <滤镜>
:应用视频滤镜(如scale
缩放、hflip
水平翻转)。-nodisp
:隐藏播放窗口(仅音频播放时使用)。-autoexit
:播放完成后自动退出(避免卡在窗口)。
二、辅助工具
除了核心工具外,FFmpeg 还提供了一些辅助程序,用于特定场景:
1. ffmpeg-qsv
/ ffmpeg-nvenc
:硬件加速工具
部分硬件厂商(如 Intel、NVIDIA)提供了专用加速库,FFmpeg 为其提供了定制化工具:
ffmpeg-qsv
:基于 Intel Quick Sync Video(QSV)的硬件加速编码/解码(支持 H.264/H.265/VP9 等)。ffmpeg-nvenc
:基于 NVIDIA CUDA/NVENC 的硬件加速编码(支持 H.264/H.265/AV1 等)。
示例(NVIDIA NVENC 编码):
# 使用 NVIDIA 硬件加速将视频转为 H.264
ffmpeg -i input.mp4 -c:v h264_nvenc -preset fast output.mp4
2. ffmpeg-utils
:脚本工具集
FFmpeg 源码目录下的 ffmpeg-utils
包含一些实用的 shell 脚本(如 ffmpeg2pass.sh
用于两遍编码控制码率),但普通用户较少直接使用。
3. ffserver
(已弃用)
早期 FFmpeg 提供的流媒体服务器工具,用于搭建 RTMP/HTTP 流媒体服务。但由于维护成本高,新版 FFmpeg 已弃用 ffserver
,推荐使用 SRS、Wowza 或 NGINX-RTMP 等专业流媒体服务器替代。
三、工具对比总结
工具 | 核心功能 | 典型场景 |
---|---|---|
ffmpeg | 音视频转码、处理、流推拉 | 转码、剪辑、滤镜、直播推流 |
ffprobe | 分析媒体元数据 | 查看编码格式、分辨率、时长等 |
ffplay | 简易媒体播放与预览 | 临时播放、解码测试、滤镜预览 |
ffmpeg-qsv /nvenc | 硬件加速编码/解码 | 低延迟、高性能转码(依赖硬件) |
注意事项
- 所有工具均支持丰富的参数(如码率控制、帧率调整、滤镜链),可通过
man ffmpeg
、man ffprobe
或ffmpeg -h
查看帮助。 - 硬件加速工具(如
h264_nvenc
)需要系统安装对应驱动和库(如 NVIDIA 驱动 +libnpp
)。 - 生产环境中建议使用最新稳定版 FFmpeg(通过源码编译或包管理器更新),以获得更好的兼容性和性能。