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的操做,看看不一樣的對齊策略對最終的播放會產生什麼樣的影響。

相關文章
相關標籤/搜索