FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay

1、简述

ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器。html

在使用ffplay以前必需要安装到系统中,MAC的安装教程为:http://www.cnblogs.com/renhui/p/8458150.html框架

2、命令格式

在安装了在命令行中输入以下格式的命令:ide

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'       跳转到鼠标点击的位置(根据鼠标在显示窗口点击的位置计算百分比)

3、ffplay 播放音频

播放音频文件的命令:oop

ffplay shy.mp3

这时候就会弹出来一个窗口,一边播放MP3文件,一边将播放音频的图画到该窗口上。针对该窗口的操做以下:ui

  1. 点击该窗口的任意一个位置,ffplay会按照点击的位置计算出时间的进度,而后seek到计算出来的时间点继续播放。
  2. 按下键盘的左键默认快退10s,右键默认快进10s,上键默认快进1min,下键默认快退1min。
  3. 按ESC就退出播放进程,按W会绘制音频的波形图。
    相关效果图片以下:

3、ffplay 播放视频

播放视频文件的命令:命令行

ffplay pm.mp4

这时候,就会在新弹出的窗口上播放该视频了。线程

  1. 若是想要同时播放多个文件,只需在多个命令行下同时执行ffplay就能够了。
  2. 若是按s键就能够进入frame-step模式,即按s键一次就会播放下一帧图像。

5、ffplay 高级使用方式

1. 循环播放

ffplay pm.mp4 -loop 10

上述命令表明播放视频结束以后会从头再次播放,共循环播放10次。code

2. 播放 pm.mp4 ,播放完成后自动退出

ffplay -autoexit pm.mp4

3. 以 320 x 240 的大小播放 test.mp4

ffplay -x 320 -y 240 pm.mp4

4. 将窗口标题设置为 "myplayer",循环播放 2 次

ffplay -window_title myplayer -loop 2 pm.mp4

5. 播放 双通道 32K 的 PCM 音频数据

ffplay -f s16le -ar 32000 -ac 2 test.pcm

6、ffplay音画同步

ffplay也是一个视频播放器,因此不得不提出来的一个问题是:音画同步。ffplay的音画同步的实现方式其实有三种,分别是:以音频为主时间轴做为同步源,以视频为主时间轴做为同步源,之外部时钟为主时间轴做为同步源。视频

下面就以音频为主时间轴来做为同步源来做为案例进行讲解,并且ffplay默认也是以音频为基准进行对齐的,那么以音频做为对齐基准是如何实现的呢?xml

首先须要说明的是,播放器接收到的视频帧或者音频帧,内部都是会有时间戳(PTS时钟)来标识它实际应该在什么时刻展现,实际的对齐策略以下:比较视频当前的播放时间和音频当前的播放时间,若是视频播放过快,则经过加大延迟或者重复播放来下降视频播放速度,若是视频播放满了,则经过减少延迟或者丢帧来追赶音频播放的时间点。关键就在于音视频时间的比较和延迟的计算,当前在比较的过程当中会设置一个阈值,若是超过预设的阈值就应该做出调整(丢帧或者重复渲染),这就是整个对齐策略。

在使用ffplay的时候,咱们能够明确的指定使用那种对齐方式,好比:

ffplay pm.mp4 -sync audio

上面这个命令显式的指定了使用以音频为基准进行音视频同步的方式播放视频文件,固然这也是ffplay的默认播放设置。

ffplay pm.mp4 -sync video

上面这个命令显式的指定了使用以视频为基准进行音视频同步的方式播放视频文件。

ffplay pm.mp4 -sync ext

上面这个命令显式的指定了使用外部时钟为基准进行音视频同步的方式播放视频文件。

你们能够分别使用这三种方式进行播放,尝试听一听,作一些快进或者seek的操做,看看不一样的对齐策略对最终的播放会产生什么样的影响。

相关文章
相关标签/搜索