前言
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
是以下之一:視頻為v
或V
,音頻為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
的流,其id
為program_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_name 的muxer 的詳細信息。 使用'-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] 前綴。 這可以用作對數著色的替代方案,例如, 將日志轉儲到文件時。 |
標志也可以單獨使用,添加'+'/' - '
前綴來設置/重置單個標志,而不會影響其他標志或更改日志級別。 設置flags
和loglevel
時,最后一個標志值和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_NOCOLOR
或NO_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
這些選項由libavformat
,libavdevice
和libavcodec
庫直接提供。 要查看可用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>
切換全屏。