轉載自:http://www.it165.net/os/html/201404/7862.html
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 將拷貝所有的流,而不會對它們重新編碼。
可能的流指示符的形式:
‘stream_index’ 匹配具有該索引值的流。例如:-threads:1 4 將為第二個流設定線程數為4。‘stream_type[:stream_index]’ stream_type 是下面的其中之一:’v’ 視頻, ’a’ 音頻, ’s’ 字幕, ’d’ 資料, ’t’ 附件。如果給定 stream_index ,它將匹配該類型下的索引號為 stream_index 的流,否則,它將匹配該類型的所有流。‘p:program_id[:stream_index]’ 如果給定 stream_index ,它將匹配 id 為 program_id 的 program 下的索 引號為 stream_index 的流,否則,它將匹配該 program 下的所有流。‘#stream_id or i:stream_id’ 使用流 id 進行匹配(例如:MPEG-TS 容器中的 PID )
3.2 通用選項
ff* 工具的通用選項是共用的。(FFplay)
‘-L’ 顯示 license‘-h, -?, -help, --help [arg]’ 列印協助資訊;可以指定一個參數 arg ,如果不指定,只列印基本選項 可選的 arg 選項: ‘long’ 除基本選項外,還將列印進階選項 ‘full’ 列印一個完整的選項列表,包含 encoders, decoders, demuxers, muxers, filters 等的 共用以及私人選項 ‘decoder=decoder_name’ 列印名稱為 “decoder_name” 的解碼器的詳細資料 ‘encoder=encoder_name’ 列印名稱為 “encoder_name” 的編碼器的詳細資料 ‘demuxer=demuxer_name’ 列印名稱為 “demuxer_name” 的 demuxer 的詳細資料 ‘muxer=muxer_name’ 列印名稱為 “muxer_name” 的 muxer 的詳細資料 ‘filter=filter_name’ 列印名稱為 “filter_name” 的過濾器的詳細資料 ‘-version’ 顯示版本資訊‘-formats’ 顯示有效格式‘-codecs’ 顯示 libavcodec 已知的所有轉碼器‘-decoders’ 顯示有效解碼器‘-encoders’ 顯示有效編碼器‘-bsfs’ 顯示有效位元流過濾器‘-protocols’ 顯示有效協議‘-filters’ 顯示 libavfilter 有效過濾器‘-pix_fmts’ 顯示有效像素格式 ‘-sample_fmts’ 顯示有效採樣格式‘-layouts’ 顯示通道名稱以及標準通道布局‘-colors’ 顯示認可的顏色名稱‘-hide_banner’ 禁止列印歡迎語;也就是禁止預設會顯示的著作權資訊、編譯選項以及庫版本資訊等
3.3 一些主要選項
‘-f format’ 強制使用的格式‘-unit’ 顯示值的單位‘-prefix’ 顯示的值使用標準國際單位制詞頭‘-byte_binary_prefix’ 對位元組值強制使用二進位首碼‘-sexagesimal’ 時間值使用六十進位的格式 HH:MM:SS.MICROSECONDS‘-pretty’ 美化顯示值的格式。它相當於 "-unit -prefix -byte_binary_prefix -sexagesimal"‘-of, -print_format writer_name[=writer_options]’ 設定輸出列印格式。writer_name 指定列印程式 (writer) 的名稱,writer_options 指定傳遞給 writer 的選項。例如:將輸出列印為 JSON 格式:-print_format json ‘-select_streams stream_specifier’ 只選擇 stream_specifier 指定的流。該選項隻影響那些與流相關的選項 (例如:show_streams, show_packets, 等)。 舉例:只顯示音頻流,使用命令: ffprobe -show_streams -select_streams a INPUT‘-show_data’ 顯示有效載荷資料,以十六進位和ASCII轉儲。與 ‘-show_packets’ 結合使用,它將 dump 包資料;與 ‘-show_streams’ 結合使用,它將 dump codec 附加資料。‘-show_error’ 顯示探測輸入檔案時的錯誤資訊‘-show_format’ 顯示輸入多媒體流的容器格式資訊‘-show_packets’ 顯示輸入多媒體流中每一個包的資訊‘-show_frames’ 顯示輸入多媒體流中的每一幀以及字幕的資訊‘-show_streams’ 顯示輸入多媒體流中每一個流的資訊‘-show_programs’ 顯示輸入多媒體流中程式以及它們的流的資訊‘-show_chapters’ 顯示格式中儲存的章節資訊‘-count_frames’ 計算每一個流中的幀數,在相應的段中進行顯示‘-count_packets’ 計算每一個流中的包數,在相應的段中進行顯示‘-show_program_version’ 顯示程式版本及配置相關資訊‘-show_library_versions’ 顯示庫版本相關資訊‘-show_versions’ 顯示程式和庫版本相關資訊。相當於同時設定‘-show_program_version’ 和 ‘-show_library_versions’‘-i input_file’ 指定輸入檔案
4. 列印程式(Writers)
一個 writer 定義了 ffprobe 所使用的輸出格式。
它可以接受一個或多個參數,這些參數以 key=value 的形式指定,以“:”分隔。所有的 writers 都支援以下選項:
‘string_validation, sv’ 設定字串驗證模式 它可以接受以下值:(預設為 replace) ‘fail’ 當發現無效字串(UTF-8)序列或代碼點時,立即失敗。這個對於驗證輸入 metadata 非常有用。 ‘ignore’ 任何驗證錯誤都將被忽略。 ‘replace’ writer 將使用 ‘string_validation_replacement’ 所指定的字串替代無效的UTF-8序列或者代碼點。‘string_validation_replacement, svr’ 設定替代字串,當 ‘string_validation’ 設定為 ‘replace’ 時使用。
以下為目前可以使用的 writers :
4.1 default 預設格式。按照以下形式列印每個 section : [SECTION] key1=val1 ... keyN=valN [/SECTION]4.2 compact, csv 緊湊與CSV格式。每個 section 列印在一個單獨的行。如果不指定其他選項,其輸入格式如下: section|key1=val1| ... |keyN=valN4.3 Flat 一種自由格式輸出,每一行包含一個明確的 key=value 對。4.4 ini INI 格式輸出。4.5 json JSON 格式輸出。每一個 section 使用 JSON 符號來列印。4.6 xml XML 格式輸出。各 writer 可接受的選項,請查閱 ffprobe 文檔
5. ffprobe 使用樣本
1) 最簡單的使用方式 ffprobe test.mp42) 不顯示歡迎資訊 ffprobe -hide_banner test.mp43) 以 JSON 格式顯示每個流的資訊 ffprobe -print_format json -show_streams test.mp44) 顯示容器格式相關資訊 ffprobe -show_format test.mp4
更多 ffprobe 選項,可以使用 ffprobe -h 擷取