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測試)
-v:調試信息級別(quiet、panic、fatal、error、warning、info、verbose、debug)
-re 一定要加,代表按照幀率發送,否則ffmpeg會一股腦地按最高的效率發送數據。
一個容器里可以包含許多流,包括任何的音視頻流。那么在命令行怎樣區分流呢?
答:由“:”進行分隔
./ffmpeg –i inputfile.mpg –c:v h263 –c:a g722 –f asf outfile.asf
./ffmpeg –i inputfile.mpg –c:0 h263 –c:1 g722 –f asf outfile.asf
上面命令表示把輸入文件 inputfile文件的視頻流轉換成h263格式,把音頻流轉換成g722格式。
v:視頻
a:音頻
數字:表示第幾路,從0開始
文件轉碼
1)將一個文件的音頻由opus轉成aac
ffmpeg -i ./doc/source.200kbps.768x320.flv -vcodec copy -acodec libopus -strict -2 audio_opus.mp4
ffmpeg -i video.mp4 -i audio.webm -c:v copy -c:a aac video480p.mp4
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信息保存成文本。
將一個文件推流到rtp。sdp文件會在屏幕輸出
ffmpeg -re -stream_loop -1 -i ./doc/source.200kbps.768x320.flv -an -vcodec h264 -f rtp rtp://127.0.0.1:5004 -vn -acodec libopus -f rtp rtp://127.0.0.1:5003
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
ffmpeg -re -stream_loop -1 -i audio_opus.mp4 -vcodec copy -acodec aac -f flv -y rtmp://192.168.16.133/live/55000
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基礎知識總結