本文目录:
ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器。
在安装了在命令行中输入如下格式的命令:
ffplay [选项] ['输入文件']
1. 主要选项
'-x width' 强制以 "width" 宽度显示
'-y height' 强制以 "height" 高度显示
'-an' 禁止音频
'-vn' 禁止视频
'-ss pos' 跳转到指定的位置(秒)
'-t duration' 播放 "duration" 秒音/视频
'-bytes' 按字节跳转
'-nodisp' 禁止图像显示(只输出音频)
'-f fmt' 强制使用 "fmt" 格式
'-window_title title' 设置窗口标题(默认为输入文件名)
'-loop number' 循环播放 "number" 次(0将一直循环)
'-showmode mode' 设置显示模式
可选的 mode :
'0, video' 显示视频
'1, waves' 显示音频波形
'2, rdft' 显示音频频带
默认值为 'video',你可以在播放进行时,按 "w" 键在这几种模式间切换
'-i input_file' 指定输入文件
2. 一些高级选项
'-sync type' 设置主时钟为音频、视频、或者外部。默认为音频。主时钟用来进行音视频同步
'-threads count' 设置线程个数
'-autoexit' 播放完成后自动退出
'-exitonkeydown' 任意键按下时退出
'-exitonmousedown' 任意鼠标按键按下时退出
'-acodec codec_name' 强制指定音频解码器为 "codec_name"
'-vcodec codec_name' 强制指定视频解码器为 "codec_name"
'-scodec codec_name' 强制指定字幕解码器为 "codec_name"
3. 一些快捷键
'q, ESC' 退出
'f' 全屏
'p, SPC' 暂停
'w' 切换显示模式(视频/音频波形/音频频带)
's' 步进到下一帧
'left/right' 快退/快进 10 秒
'down/up' 快退/快进 1 分钟
'page down/page up' 跳转到前一章/下一章(如果没有章节,快退/快进 10 分钟)
'mouse click' 跳转到鼠标点击的位置(根据鼠标在显示窗口点击的位置计算百分比)
播放音频文件的命令:
ffplay shy.mp3
这时候就会弹出来一个窗口,一边播放MP3文件,一边将播放音频的图画到该窗口上。针对该窗口的操作如下:
播放视频文件的命令:
ffplay pm.mp4
这时候,就会在新弹出的窗口上播放该视频了。
ffplay pm.mp4 -loop 10
上述命令代表播放视频结束之后会从头再次播放,共循环播放10次。
ffplay -autoexit pm.mp4
ffplay -x 320 -y 240 pm.mp4
ffplay -window_title myplayer -loop 2 pm.mp4
ffplay -f s16le -ar 32000 -ac 2 test.pcm
ffplay也是一个视频播放器,所以不得不提出来的一个问题是:音画同步。ffplay的音画同步的实现方式其实有三种,分别是:以音频为主时间轴作为同步源,以视频为主时间轴作为同步源,以外部时钟为主时间轴作为同步源。
下面就以音频为主时间轴来作为同步源来作为案例进行讲解,而且ffplay默认也是以音频为基准进行对齐的,那么以音频作为对齐基准是如何实现的呢?
首先需要说明的是,播放器接收到的视频帧或者音频帧,内部都是会有时间戳(PTS时钟)来标识它实际应该在什么时刻展示,实际的对齐策略如下:比较视频当前的播放时间和音频当前的播放时间,如果视频播放过快,则通过加大延迟或者重复播放来降低视频播放速度,如果视频播放满了,则通过减小延迟或者丢帧来追赶音频播放的时间点。关键就在于音视频时间的比较和延迟的计算,当前在比较的过程中会设置一个阈值,如果超过预设的阈值就应该作出调整(丢帧或者重复渲染),这就是整个对齐策略。
在使用ffplay的时候,我们可以明确的指定使用那种对齐方式,比如:
ffplay pm.mp4 -sync audio
上面这个命令显式的指定了使用以音频为基准进行音视频同步的方式播放视频文件,当然这也是ffplay的默认播放设置。
ffplay pm.mp4 -sync video
上面这个命令显式的指定了使用以视频为基准进行音视频同步的方式播放视频文件。
ffplay pm.mp4 -sync ext
上面这个命令显式的指定了使用外部时钟为基准进行音视频同步的方式播放视频文件。
一、主要选项说明:
-x width 强制显示宽带。
-y height 强制显示高度。
-s size 帧尺寸 设置显示帧存储(WxH格式),仅适用于类似原始YUV等没有包含帧大小(WxH)的视频。该参数已经被废弃,请尝试用-video_size代替
-fs 以全屏模式启动。
-an 禁用音频(不播放声音)
-vn 禁用视频(不播放视频)
-sn 禁用字幕(不显示字幕)
-ss pos 根据设置的秒进行定位拖动,注意时间单位:比如'55' 55 seconds, '12:03:45' ,12 hours, 03 minutes and 45 seconds, '23.189' 23.189 second
-t duration 设置播放视频/音频长度,时间单位如 -ss选项
-bytes 按字节进行定位拖动。
-seek_interval interval 自定义左/右键定位拖动间隔(以秒为单位),默认值为10秒
-nodisp 关闭图形化显示窗口,视频将不显示
-noborder 无边框窗口
-volume vol 设置起始音量。音量范围[0 ~100]
-f fmt 强制使用设置的格式进行解析。比如-f s16le
-window_title title 设置窗口标题(默认为输入文件名)
-loop number 设置播放循环次数
-showmode mode 设置显示模式,可用的模式值:0 显示视频,1 显示音频波形,2 显示音频频谱。缺省为0,如果视频不存在则自动选择2
-vf filtergraph 设置视频滤镜
-af filtergraph 设置音频滤镜
二、高级选项说明
-pix_fmt format 格式设置像素格式。此选项已被弃用,有利于私有选项,try -pixel_format
-stats 打印多个回放统计信息,包括显示流持续时间,编解码器参数,流中的当前位置,以及音频/视频同步差值。默认情况下处于启用状态,要显式禁用它则需要指定-nostats。
-fast 非标准化规范的多媒体兼容优化
-genpts 生成pts。
-sync type 同步类型 将主时钟设置为audio(type=audio),video(type=video)或external(type=ext),默认是音频为主时钟。
-ast audio_stream_specifier 指定音频流索引,比如-ast 3,播放流索引为3的音频流
-vst video_stream_specifier 指定视频流索引,比如-vst 4,播放流索引为4的视频流
-sst subtitle_stream_specifier 指定字幕流索引,比如-sst 5,播放流索引为5的字幕流
-autoexit 视频播放完毕后退出。
-exitonkeydown 键盘按下任何键退出播放
-exitonmousedown 鼠标按下任何键退出播放
-codec:media_specifier codec_name 强制使用设置的多媒体解码器,media_specifier可用值为a(音频), v(视频)和s字幕。比如-codec:v h265 强制视频采用h265解码
-acodec codec_name 强制使用设置的音频解码器进行音频解码
-vcodec codec_name 强制使用设置的视频解码器进行视频解码
-scodec codec_name 强制使用设置的字幕解码器进行字幕解码
-autorotate 根据文件元数据自动旋转视频。默认情况下启用,若需禁用则使用-noautorotate
-framedrop 如果视频不同步则丢弃视频帧。当主时钟非视频时钟时默认开启。若需禁用则使用 -noframedrop
-infbuf 不限制输入缓冲区大小。尽可能快地从输入中读取尽可能多的数据。播放实时流时默认启用,如果未及时读取数据,则可能会丢弃数据。此选项将不限制缓冲区的大小。若需禁用则使用-noinfbuf
三、播放控制选项说明
q, ESC 退出播放
f 全屏切换
p, SPC 暂停
m 静音切换
9, 0 9减少音量,0增加音量
/, * /减少音量,*增加音量
a 循环切换音频流
v 循环切换视频流
t 循环切换字幕流
c 循环切换节目
w 循环切换过滤器或显示模式
s 逐帧播放
left/right 向后/向前拖动10秒
down/up 向后/向前拖动1分钟
page down/page up 拖动上一个/下一个。或者如果没有章节向后/向前拖动10分钟。
鼠标右键单击 拖动与显示宽度对应百分比的文件进行播放
鼠标左键双击 全屏切换
四、常用命令说明
1、播放视频
ffplay -i test.mp4 (-i指输入源)
2、带title播放固定时间点的视频
ffplay -window_title "test" -ss 2 -t 10 -autoexit test.mp4 (-window_title 设置title -ss设置起始播放时间点,单位:s,-t 设置播放总时长,单位:s)
3、播放器网络视频
ffplay "http://bestvepg.itv.cmvideo.cn:8086/APPService/live/cctv3.m3u8?livemode=1&STBID=01234567890" (注:网络url最好用“”,否则ffplay遇到中间某些字符将阻断完整的url)
4、使用强制解码器播放
ffplay test.mp4 -vcodec mpeg4 (强制使用mpeg4解码器进行解码)
5、播放时静帧音频,只播放视频
ffplay test.mp4 -an
6、播放是静止视频,只播放音频
ffplay test.mp4 -vn
7、播放YUV数据
ffplay -pixel_format yuv420p -video_size 720x480 -framrate 25 yuv420p_test.yuv (-pix_fromate 制定像素格式为yuv420p)
8、播放RGB数据
ffplay -pixel_format rgb24 -video_size 720x480 -framerate 25 rgb24_test.rgb
9、播放pcm数据
ffplay -ar 48000 -ac 2 -f f32le 48000_2_f32le.pcm (-ar 设定采样率 -ac 设定通道数 -f f32le 强制使用设定的格式进行解析)
10、过滤器
1、视频过滤器
1)视频旋转播放
ffplay test.mp4 -vf transpose=1 (0:逆时针旋转90°然后垂直翻转;;1:顺时针旋转90°;2:逆时针旋转90°;3:顺时针旋转90°然后水平翻转)
2)视频水平翻转播放
ffplay test.mp4 -vf hflip
3)视频垂直翻转播放
ffplay test.mp4 -vf vflip
4)视频水平翻转,并且再顺时针旋转90度播放
ffplay test.mp4 -vf transpose=1,hflip
2、音频过滤器
1)音频变速播放
ffplay test.mp4 -af atempo=2 (atempo的范围【0.5, 2】)
2)视频变速播放
ffplay test.mp4 -vf setpts=0.5 * PTS (setpts的范围是【0.25,4】)
3)音视频同时变速播放
ffplay test.mp4 -vf setpts=PTS/2 -af atempo=2
//在视频左上角添加文字
ffmpeg.exe -i test.flv -filter_complex drawtext="fontfile=corbel.ttf:text='Yeah text':fontsize=50:fontcolor=white" test_filter_text.flv
//在视频中间添加图片logo
ffmpeg.exe -i test.flv -i pic.png -filter_complex overlay=(main_w-overlay_w-10)/2:(main_h-overlay_h-10)/2 test_filter.flv
//将视频每秒(帧率每秒一帧)截图并以frame-001.jpeg frame-002.jpg方式保存
ffmpeg.exe -i test.flv -r 1 -f image2 frame-%03d.jpeg
//将视频第5秒的图像截图并保存为screenshot.jpeg文件
ffmpeg.exe -i test.flv -r 1 -ss 5 -t 1 -f image2 screenshot.jpeg
//从视频第3秒开始剪切,持续4秒,并保存文件
ffmpeg.exe -ss 00:00:03 -t 00:00:04 -i test.flv -vcodec copy -acodec copy test_cut.flv
//以每秒1帧的帧率将frame-*.jpeg的序列图片合并成视频(windows下使用括号内的方式)
ffmpeg -f image2 -pattern_type glob -framerate 1 -i 'frame-*.jpeg' test_compose_image.flv
(
ffmpeg.exe -f image2 -framerate 1 -i frame-%03d.jpeg test_compose_image.flv
注:-pattern_type glob requires glob.h. glob is defined in the POSIX standard and it's not available on Windows by default.
Create/rename your files using sequential file naming image###.jpg then use sequence wildcards like -i image%03d.jpg as input.
)
//显示文件流中tag并以json格式输出
ffprobe -print_format json -show_entries stream_tags:format_tags test.flv
//以宽320高240的窗口大小打开视频
ffplay.exe -x 320 -y 240 test.flv
//打开视频,播放完后自动退出
ffplay.exe -autoexit test.flv
//以指定标题打开窗口播放视频,并循环播放2遍
ffplay.exe -window_title "我是标题" -loop 2 test.mp4
//播放 双通道 32K 的 PCM 音频数据
ffplay.exe -f s16le -ar 32000 -ac 2 test.pcm
//将视频以音频波形可视化显示出来
ffplay.exe -i test.flv -showmode 1
//为视频添加字幕(通过滤镜方式)
ffplay.exe -i test.flv -vf subtitles=test.srt