1. 程式人生 > 實用技巧 >ffmpeg引數中文詳細解釋

ffmpeg引數中文詳細解釋

ffmpeg引數中文詳細解釋

a) 通用選項

-L license
-h 幫助
-fromats 顯示可用的格式,編解碼的,協議的...
-f fmt 強迫採用格式fmt
-I filename 輸入檔案
-y 覆蓋輸出檔案
-t duration 設定紀錄時間 hh:mm:ss[.xxx]格式的記錄時間也支援
-ss position 搜尋到指定的時間 [-]hh:mm:ss[.xxx]的格式也支援
-title string 設定標題
-author string 設定作者
-copyright string 設定版權
-comment string 設定評論
-target type 設定目標檔案型別(vcd,svcd,dvd) 所有的格式選項(位元率,編解碼以及緩衝區大小)自動設定,只需要輸入如下的就可以了:ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-hq 啟用高質量設定
-itsoffset offset 設定以秒為基準的時間偏移,該選項影響所有後面的輸入檔案。該偏移被加到輸入檔案的時戳,定義一個正偏移意味著相應的流被延遲了 offset秒。 [-]hh:mm:ss[.xxx]的格式也支援

b) 視訊選項

-b bitrate 設定位元率,預設200kb/s
-r fps 設定幀頻 預設25
-s size 設定幀大小 格式為WXH 預設160X128.下面的簡寫也可以直接使用:
Sqcif 128X96 qcif 176X144 cif 252X288 4cif 704X576
-aspect aspect 設定橫縱比 4:3 16:9 或 1.3333 1.7777
-croptop size 設定頂部切除帶大小 畫素單位
-cropbottom size –cropleft size –cropright size
-padtop size 設定頂部補齊的大小 畫素單位
-padbottom size –padleft size –padright size –padcolor color 設定補齊條顏色(hex,6個16進位制的數,紅:綠:蘭排列,比如 000000代表黑色)
-vn 不做視訊記錄
-bt tolerance 設定視訊位元速率容忍度kbit/s
-maxrate bitrate設定最大視訊位元速率容忍度
-minrate bitreate 設定最小視訊位元速率容忍度
-bufsize size 設定位元速率控制緩衝區大小
-vcodec codec 強制使用codec編解碼方式。如果用copy表示原始編解碼資料必須被拷貝。
-sameq 使用同樣視訊質量作為源(VBR)
-pass n 選擇處理遍數(1或者2)。兩遍編碼非常有用。第一遍生成統計資訊,第二遍生成精確的請求的位元速率
-passlogfile file 選擇兩遍的紀錄檔名為file

c)高階視訊選項

-g gop_size 設定影象組大小
-intra 僅適用幀內編碼
-qscale q 使用固定的視訊量化標度(VBR)
-qmin q 最小視訊量化標度(VBR)
-qmax q 最大視訊量化標度(VBR)
-qdiff q 量化標度間最大偏差 (VBR)
-qblur blur 視訊量化標度柔化(VBR)
-qcomp compression 視訊量化標度壓縮(VBR)
-rc_init_cplx complexity 一遍編碼的初始複雜度
-b_qfactor factor 在p和b幀間的qp因子
-i_qfactor factor 在p和i幀間的qp因子
-b_qoffset offset 在p和b幀間的qp偏差
-i_qoffset offset 在p和i幀間的qp偏差
-rc_eq equation 設定位元速率控制方程 預設tex^qComp
-rc_override override 特定間隔下的速率控制過載
-me method 設定運動估計的方法 可用方法有 zero phods log x1 epzs(預設) full
-dct_algo algo 設定dct的演算法 可用的有 0 FF_DCT_AUTO 預設的DCT 1 FF_DCT_FASTINT 2 FF_DCT_INT 3 FF_DCT_MMX 4 FF_DCT_MLIB 5 FF_DCT_ALTIVEC
-idct_algo algo 設定idct演算法。可用的有 0 FF_IDCT_AUTO 預設的IDCT 1 FF_IDCT_INT 2 FF_IDCT_SIMPLE 3 FF_IDCT_SIMPLEMMX 4 FF_IDCT_LIBMPEG2MMX 5 FF_IDCT_PS2 6 FF_IDCT_MLIB 7 FF_IDCT_ARM 8 FF_IDCT_ALTIVEC 9 FF_IDCT_SH4 10 FF_IDCT_SIMPLEARM
-er n 設定錯誤殘留為n 1 FF_ER_CAREFULL 預設 2 FF_ER_COMPLIANT 3 FF_ER_AGGRESSIVE 4 FF_ER_VERY_AGGRESSIVE
-ec bit_mask 設定錯誤掩蔽為bit_mask,該值為如下值的位掩碼 1 FF_EC_GUESS_MVS (default=enabled) 2 FF_EC_DEBLOCK (default=enabled)
-bf frames 使用frames B 幀,支援mpeg1,mpeg2,mpeg4
-mbd mode 巨集塊決策 0 FF_MB_DECISION_SIMPLE 使用mb_cmp 1 FF_MB_DECISION_BITS 2 FF_MB_DECISION_RD
-4mv 使用4個運動向量 僅用於mpeg4
-part 使用資料劃分 僅用於mpeg4
-bug param 繞過沒有被自動監測到編碼器的問題
-strict strictness 跟標準的嚴格性
-aic 使能高階幀內編碼 h263+
-umv 使能無限運動向量 h263+
-deinterlace 不採用交織方法
-interlace 強迫交織法編碼僅對mpeg2和mpeg4有效。當你的輸入是交織的並且你想要保持交織以最小影象損失的時候採用該選項。可選的方法是不交織,但是損失更大
-psnr 計算壓縮幀的psnr
-vstats 輸出視訊編碼統計到vstats_hhmmss.log
-vhook module 插入視訊處理模組 module 包括了模組名和引數,用空格分開

