FFplay文檔解讀-1-語法,描述,選項

前言

Github地址:Github
簡書地址:簡書
專輯地址:FFplay專輯

1. 語法

ffplay [options] [‘input_url’]

使用ffplay和使用ffmpeg有一定的相似性,以ffplay開頭,之后便是相關的選項,這個在后面會有具體的介紹,最后便是需要播放視頻的地址,本地地址或者網絡地址。

2. 描述

FFplay是一個使用FFmpeg庫和SDL庫的非常簡單的便攜式媒體播放器。 它主要用作各種FFmpeg API的測試平臺。

3. 選項

如果沒有另外指定,所有數字選項接受表示數字作為輸入的字符串,其后可以跟隨SI單位前綴之一,例如:'K''M''G'

如果'i'被附加到SI單位前綴,則完整前綴將被解釋為二進制倍數的單位前綴,其基于1024的冪而不是1000的冪。將B加到SI單位前綴乘以 這允許使用例如:'KB''MiB''G''B'作為數字后綴。

不帶參數的選項是布爾選項,并將相應的值設置為true。 可以通過在選項名稱前加上no來將它們設置為false。 例如,使用-nofoo將名稱為foo的布爾選項設置為false

3.1流說明符

每個流應用一些選項,例如 比特率或編解碼器。 流指定符用于精確指定給定選項所屬的流。

流說明符是通常附加到選項名稱并通過冒號與其分隔的字符串。 例如。 -codec:a:1 ac3包含a:1流說明符,它與第二個音頻流匹配。 因此,它將為第二音頻流選擇ac3編解碼器。

流說明符可以匹配多個流,以便將選項應用于所有流。 例如。 -b:a 128k中的流說明符匹配所有音頻流。

空流說明符匹配所有流。 例如,-codec copy-codec:copy將復制所有流而無需重新編碼。

流說明符的可能形式是:

stream_index

使用此索引匹配流。 例如。 -threads:1 4將第二個流的線程數設置為4。

stream_type[:stream_index]

stream_type是以下之一:視頻為vV,音頻為a,副標題為s,數據為d,附件為t'v'匹配所有視頻流,'V'僅匹配未附加圖片,視頻縮略圖或封面藝術的視頻流。 如果給出stream_index,則它匹配此類型的流編號stream_index。 否則,它匹配此類型的所有流。

‘p:program_id[:stream_index] or p:program_id[:stream_type[:stream_index]] or’

p:program_id:m:key [:value]在第一個版本中,如果給出了stream_index,那么它將匹配程序中帶有編號為stream_index的流,其idprogram_id。 否則,它匹配程序中的所有流。 在第二個版本中,stream_type是以下之一:視頻'v',音頻'a',副標題's',數據'd'。 如果還給出了stream_index,則它在程序中使用id program_id匹配此類型的流編號stream_index。 否則,如果僅給出stream_type,則它將使用id program_id匹配程序中此類型的所有流。 在第三個版本中,程序中的流與id program_id匹配,元數據標記鍵具有指定值。 如果未給出value,則將包含給定標記的流與任何值進行匹配。

#stream_id or i:stream_id

通過流id匹配流(例如,MPEG-TS容器中的PID)。

m:key[:value]

使用具有指定值的元數據標記鍵匹配流。 如果未給出value,則將包含給定標記的流與任何值匹配。

u

匹配具有可用配置的流,必須定義編解碼器,并且必須存在諸如視頻維度或音頻采樣率之類的基本信息。

請注意,在ffmpeg中,按元數據匹配僅適用于輸入文件。

3.2通用選項

這些選項在ff*工具中共享。

 -L

顯示許可證。

-h, -?, -help, --help [arg]

顯示幫助。 可以指定可選參數以打印關于特定項目的幫助。 如果未指定參數,則僅顯示基本(非高級)工具選項。

arg的可能值如下:

???????值?????? 解釋
long 除基本工具選項外,還可以打印高級工具選項。
full 打印完整的選項列表,包括編碼器,解碼器,分路器,復用器,濾波器等的共享和專用選項。
decoder=decoder_name 打印有關名為decoder_name的解碼器的詳細信息。 使用'-decoders'選項獲取所有解碼器的列表。
encoder=encoder_name 打印有關名為encoder_name的編碼器的詳細信息。 使用'-encoders'選項獲取所有編碼器的列表。
demuxer=demuxer_name 打印有關名為demuxer_name的分離器的詳細信息。 使用'-formats'選項獲取所有解復用器和復用器的列表。
muxer=muxer_name 打印有關名為muxer_namemuxer的詳細信息。 使用'-formats'選項獲取所有復用器和解復用器的列表。
filter=filter_name 打印有關過濾器名稱filter_name的詳細信息。 使用'-filters'選項獲取所有過濾器的列表。
-version

