黃聰:FFmpeg 使用指南
阿新 • • 發佈:2017-07-01
留下 時間 下一個 pseudo rdquo tle 全局 什麽 實時
1. ffmpeg 是什麽?
ffmpeg(命令行工具) 是一個快速的音視頻轉換工具。
2. ffmpeg 的使用方式
命令行: ffmpeg [全局選項] {[輸入文件選項] -i ‘輸入文件’} ... {[輸出文件選項] ‘輸出文件’} ...
3. ffmpeg 可使用的選項
3.1 通用選項
ff* 工具的通用選項是共享的。(FFplayFFprobe)
‘-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.2 一些主要選項
‘-f fmt (input/output)’
強制輸入或輸出文件格式。通常,輸入文件的格式是自動檢測的,
輸出文件的格式是通過文件擴展名來進行猜測的,所有該選項大
多數時候不需要。
‘-i filename (input)’
輸入文件名
‘-y (global)’
覆蓋輸出文件而不詢問
‘-n (global)’
不覆蓋輸出文件,如果一個給定的輸出文件已經存在,則立即
退出
‘-c[:stream_specifier] codec (input/output,per-stream)’
‘-codec[:stream_specifier] codec (input/output,per-stream)’
為一個或多個流選擇一個編碼器(當使用在一個輸出文件之前時)
或者一個解碼器(當使用在一個輸入文件之前時)。codec 是一個
編碼器/解碼器名稱或者一個特定值“copy”(只適用輸出)。
‘-t duration (output)’
當到達 duration 時,停止寫輸出。
duration 可以是一個數字(秒),或者使用hh:mm:ss[.xxx]形式。
-to 和 -t 是互斥的,-t 優先級更高。
‘-to position (output)’
在 position 處停止寫輸出。
duration 可以是一個數字(秒),或者使用hh:mm:ss[.xxx]形式。
-to 和 -t 是互斥的,-t 優先級更高。
‘-fs limit_size (output)’
設置文件大小限制,以字節表示
‘-ss position (input/output)’
當作為輸入選項時(在 -i 之前),在輸入文件中跳轉到 position。
需要註意的是,在大多數格式中,不太可能精確的跳轉,因此,
ffmpeg 將跳轉到 position 之前最接近的位置。當進行轉碼
並且 ‘-accurate_seek’ 打開時(默認),位於跳轉點和 position
之間的額外部分將被解碼並且丟棄。當做流拷貝或者當使用
‘-noaccurate_seek’時,它將被保留下來。
當作為輸出選項時(在輸出文件名前),解碼但是丟棄輸入,直到
時間戳到達 position。
position 可以是秒或者 hh:mm:ss[.xxx] 形式
‘-itsoffset offset (input)’
設置輸入時間偏移。 offset 將被添加到輸入文件的時間戳。指定
一個正偏移,意味著相應的流將被延時指定時間。
‘-timestamp date (output)’
在容器中設置錄音時間戳
‘-metadata[:metadata_specifier] key=value (output,per-metadata)’
設置metadata key/value對
‘-target type (output)’
指定目標文件類型(vcd, svcd, dvd, dv, dv50)。
type 可以帶有 pal-, ntsc- 或 film- 前綴,以使用相應的標準。
所有的格式選項(bitrate, codecs, buffer sizes)將自動設定。
‘-dframes number (output)’
設置要錄制數據幀的個數。這是 -frames:d 的別名
‘-frames[:stream_specifier] framecount (output,per-stream)’
framecount 幀以後,停止寫流。
‘-q[:stream_specifier] q (output,per-stream)’
‘-qscale[:stream_specifier] q (output,per-stream)’
使用固定質量範圍(VBR)。
‘-filter[:stream_specifier] filtergraph (output,per-stream)’
創建filtergraph 指定的過濾圖,並使用它來過濾流。
‘-filter_script[:stream_specifier] filename (output,per-stream)’
該選項與‘-filter’相似,唯一的不同是,它的參數是一個存放
過濾圖的文件的名稱。
‘-pre[:stream_specifier] preset_name (output,per-stream)’
指定匹配流的預設
‘-stats (global)’
打印編碼進程/統計信息。默認打開,可以使用 -nostats 禁用。
‘-stdin’
開啟標準輸入交互。默認打開,除非標準輸入作為一個輸入。
可以使用 -nostdin 禁止。
‘-debug_ts (global)’
打印時間戳信息。默認關閉。
‘-attach filename (output)’
添加一個附件到輸出文件中
‘-dump_attachment[:stream_specifier] filename (input,per-stream)’
提取匹配的附件流到filename指定的文件中。
3.3 視頻選項
‘-vframes number (output)’
設置錄制視頻幀的個數。這是 -frames:v 的別名
‘-r[:stream_specifier] fps (input/output,per-stream)’
設置幀率(Hz 值, 分數或縮寫)
‘-s[:stream_specifier] size (input/output,per-stream)’
設置幀大小。格式為 ‘wxh’ (默認與源相同)
‘-aspect[:stream_specifier] aspect (output,per-stream)’
設置視頻顯示長寬比
‘-vn (output)’
禁止視頻錄制
‘-vcodec codec (output)’
設置視頻 codec。這是 -codec:v 的別名
‘-pass[:stream_specifier] n (output,per-stream)’
選擇pass number (1 or 2)。用來進行雙行程視頻編碼。
‘-passlogfile[:stream_specifier] prefix (output,per-stream)’
設置 two-pass 日誌文件名前綴,默認為“ffmpeg2pass”。
‘-vf filtergraph (output)’
創建 filtergraph 指定的過濾圖,並使用它來過濾流。
3.4 高級視頻選項
‘-pix_fmt[:stream_specifier] format (input/output,per-stream)’
設置像素格式。
‘-sws_flags flags (input/output)’
設置軟縮放標誌
‘-vdt n’
丟棄閾值
‘-psnr’
計算壓縮幀的 PSNR
‘-vstats’
復制視頻編碼統計信息到‘vstats_HHMMSS.log’
‘-vstats_file file’
復制視頻編碼統計信息到 file
‘-force_key_frames[:stream_specifier] time[,time...] (output,per-stream)’
‘-force_key_frames[:stream_specifier] expr:expr (output,per-stream)’
在指定的時間戳強制關鍵幀
‘-copyinkf[:stream_specifier] (output,per-stream)’
當進行流拷貝時,同時拷貝開頭的非關鍵幀
‘-hwaccel[:stream_specifier] hwaccel (input,per-stream)’
使用硬件加速來解碼匹配的流
‘-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)’
選擇硬件加速所使用的設備。該選項只有‘-hwaccel’同時指定時才有意義。
3.5 音頻選項
‘-aframes number (output)’
設置錄制音頻幀的個數。這是 -frames:a 的別名
‘-ar[:stream_specifier] freq (input/output,per-stream)’
設置音頻采樣率。
‘-aq q (output)’
設置音頻質量。這是 -q:a 的別名
‘-ac[:stream_specifier] channels (input/output,per-stream)’
設置音頻通道數。
‘-an (output)’
禁止音頻錄制
‘-acodec codec (input/output)’
設置音頻codec。這是-codec:a的別名
‘-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)’
設置音頻采樣格式
‘-af filtergraph (output)’
創建filtergraph 所指定的過濾圖,並使用它來過濾流
3.6 字幕選項
‘-scodec codec (input/output)’
設置字幕codec。這是 -codec:s 的別名
‘-sn (output)’
禁止字幕錄制
3.7 高級選項
‘-map [-]input_file_id[:stream_specifier][,sync_file_id[:stream_specifier]] | [linklabel] (output)’
指定一個或多個流作為輸出文件的源。
命令行中的第一個 -map 選項,指定輸出流0的源,
第二個 -map 選項,指定輸出流1的源,等等。
‘-map_channel [input_file_id.stream_specifier.channel_id|-1][:output_file_id.stream_specifier]’
將一個給定輸入的音頻通道映射到一個輸出。
‘-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)’
設置下一個輸出文件的 metadata 信息。
‘-map_chapters input_file_index (output)’
從索引號為 input_file_index 的輸入文件中拷貝章節到下一個輸出文件中。
‘-timelimit duration (global)’
ffmpeg 運行 duration 秒後推出
‘-dump (global)’
將每一個輸入包復制到標準輸出
‘-hex (global)’
復制包時,同時復制負載
‘-re (input)’
以本地幀率讀取數據。主要用來模擬一個采集設備,
或者實時輸入流(例如:當從一個文件讀取時).
‘-vsync parameter’
視頻同步方法
‘-async samples_per_second’
音頻同步方法
‘-shortest (output)’
當最短的輸入流結束時,終止編碼
‘-muxdelay seconds (input)’
設置最大解封裝-解碼延時
‘-muxpreload seconds (input)’
設置初始解封裝-解碼延時
‘-streamid output-stream-index:new-value (output)’
為一個輸出流分配一個新的stream-id。
‘-bsf[:stream_specifier] bitstream_filters (output,per-stream)’
為匹配的流設置比特流過濾器
‘-filter_complex filtergraph (global)’
定義一個復雜的過濾圖
‘-lavfi filtergraph (global)’
定義一個復雜的過濾圖。相當於‘-filter_complex’
‘-filter_complex_script filename (global)’
該選項類似於‘-filter_complex’,唯一的不同是
它的參數是一個定義過濾圖的文件的文件名
‘-accurate_seek (input)’
打開或禁止在輸入文件中的精確跳轉。默認打開。
更詳細的高級選項說明,請查閱 ffmpeg 文檔
4. ffmpeg 使用示例
1) 輸出 YUV420P 原始數據
ffmpeg -i test.mp4 test.yuv
2) 從視頻前10s中提取圖像,1s提取一幀
ffmpeg -i test.mp4 -t 10 -r 1 -f image2 pic-%03d.jpeg
3) 從視頻中提取音頻
ffmpeg -i test.mp4 -vn music.mp2
4) 轉換 wav 格式,同時改變其采樣率
ffmpeg -i test.wav -ar 32K test.mp2
5) 輸出 mp3 原始 PCM 數據
ffmpeg -i test.mp3 -f s16le test.pcm
轉自http://www.tuicool.com/articles/nquMZv
黃聰:FFmpeg 使用指南