一、前言

FFmpeg的Static版本的bin文件夹中只有三个.exe文件,分别是: ffmpeg.exe、ffplay.exe、ffprobe.exe,这三个是FFmpeg源代码编译后生成的可执行文件,也就是FFmpeg的三大工具,本文章主要介绍ffplay。

在编译旧版本FFmpeg源代码时,如果系统中包含了SDL-1.2版本,就会默认将ffplay编译生成出来;如果不包含SDL-1.2或者版本不是SDL-1.2时,将无法生成ffplay文件。所以,如果想要使用ffplay进行流媒体播放测试,则需要安装SDL-1.2,而在新版本的FFmpeg源代码中,需要SDL-2.0之后的版本才能有效生成ffplay。

在FFmpeg中通常使用ffplay作为播放器,其实ffplay同样也可以作为很多音视频数据的图形化分析工具,通过ffplay可以看到视频图像的运动估计方向、音频数据的波形等。

ffplay不仅仅是播放器,同时也是测试ffmpeg的codec引擎、format引擎,以及filter引擎的工具,并且还可以进行可视化的媒体参数分析。


二、ffplay命令查询解析

通过​​ffplay --help​​可以看到ffmpeg常见的命令

C:\Users\wangjichuan\Desktop>ffplay --help  //输入命令
ffplay version 3.4 Copyright (c) 2003-2017 the FFmpeg developers
built with gcc 7.2.0 (GCC)
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx
libavutil 55. 78.100 / 55. 78.100
libavcodec 57.107.100 / 57.107.100
libavformat 57. 83.100 / 57. 83.100
libavdevice 57. 10.100 / 57. 10.100
libavfilter 6.107.100 / 6.107.100
libswscale 4. 8.100 / 4. 8.100
libswresample 2. 9.100 / 2. 9.100
libpostproc 54. 7.100 / 54. 7.100
Simple media player
usage: ffplay [options] input_file

Main options: //常用命令
-L show license
-h topic show help
-? topic show help
-help topic show help
--help topic show help
-version show version
-buildconf show build configuration
-formats show available formats
-muxers show available muxers
-demuxers show available demuxers
-devices show available devices
-codecs show available codecs
-decoders show available decoders
-encoders show available encoders
-bsfs show available bit stream filters
-protocols show available protocols
-filters show available filters
-pix_fmts show available pixel formats
-layouts show standard channel layouts
-sample_fmts show available audio sample formats
-colors show available color names
-loglevel loglevel set logging level
-v loglevel set logging level
-report generate a report
-max_alloc bytes set maximum size of a single allocated block
-sources device list sources of the input device
-sinks device list sinks of the output device
-x width force displayed width //强制设置视频显示窗口的宽度
-y height force displayed height //强制设置视频显示窗口的高度
-s size set frame size (WxH or abbreviation) //设置视频显示的宽高
-fs force full screen //强制全屏显示
-an disable audio //屏蔽音频
-vn disable video //屏蔽视频
-sn disable subtitling //屏蔽字幕
-ss pos seek to a given position in seconds //根据设置的秒进行定位拖动
-t duration play "duration" seconds of audio/video //设置播放视频/音频的长度
-bytes val seek by bytes 0=off 1=on -1=auto //设置定位拖动的策略,0为不可拖动,1
-nodisp disable graphical display //关闭图形化显示窗口
-noborder borderless window
-volume volume set startup volume 0=min 100=max //设置音量
-f fmt force format //强制使用设置的格式进行解析
-window_title window title set window title //设置显示窗口的标题
-af filter_graph set audio filters //设置音频的滤镜
-showmode mode select show mode (0 = video, 1 = waves, 2 = RDFT)
-i input_file read specified file
-codec decoder_name force decoder //强制使用设置的codec进行解码
-autorotate automatically rotate video //自动旋转视频

Advanced options: //高级命令
-cpuflags flags force specific cpu flags
-hide_banner hide_banner do not show program banner
-ast stream_specifier select desired audio stream //设置将要播放的音频流
-vst stream_specifier select desired video stream //设置将要播放的视频流
-sst stream_specifier select desired subtitle stream //设置将要播放的字幕流
-pix_fmt format set pixel format
-stats show status //输出多媒体播放状态
-fast non spec compliant optimizations //非标准化规范的多媒体兼容优化
-genpts generate pts
-drp let decoder reorder pts 0=off 1=on -1=auto
-lowres
-sync type set audio-video sync. type (type=audio/video/ext) //音视频同步设置可根据音频时间、视频时间或者外部扩展时间进行参考
-autoexit exit at the end //多媒体播放完毕之后自动退出ffplay,ffplay默认播放完毕之后不退出播放器
-exitonkeydown exit on key down //当有按键按下事件产生时退出ffplay
-exitonmousedown exit on mouse down //当有鼠标按键事件产生时退出ffplay
-loop loop count set number of times the playback shall be looped //设置多媒体文件循环播放的次数
-framedrop drop frames when cpu is too slow //当CPU资源占用过高时,自动丢帧
-infbuf don't limit the input buffer size (useful with realtime streams) //设置无极限的播放器buffer,这个选项常见于实时流媒体播放场景
-vf filter_graph set video filters //视频滤镜设置
-rdftspeed msecs rdft speed
-default generic catch all option
-acodec decoder_name force audio decoder //强制使用设置的音频解码器
-scodec decoder_name force subtitle decoder //强制使用设置的字幕解码器
-vcodec decoder_name force video decoder //强制使用设置的视频解码器
-find_stream_info read and decode the streams to fill missing information with heuristics

......
......
......

三、命令测试实例

1、视频从第30秒开始播放,播放10秒钟:​​ffplay -ss 30 -t 10 1.mp4​

FFmpeg三大工具--ffplay_linux


2、设置播放器的窗口显示标题:​​ffplay -window_title "Hello World" 1.mp4​

FFmpeg三大工具--ffplay_ide_02


3、打开网络直播流:​​ffplay -window_title "播放测试" rtmp://up.v.test.com/live/stream​