顯示版本信息

-formats

顯示可用設備。

-codecs

顯示libavcodec已知的所有編解碼器。

請注意,本文檔中使用術語’codec’作為更正確稱為媒體比特流格式的快捷方式。

-decoders

顯示可用的解碼器。

-encoders

顯示所有可用的編碼器。

-bsfs

顯示可用的比特流過濾器。

-protocols

顯示可用的協議。

-filters

顯示可用的libavfilter過濾器。

-pix_fmts

顯示可用的像素格式。

-sample_fmts

顯示可用的樣本格式。

-layouts

顯示頻道名稱和標準頻道布局。

-colors

顯示已識別的顏色名稱。

-sources device[,opt1=val1[,opt2=val2]...]

顯示輸入設備的自動檢測源。 某些設備可能提供無法自動檢測的系統相關源名稱。 不能假定返回的列表總是完整的。

示例代碼
ffmpeg -sources pulse,server=192.168.0.4
-sinks device[,opt1=val1[,opt2=val2]...]

顯示輸出設備的自動檢測接收器。 某些設備可能提供無法自動檢測的與系統相關的接收器名稱。 不能假定返回的列表總是完整的。

示例代碼
ffmpeg -sinks pulse,server=192.168.0.4
-loglevel [flags+]loglevel | -v [flags+]loglevel

設置庫使用的日志記錄級別和標志。

可選的標志前綴可以包含以下值:

??值?? 解釋
‘repeat’ 表示不應將重復日志輸出壓縮到第一行,并且將省略最后重復消息n次行。
‘level’ 表示日志輸出應為每個消息行添加[level]前綴。 這可以用作對數著色的替代方案,例如, 將日志轉儲到文件時。

標志也可以單獨使用,添加'+'/' - '前綴來設置/重置單個標志,而不會影響其他標志或更改日志級別。 設置flagsloglevel時,最后一個標志值和loglevel之間應該有一個'+'分隔符。

loglevel是一個字符串或包含以下值之一的數字:

???值??? 解釋
‘quiet, -8’ 什么都不顯示; 靜音。
‘panic, 0’ 僅顯示可能導致進程崩潰的致命錯誤,例如斷言失敗。 目前還沒有用于任何目的。
‘fatal, 8’ 只顯示致命錯誤。 這些是錯誤,在此之后該過程絕對無法繼續。
‘error, 16’ 顯示所有錯誤,包括可以從中恢復的錯誤。
‘warning, 24’ 顯示所有警告和錯誤。 將顯示與可能不正確或意外事件相關的任何消息。
‘info, 32’ 在處理過程中顯示信息性消息。 這是警告和錯誤的補充。 這是默認值。
‘verbose, 40’ info相同,只是更詳細了一些
‘debug, 48’ 顯示所有內容,包括調試信息。
‘trace, 56’

例如,要啟用重復日志輸出,請添加級別前綴,并為loglevel設置verbose

示例代碼
ffmpeg -loglevel repeat+level+verbose -i input output

另一個允許重復日志輸出而不影響級別前綴標志或loglevel的當前狀態的示例:

示例代碼
ffmpeg [...] -loglevel +repeat

默認情況下,程序會記錄到stderr。 如果終端支持著色,則使用顏色標記錯誤和警告。 可以禁用日志著色設置環境變量AV_LOG_FORCE_NOCOLORNO_COLOR,也可以強制設置環境變量AV_LOG_FORCE_COLOR。 不推薦使用環境變量NO_COLOR,將在以后的FFmpeg版本中刪除。

-report

將完整命令行和控制臺輸出轉儲到當前目錄中名為program-YYYYMMDD-HHMMSS.log的文件。 此文件可用于錯誤報告。 它還暗示-loglevel verbose

將環境變量FFREPORT設置為任何值具有相同的效果。 如果值為':' - 分隔鍵=值序列,則這些選項將影響報告; 如果選項值包含特殊字符或選項分隔符':',則必須對其進行轉義(請參閱ffmpeg-utils手冊中的“引用和轉義”部分)。

