1. ffprobe 是什么 ?
簡單的說,ffprobe 是一個多媒體流分析工具。它從多媒體流中收集信息,並且以人類和機器可讀的形式打印出來。
它可以用來檢測多媒體流的容器類型,以及每一個多媒體流的格式和類型。它可以作為一個獨立的應用來使用,也可以結合文本過濾器執行更復雜的處理。
2. ffprobe 的使用方式
命令行: ffprobe [選項] [‘輸入文件’]
3. ffprobe 可使用的選項
3.1 流指示符
流指示符用來精確的指定一個給定的選項是屬於哪個(些)流。
一個流指示符通常是一個字符串附加到一個選項名的后面,並且以“:”進行分割。例如:-codec:a:1 ac3 包含流指示符 a:1 ,它將匹配第二個音頻流。因此,它將為第二個音頻流指定 ac3 codec。
一個流指示符可以匹配多個流,這樣,給定的選項會被應用到所有的匹配流上。例如:-b:a 128k 中的流指示符將匹配所有的音頻流。
一個空流指示符將匹配所有的流。例如:-codec copy 或 -codec: copy 將拷貝所有的流,而不會對它們重新編碼。
可能的流指示符的形式:
01.
‘stream_index’ 匹配具有該索引值的流。例如:-threads:1 4 將為第二個流設置線程數為4。
02.
‘stream_type[:stream_index]’
03.
stream_type 是下面的其中之一:’v’ 視頻, ’a’ 音頻, ’s’ 字幕, ’d’ 數據,
04.
’t’ 附件。如果給定 stream_index ,它將匹配該類型下的索引號為
05.
stream_index 的流,否則,它將匹配該類型的所有流。
06.
‘p:program_id[:stream_index]’
07.
如果給定 stream_index ,它將匹配 id 為 program_id 的 program 下的索
08.
引號為 stream_index 的流,否則,它將匹配該 program 下的所有流。
09.
‘#stream_id or i:stream_id’ 使用流 id 進行匹配(例如:MPEG-TS 容器中的 PID )
3.2 通用選項
ff* 工具的通用選項是共享的。(FFplay)
01.
‘-L’ 顯示 license
02.
‘-h, -?, -help, --help [arg]’ 打印幫助信息;可以指定一個參數 arg ,如果不指定,只打印基本選項
03.
可選的 arg 選項:
04.
‘long’ 除基本選項外,還將打印高級選項
05.
‘full’ 打印一個完整的選項列表,包含 encoders, decoders, demuxers, muxers, filters 等的
06.
共享以及私有選項
07.
‘decoder=decoder_name’ 打印名稱為 “decoder_name” 的解碼器的詳細信息
08.
‘encoder=encoder_name’ 打印名稱為 “encoder_name” 的編碼器的詳細信息
09.
‘demuxer=demuxer_name’ 打印名稱為 “demuxer_name” 的 demuxer 的詳細信息
10.
‘muxer=muxer_name’ 打印名稱為 “muxer_name” 的 muxer 的詳細信息
11.
‘filter=filter_name’ 打印名稱為 “filter_name” 的過濾器的詳細信息
12.
13.
‘-version’ 顯示版本信息
14.
‘-formats’ 顯示有效的格式
15.
‘-codecs’ 顯示 libavcodec 已知的所有編解碼器
16.
‘-decoders’ 顯示有效的解碼器
17.
‘-encoders’ 顯示有效的編碼器
18.
‘-bsfs’ 顯示有效的比特流過濾器
19.
‘-protocols’ 顯示有效的協議
20.
‘-filters’ 顯示 libavfilter 有效的過濾器
21.
‘-pix_fmts’ 顯示有效的像素格式
22.
‘-sample_fmts’ 顯示有效的采樣格式
23.
‘-layouts’ 顯示通道名稱以及標准通道布局
24.
‘-colors’ 顯示認可的顏色名稱
25.
‘-hide_banner’ 禁止打印歡迎語;也就是禁止默認會顯示的版權信息、編譯選項以及庫版本信息等
3.3 一些主要選項
01.
‘-f format’ 強制使用的格式
02.
‘-unit’ 顯示值的單位
03.
‘-prefix’ 顯示的值使用標准國際單位制詞頭
04.
‘-byte_binary_prefix’ 對字節值強制使用二進制前綴
05.
‘-sexagesimal’ 時間值使用六十進位的格式 HH:MM:SS.MICROSECONDS
06.
‘-pretty’ 美化顯示值的格式。它相當於 "-unit -prefix -byte_binary_prefix -sexagesimal"
07.
‘-of, -print_format writer_name[=writer_options]’
08.
設置輸出打印格式。writer_name 指定打印程序 (writer) 的名稱,writer_options
09.
指定傳遞給 writer 的選項。例如:將輸出打印為 JSON 格式:-print_format json
10.
‘-select_streams stream_specifier’
11.
只選擇 stream_specifier 指定的流。該選項只影響那些與流相關的選項
12.
(例如:show_streams, show_packets, 等)。
13.
舉例:只顯示音頻流,使用命令:
14.
ffprobe -show_streams -select_streams a INPUT
15.
‘-show_data’ 顯示有效載荷數據,以十六進制和ASCII轉儲。與 ‘-show_packets’ 結合使用,它將
16.
dump 包數據;與 ‘-show_streams’ 結合使用,它將 dump codec 附加數據。
17.
‘-show_error’ 顯示探測輸入文件時的錯誤信息
18.
‘-show_format’ 顯示輸入多媒體流的容器格式信息
19.
‘-show_packets’ 顯示輸入多媒體流中每一個包的信息
20.
‘-show_frames’ 顯示輸入多媒體流中的每一幀以及字幕的信息
21.
‘-show_streams’ 顯示輸入多媒體流中每一個流的信息
22.
‘-show_programs’ 顯示輸入多媒體流中程序以及它們的流的信息
23.
‘-show_chapters’ 顯示格式中存儲的章節信息
24.
‘-count_frames’ 計算每一個流中的幀數,在相應的段中進行顯示
25.
‘-count_packets’ 計算每一個流中的包數,在相應的段中進行顯示
26.
‘-show_program_version’ 顯示程序版本及配置相關信息
27.
‘-show_library_versions’ 顯示庫版本相關信息
28.
‘-show_versions’ 顯示程序和庫版本相關信息。相當於同時設置‘-show_program_version’ 和
29.
‘-show_library_versions’
30.
‘-i input_file’ 指定輸入文件
4. 打印程序(Writers)
一個 writer 定義了 ffprobe 所使用的輸出格式。
它可以接受一個或多個參數,這些參數以 key=value 的形式指定,以“:”分隔。所有的 writers 都支持以下選項:
1.
‘string_validation, sv’ 設置字符串驗證模式
2.
它可以接受以下值:(默認為 replace)
3.
‘fail’ 當發現無效字符串(UTF-8)序列或代碼點時,立即失敗。這個對於驗證輸入 metadata 非常有用。
4.
‘ignore’ 任何驗證錯誤都將被忽略。
5.
‘replace’ writer 將使用 ‘string_validation_replacement’ 所指定的字符串替代無效的UTF-8序列或者代碼點。
6.
7.
‘string_validation_replacement, svr’ 設置替代字符串,當 ‘string_validation’ 設置為 ‘replace’ 時使用。
以下為目前可以使用的 writers :
01.
4.1 default
02.
默認格式。按照以下形式打印每個 section :
03.
[SECTION]
04.
key1=val1
05.
...
06.
keyN=valN
07.
[/SECTION]
08.
09.
4.2 compact, csv
10.
緊湊與CSV格式。每個 section 打印在一個單獨的行。如果不指定其他選項,其輸入格式如下:
11.
section|key1=val1| ... |keyN=valN
12.
13.
4.3 Flat
14.
一種自由格式輸出,每一行包含一個明確的 key=value 對。
15.
16.
4.4 ini
17.
INI 格式輸出。
18.
19.
4.5 json
20.
JSON 格式輸出。每一個 section 使用 JSON 符號來打印。
21.
22.
4.6 xml
23.
XML 格式輸出。
24.
25.
各 writer 可接受的選項,請查閱 ffprobe 文檔
5. ffprobe 使用示例
01.
1) 最簡單的使用方式
02.
ffprobe test.mp4
03.
04.
2) 不顯示歡迎信息
05.
ffprobe -hide_banner test.mp4
06.
07.
3) 以 JSON 格式顯示每個流的信息
08.
ffprobe -print_format json -show_streams test.mp4
09.
10.
4) 顯示容器格式相關信息
11.
ffprobe -show_format test.mp4
更多 ffprobe 選項,可以使用 ffprobe -h 獲取