D)音訊選項

-ab bitrate 設定音訊位元速率
-ar freq 設定音訊取樣率
-ac channels 設定通道 預設為1
-an 不使能音訊紀錄
-acodec codec 使用codec編解碼

E)音訊/視訊捕獲選項

-vd device 設定視訊捕獲裝置。比如/dev/video0
-vc channel 設定視訊捕獲通道 DV1394專用
-tvstd standard 設定電視標準 NTSC PAL(SECAM)
-dv1394 設定DV1394捕獲
-av device 設定音訊裝置 比如/dev/dsp

F)高階選項

-map file:stream 設定輸入流對映
-debug 列印特定除錯資訊
-benchmark 為基準測試加入時間
-hex 傾倒每一個輸入包
-bitexact 僅使用位精確演算法 用於編解碼測試
-ps size 設定包大小,以bits為單位
-re 以本地幀頻讀資料,主要用於模擬捕獲裝置
-loop 迴圈輸入流(只工作於影象流,用於ffserver測試)

-re 一定要加,代表按照幀率傳送,否則ffmpeg會一股腦地按最高的效率傳送資料。

FFmpeg傳送流媒體的命令,在此簡單記錄一下以作備忘。

1.UDP

1.1. 傳送H.264裸流至組播地址

注:組播地址指的範圍是224.0.0.0—239.255.255.255

下面命令實現了傳送H.264裸流“chunwan.h264”至地址udp://233.233.233.223:6666

ffmpeg -re -i chunwan.h264 -vcodec copy -f h264 udp://233.233.233.223:6666

注1:-re一定要加,代表按照幀率傳送,否則ffmpeg會一股腦地按最高的效率傳送資料。

注2:-vcodec copy要加,否則ffmpeg會重新編碼輸入的H.264裸流。

1.2. 播放承載H.264裸流的UDP

ffplay -f h264 udp://233.233.233.223:6666

注:需要使用-f說明資料型別是H.264

播放的時候可以加一些引數,比如-max_delay,下面命令將-max_delay設定為100ms:

ffplay -max_delay 100000 -f h264 udp://233.233.233.223:6666

1.3. 傳送MPEG2裸流至組播地址

下面的命令實現了讀取本地攝像頭的資料,編碼為MPEG2,傳送至地址udp://233.233.233.223:6666。

ffmpeg -re -i chunwan.h264 -vcodec mpeg2video -f mpeg2video udp://233.233.233.223:6666

1.4. 播放MPEG2裸流

指定-vcodec為mpeg2video即可。

ffplay -vcodec mpeg2video udp://233.233.233.223:6666

2.RTP

2.1. 傳送H.264裸流至組播地址。

下面命令實現了傳送H.264裸流“chunwan.h264”至地址rtp://233.233.233.223:6666

ffmpeg -re -i chunwan.h264 -vcodec copy -f rtp rtp://233.233.233.223:6666>test.sdp

注1:-re一定要加,代表按照幀率傳送,否則ffmpeg會一股腦地按最高的效率傳送資料。

注2:-vcodec copy要加,否則ffmpeg會重新編碼輸入的H.264裸流。

注3:最右邊的“>test.sdp”用於將ffmpeg的輸出資訊儲存下來形成一個sdp檔案。該檔案用於RTP的接收。當不加“>test.sdp”的時候,ffmpeg會直接把sdp資訊輸出到控制檯。將該資訊複製出來儲存成一個字尾是.sdp文字檔案,也是可以用來接收該RTP流的。加上“>test.sdp”後,可以直接把這些sdp資訊儲存成文字。

2.2. 播放承載H.264裸流的RTP。

ffplay test.sdp

3.RTMP

3.1. 傳送H.264裸流至RTMP伺服器(FlashMedia Server,Red5等)

面命令實現了傳送H.264裸流“chunwan.h264”至主機為localhost,Application為oflaDemo,Path為livestream的RTMP URL。

ffmpeg -re -i chunwan.h264 -vcodec copy -f flv rtmp://localhost/oflaDemo/livestream

3.2. 播放RTMP