可識別以下選項:

?值? 解釋
‘file’ 設置用于報告的文件名; %p擴展為程序名稱,%t擴展為時間戳,%%擴展為普通%
‘level’ 使用數值設置日志詳細級別(請參閱-loglevel)。

例如,要使用日志級別32(日志級別信息的別名)將報告輸出到名為“ffreport.log”的文件:

示例代碼
FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output

解析環境變量時的錯誤不是致命的,并且不會出現在報告中。

-hide_banner

禁止打印橫幅。

所有FFmpeg工具通常都會顯示版權聲明,構建選項和庫版本。 此選項可用于禁止打印此信息。

-cpuflags flags (global)

允許設置和清除cpu標志。 此選項用于測試。 除非你知道自己在做什么,否則不要使用它。

ffmpeg -cpuflags -sse+mmx ...
ffmpeg -cpuflags mmx ...
ffmpeg -cpuflags 0 ...

此選項的可能標志是:

 x86
x86
mmx
‘mmxext’
‘sse’
‘sse2’
‘sse2slow’
‘sse3’
‘sse3slow’
‘ssse3’
‘atom’
‘sse4.1’
‘sse4.2’
‘avx’
‘avx2’
‘xop’
‘fma3’
‘fma4’
‘3dnow’
‘3dnowext’
‘bmi1’
‘bmi2’
‘cmov’
ARM
‘ARM’
‘armv5te’
‘armv6’
‘armv6t2’
‘vfp’
‘vfpv3’
‘neon’
‘setend’
AArch64
‘AArch64’
‘armv8’
‘vfp’
‘neon’
PowerPC
‘PowerPC’
‘altivec’
Specific Processors
‘Specific Processors’
‘pentium2’
‘pentium3’
‘pentium4’
‘k6’
‘k62’
‘athlon’
‘athlonxp’
‘k8’

3.3 AVOptions

這些選項由libavformatlibavdevicelibavcodec庫直接提供。 要查看可用AVOptions列表,請使用-help選項。 它們分為兩類:

選項 解釋
‘generic’ 可以為任何容器,編解碼器或設備設置這些選項。 通用選項列在容器/設備的AVFormatContext選項下,以及編解碼器的AVCodecContext選項下。
‘private’ 這些選項特定于給定的容器,設備或編解碼器。 私有選項列在其相應的容器/設備/編解碼器下。

例如,要將ID3v2.3標頭而不是默認ID3v2.4寫入MP3文件,請使用MP3 muxer的“id3v2_version”私有選項:

示例代碼
ffmpeg -i input.flac -id3v2_version 3 out.mp3

所有編解碼器AVOptions都是每個流,因此應該將流說明符附加到它們。

注意:'-nooption'語法不能用于 boolean類型的 AVOptions,請使用'-option 0'/' - option 1'

注意:通過將v / a / s添加到選項名稱來指定每個流AVOptions的舊的未記錄方式現在已過時,很快就會被刪除。

3.4 Main options

-x width

強制顯示寬度。

-y height

強制顯示高度。

-s size

設置不包含具有原始YUV的幀大小的標題的視頻所需的幀大小(WxH或縮寫)。 此選項已被棄用,有利于私有選項,請嘗試-video_size

-fs

以全屏模式啟動。

-an

禁用音頻。

-vn

禁用視頻。

-sn

禁用字幕。
-ss pos’

尋求pos。 請注意,在大多數格式中,不可能完全搜索,因此ffplay將尋找到最近的搜索點到pos

pos必須是持續時間規范,詳情參見:(ffmpeg-utils)time duration syntax

-t duration

播放音頻/視頻的持續時間。

duration必須是持續時間規范,請參閱 (ffmpeg-utils)time duration syntax

-bytes

按字節搜索。

-nodisp

禁用圖形顯示。

-noborder

無邊框窗口。

-volume

設置啟動卷。 0表示靜音,100表示無音量減小或放大。 負值被視為0,大于100的值被視為100。

-f fmt

強制格式。

-window_title title

設置窗口標題(默認為輸入文件名)。

-loop number

循環播放電影<number>次。 0意味著無限循環。

-showmode mode

設置要使用的節目模式。 模式的可用值為:

可用的模式 解釋
‘0, video’ 顯示視頻
‘1, waves’ 顯示音頻波
‘2, rdft’ 使用RDFT((反向)實離散傅立葉變換)顯示音頻頻段

