使用 FFmpeg 播放视频可以通过以下两种方式实现:
- 使用
ffplay
:ffplay
是 FFmpeg 附带的一个简单视频播放器,最常用来快速播放视频文件。- 自定义播放(开发层面): 使用 FFmpeg 库(如
libavcodec
和libavformat
)开发自己的播放器。
1. 使用 ffmplay
播放视频
基础命令
ffplay input.mp4
- 直接播放文件
input.mp4
。 ffplay
会自动调整窗口大小以适应视频分辨率。
常见参数
- 调整窗口大小
ffplay -x 1280 -y 720 input.mp4
- 全屏播放
ffplay -fs input.mp4
- 指定播放时间段
ffplay -ss 00:01:00 -t 30 input.mp4
从视频的 1 分钟处开始,播放 30 秒。
- 循环播放
ffplay -an input.mp4
循环播放 3 次(loop 0
表示无限循环)。
- 静音播放
ffplay -an input.mp4
- 调整播放速度
ffplay -vf "setpts=0.5*PTS" input.mp4
加速播放(0.5 表示两倍速)
2. 使用 FFmpeg 库开发播放器
在项目中集成一个自定义播放器,可以使用 FFmpeg 的 API 实现。
以下是一个简化的流程和代码示例:
播放器开发流程
- 初始化 FFmpeg 库
- 注册所有的解码器、格式处理器等。
- 打开输入文件
- 使用
avformat_open_input
加载文件。
- 找到视频流
- 遍历所有流,找到视频流和音频流。
- 解码视频帧
- 使用
avcodec_receive_frame
和avcodec_send_packet
解码视频。
- 显示帧
- 将解码帧传递给显示模块(如 SDL)。
代码示例
下面是一个使用 FFmpeg 和 SDL2 播放视频的 C 示例代码:
#include <SDL2/SDL.h>
#include <libavformat/avformat.h>
#include <libavcodec/avcodec.h>
#include <libswscale/swscale.h>
int main(int argc, char* argv[]) {
if(argc < 2) {
printf("Usage: %s <video file> \n", argv[0]);