ffplay “rtmp://localhost/oflaDemo/livestream live=1”

注:ffplay播放的RTMP URL最好使用雙引號括起來,並在後面新增live=1引數,代表實時流。實際上這個引數是傳給了ffmpeg的libRTMP的。

有關RTMP的處理,可以參考文章:ffmpeg處理RTMP流媒體的命令大全

4.測延時

4.1.測延時

測延時有一種方式,即一路播放傳送端視訊,另一路播放流媒體接收下來的流。播放傳送端的流有2種方式:FFmpeg和FFplay。

通過FFplay播放是一種眾所周知的方法,例如:

ffplay -f dshow -i video="Integrated Camera"

即可播放本地名稱為“Integrated Camera”的攝像頭。

此外通過FFmpeg也可以進行播放,通過指定引數“-f sdl”即可。例如:

ffmpeg -re -i chunwan.h264 -pix_fmt yuv420p –f sdl xxxx.yuv -vcodec copy -f flv rtmp://localhost/oflaDemo/livestream

ffmpeg處理RTMP流媒體的命令大全


1、將檔案當做直播送至live
ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName

2、將直播媒體儲存至本地檔案

ffmpeg -i rtmp://server/live/streamName -c copy dump.flv

3、將其中一個直播流,視訊改用h264壓縮,音訊不變,送至另外一個直播服務流

ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv rtmp://server/live/h264Stream

4、將其中一個直播流,視訊改用h264壓縮,音訊改用faac壓縮,送至另外一個直播服務流

ffmpeg -i rtmp://server/live/originalStream -c:a libfaac -ar 44100 -ab 48k -c:v libx264 -vpre slow -vpre baseline -f flv rtmp://server/live/h264Stream
5、將其中一個直播流,視訊不變,音訊改用faac壓縮,送至另外一個直播服務流
ffmpeg -i rtmp://server/live/originalStream -acodec libfaac -ar 44100 -ab 48k -vcodec copy -f flv rtmp://server/live/h264_AAC_Stream
6、將一個高清流,複製為幾個不同視訊清晰度的流重新發布,其中音訊不變
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -acodec copy -vcodec x264lib -s 640×360 -b 500k -vpre medium -vpre baseline rtmp://server/live/baseline_500k -acodec copy -vcodec x264lib -s 480×272 -b 300k -vpre medium -vpre baseline rtmp://server/live/baseline_300k -acodec copy -vcodec x264lib -s 320×200 -b 150k -vpre medium -vpre baseline rtmp://server/live/baseline_150k -acodec libfaac -vn -ab 48k rtmp://server/live/audio_only_AAC_48k
7、功能一樣,只是採用-x264opts選項
ffmpeg -re -i rtmp://server/live/high_FMLE_stream -c:a copy -c:v x264lib -s 640×360 -x264opts bitrate=500:profile=baseline:preset=slow rtmp://server/live/baseline_500k -c:a copy -c:v x264lib -s 480×272 -x264opts bitrate=300:profile=baseline:preset=slow rtmp://server/live/baseline_300k -c:a copy -c:v x264lib -s 320×200 -x264opts bitrate=150:profile=baseline:preset=slow rtmp://server/live/baseline_150k -c:a libfaac -vn -b:a 48k rtmp://server/live/audio_only_AAC_48k
8、將當前攝像頭及音訊通過DSSHOW採集,視訊h264、音訊faac壓縮後釋出
ffmpeg -r 25 -f dshow -s 640×480 -i video=”video source name”:audio=”audio source name” -vcodec libx264 -b 600k -vpre slow -acodec libfaac -ab 128k -f flv rtmp://server/application/stream_name
9、將一個JPG圖片經過h264壓縮迴圈輸出為mp4視訊
ffmpeg.exe -i INPUT.jpg -an -vcodec libx264 -coder 1 -flags +loop -cmp +chroma -subq 10 -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -flags2 +dct8x8 -trellis 2 -partitions +parti8x8+parti4x4 -crf 24 -threads 0 -r 25 -g 25 -y OUTPUT.mp4
10、將普通流視訊改用h264壓縮,音訊不變,送至高清流服務(新版本FMS live=1)
ffmpeg -i rtmp://server/live/originalStream -c:a copy -c:v libx264 -vpre slow -f flv “rtmp://server/live/h264Stream live=1″

就可以一邊通過SDL播放視訊,一邊傳送視訊流至RTMP伺服器。

注1:sdl後面指定的xxxx.yuv並不會輸出出來。

注2:FFmpeg本身是可以指定多個輸出的。本命令相當於指定了兩個輸出。

播放接收端的方法前文已經提及,在此不再詳述。

C語言的面向物件設計 —— 對 X264/FFMPEG 架構探討

最簡單的視訊網站(JavaEE+FFmpeg)

ffmpeg: 解析SDP sdl播放

FFmpeg 開發(01):FFmpeg 編譯和整合

FFmpeg基礎知識總結

sdp檔案詳細總結

webrtc 資源