??默認值為video,如果視頻不存在或無法播放,則自動選擇rdft

??可以通過按<w>鍵以交互方式循環顯示可用的顯示模式。

-vf filtergraph

創建filtergraph指定的filtergraph并使用它來過濾視頻流。

filtergraph是要應用于流的filtergraph的描述,并且必須具有單個視頻輸入和單個視頻輸出。 在filtergraph中,輸入與標簽輸入相關聯,輸出與標簽輸出相關聯。 有關filtergraph語法的更多信息,請參閱ffmpeg-filters手冊。

可以多次指定此參數,并通過按鍵<w>循環顯示指定的濾波器圖形以及顯示模式。

-af filtergraph

filtergraph是要應用于輸入音頻的filtergraph的描述。 使用選項“-filters”顯示所有可用的過濾器(包括源和接收器)。

-i input_url

閱讀input_url

3.5 Advanced options

-pix_fmt format

設置像素格式。 此選項已被棄用,有利于私有選項,try -pixel_format

-stats

打印多個回放統計信息,特別是顯示流持續時間,編解碼器參數,流中的當前位置以及音頻/視頻同步漂移。 默認情況下,要顯式禁用它,您需要指定-nostats

-fast

不符合規范的優化。

-genpts

生成pts。
-sync type’
將主時鐘設置為音頻(類型=音頻),視頻(類型=視頻)或外部(類型= ext)。 默認是音頻。 主時鐘用于控制音頻 - 視頻同步。 大多數媒體播放器使用音頻作為主時鐘,但在某些情況下(流媒體或高質量廣播),有必要改變它。 此選項主要用于調試目的。

-ast audio_stream_specifier

使用給定的流說明符選擇所需的音頻流。 Stream說明符章節中描述了流說明符。 如果未指定此選項,則在已選擇的視頻流的節目中選擇“最佳”音頻流。

-vst video_stream_specifier

使用給定的流說明符選擇所需的視頻流。 Stream說明符章節中描述了流說明符。 如果未指定此選項,則選擇“最佳”視頻流。

-sst subtitle_stream_specifier

使用給定的流說明符選擇所需的字幕流。 Stream說明符章節中描述了流說明符。 如果未指定該選項,則在已選擇的視頻或音頻流的節目中選擇“best”字幕流。

-autoexit

視頻播放完畢后退出。

-exitonkeydown

如果按任何鍵,則退出。

-exitonmousedown

如果按下任何鼠標按鈕,則退出。

-codec:media_specifier codec_name

強制由media_specifier標識的流的特定解碼器實現,其可以假設值a(音頻),v(視頻)和s字幕。

-acodec codec_name

強制特定的音頻解碼器。

-vcodec codec_name

強制特定的視頻解碼器。

-scodec codec_name

強制使用特定的字幕解碼器。

-autorotate

根據文件元數據自動旋轉視頻。 默認情況下啟用,使用'-noautorotate'禁用它。

-framedrop

如果視頻不同步,則丟棄視頻幀。 如果主時鐘未設置為視頻,則默認啟用。 使用此選項為所有主時鐘源啟用幀丟棄,使用'-noframedrop'禁用它。

-infbuf

不要限制輸入緩沖區大小,盡快從輸入中讀取盡可能多的數據。 默認情況下為實時流啟用,如果未及時讀取數據,則可能會丟棄數據。 使用此選項為所有輸入啟用無限緩沖區,使用'-noinfbuf'禁用它。

3.6 While playing

<q, ESC>

退出。

<f>

切換全屏。

<p, SPC>

暫停。

<m>

切換靜音。

<9, 0>

分別減少和增加音量。

</, *>

分別減少和增加音量。

<a>

在當前程序中循環音頻通道。

<v>

循環視頻頻道。

<t>

在當前程序中循環字幕通道。

<c>

循環計劃。

<w>

循環視頻過濾器或顯示模式。

<s>

步入下一幀。

如果流尚未暫停,則暫停,跳到下一個視頻幀,然后暫停。

<left/right>

向后/向前10秒。

<down/up>

向后/向前1分鐘。

<page down/page up>

尋求上一個/下一個章節。 或者如果沒有章節向后/向前10分鐘。

<right mouse click>

尋找與寬度分數對應的文件中的百分比。

<left mouse double-click>

切換全屏。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。