编译旧版本的FFmpeg源代码,如果系统中包含SDL-1.2版本,会生成ffplay,如果不包含就无法生成ffplay文件;新版本FFmpeg需要SDL-2.0版本;想要用ffplay进行流媒体播放测试,需要系统支持SDL然后编译源码生成ffplay。
ffplay的功能
ffplay不仅仅是播放器,也可以作为音视频数据图形化分析工具,ffplay也可以看到视频图像的运动估计方向、音视频波形等,同时也是测试ffmpeg的codec引擎、format引擎、filter引擎工具,还可以进行可视化的媒体参数分析,可以通过ffplay --help来查看:
字段 | 说明 |
---|---|
x | 强制设置视频显示窗口的宽度 |
y | 视频显示窗口的高度 |
s | 设置视频显示的宽高 |
fs | 强制设置全屏显示 |
an | 屏蔽音频 |
vn | 屏蔽视频 |
sn | 屏蔽字幕 |
ss | 根据设置的秒进行定位拖动 |
t | 设置播放长度 |
bytes | 设置定位拖动的策略,0不可拖动,1为可拖动,-1为自动 |
nodisp | 关闭图形化显示窗口 |
f | 强制使用设置的格式进行解析 |
window_title | 设置窗口的标题 |
af | 设置音频的滤镜 |
codec | 强制使用设置的codec进行解码 |
autorotate | 自动旋转视频 |
举个栗子:
ffplay -window_title "caterpillar404" input.mp4
ffplay打开网络直播视频
通过ffplay打开网络直播视频,可以使用如下命令:
** ffplay -window_title "直播测试" rtmp://47.254.42.238:1935/live/caterpillar ** 这是我自己的测试直播流
高级参数
上面基础参数介绍完毕,一样ffplay --help查看,我就不截图了,如下表所示:
字段 | 说明 |
---|---|
ast | 设置将要播放的音频流 |
vst | 设置将要播放的视频流 |
sst | 设置将要播放的字幕 |
stats | 输出多媒体播放状态 |
fast | 非标准化规范的多媒体兼容优化 |
sync | 音视频同步设置可根据音频时间、视频时间或者外部扩展时间进行参考 |
autoexit | 播放完毕后自动退出 |
exitonkeydown | 当有按下事件的时候退出ffplay |
exitonmousedown | 当有鼠标按键的时候退出ffplay |
loop | 设置多媒体文件循环播放的次数 |
framedrop | 当CPU资源占用过高时,自动丢帧 |
infbuf | 设置无极限的播放器buffer,这个选项常见与实时流媒体播放场景 |
vf | 视频滤镜设置 |
acodec | 强制设置音频解码器 |
vcodec | 强制设置视频解码器 |
scodec | 强制设置字幕解码器 |
从上述参数进行一些参数组合,举个栗子:
例如从第5秒开始播放一个视频,播放10秒钟,播放完成后自动退出ffplay,播放窗口标题为“绿帽子”,为了确认播放时长正确,可以通过系统命令time 来查看运行时长:
time ffplay -ss 5 -t 10 -autoexit input.mp4
命令执行完毕之后输出如下:
从输出内容上看,实际消耗时间为12.335s,用户空间消耗0.801s,情况基本相符。
通过filter将字幕文件加载到播放数据中
可以加载ASS和SRT格式的字幕文件
ffplay -window_title "胖胖胖" -vf "subtitles=input.srt" input.mp4
ffplay的数据可视化分析应用
使用ffplay除了可以播放视频流媒体文件之外,还可以作为可视化的视频流媒体分析工具,例如播放音频文件,如果不确定文件的声音是否正常,可以使用ffplay播放音频文件,播放的时候将解码后的音频数据以音频波形的形式显示出来,执行效果如下:
ffplay -showmode 1 input.mp3
上图可以看到,音频播放时的波形可以通过振幅显示出来,可以用来查看音频的播放情况。
查看B帧和P帧预测信息
ffplay -vismv pf input.mp4
目前vismv这个参数已经被替换掉了,现在使用codecview这个滤镜来进行设置,命令如下:
ffplay input.mp4 -vf codecview=mv=pf+bf+bb
运动向量显示参数:
参数 | 说明 |
---|---|
pf | P帧向前运动估计显示 |
bf | B帧向前玉栋估计显示 |
bb | B帧向后运动估计显示 |