寫在前面
如果對FFmpeg有需要更多了解的請訂閱我的專題:音視頻專輯
文檔介紹
1.1 文檔目的
整理出開源代碼 ffmpeg 的資料, 方便公司同事后續(xù)使用。
1.2 文檔范圍
較為詳細的介紹 ffmpeg 的功能涮较、使用以及二次開發(fā)。
1.3 讀者對象
希望了解 ffmpeg 知識落午, 從事 USM 及 IPTV 的同事店茶。
1.4 參考文獻
無
1.5 術(shù)語與縮寫解釋
縮略語/術(shù)語 | 全稱 | 介紹說明 |
---|---|---|
ffmpeg | Fast forword mpeg | 音視頻轉(zhuǎn)換器 |
ffplay | Fast forword play | 用 ffmpeg 實現(xiàn)的播放器 |
ffserver | Fast forword server | 用 ffmpeg 實現(xiàn)的 rstp 服務(wù)器 |
ffprobe | Fast forword probe | 用來輸入分析輸入流 |
FFmpeg 支持能力說明
FFmpeg 介紹及安裝
2.1.1 FFmpeg 簡介
FFmpeg 是一個開源免費跨平臺的視頻和音頻流方案, 屬于自由軟件姨伤, 采用 LGPL 或GPL 許可證(依據(jù)你選擇的組件)哨坪。 它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案乍楚。 它包含了非常先進的音頻/視頻編解碼庫 libavcodec当编, 為了保證高可移植性和編解碼質(zhì)量, libavcodec 里很多 codec 都是從頭開發(fā)的徒溪。
ffmpeg 項目由以下幾部分組成:
- 1.ffmpeg 視頻文件轉(zhuǎn)換命令行工具,也支持經(jīng)過實時電視卡抓取和編碼成視頻文件.
- 2.ffserver 基于 HTTP忿偷、RTSP 用于實時廣播的多媒體服務(wù)器.也支持時間平移
- 3.ffplay 用 SDL 和 FFmpeg 庫開發(fā)的一個簡單的媒體播放器
- 4.libavcodec 一個包含了所有 FFmpeg 音視頻編解碼器的庫.為了保證最優(yōu)性能和高可復(fù)用性,大多數(shù)編解碼器從頭開發(fā)的.
- 5.libavformat 一個包含了所有的普通音視格式的解析器和產(chǎn)生器的庫
2.1.2 FFmpeg 安裝
1.將所有源代碼壓縮在一個文件夾中金顿, 例如/絕對路徑/ffmpeg。
-
在終端輸入以下指令:
cd /絕對路徑/ffmpeg ./configure (此時鲤桥, 會出現(xiàn)問題揍拆。 然后重新輸入./configure –disable-yasm-) Make
至此, ffmpeg 安裝編譯通過茶凳, 可以進行對音視頻的操作嫂拴。
ffplay 的編譯需要依賴于 SDL 庫, 所以要想編譯成功 ffplay贮喧, 必須先安裝 SDL 庫筒狠, 安裝方法:下載最新版本的 SDL 相應(yīng)版本的 SDL 源碼, 編譯塞淹, 即可生成 SDL 庫窟蓝。
2.2 FFmpeg 參數(shù)說明
2.2.1 通用選項
-L license
*-h 幫助formats 顯示可用的格式,編解碼的饱普,協(xié)議的
f fmt 強迫采用格式fmt
-i filename輸入文件
-y覆蓋輸出文件
-t duration設(shè)置記錄時間 hh:mm:ss[.xxx]格式的記錄時間也支持
-ss position 搜索到指定的時間[-] hh:mm:ss[.xxx]的時間格式也支持
-title string 設(shè)置標題
-author string 設(shè)置作者
-copyright string 設(shè)置版權(quán)
-comment string 設(shè)置評論
-
-target type 設(shè)置目標文件類型(vcd,svcd,dvd)所有的格式選項(比特率运挫,編解碼率,緩沖區(qū)大刑赘)自動設(shè)置谁帕,只需要輸入如下的就可以了:
ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg
-hq 激活高質(zhì)量設(shè)置
-itsoffset offset 設(shè)置以秒為基準的時間偏差,該選項影響后面所有的輸入文件冯袍。改偏移被加入到輸入文件的時間戳匈挖,定義一個正偏移意味著相應(yīng)的流被延遲了offset秒。[-]hh:mm:ss[.xxx]的格式也支持
2.2.2 視頻選項
- -b bitrate設(shè)置比特率康愤,缺省200kb/s
- -r fps 設(shè)置幀頻率儡循,缺省25
- -s size設(shè)置幀的大小,此格式為WXH 缺省 160 x 128 下面的簡寫可以直接使用
sqcif | 128 x 96 |
---|---|
qcif | 176 x 144 |
cif | 352 x 288 |
4cif | 704 x 576 |
- -aspect apect 設(shè)置縱橫比 4:3 ,16:9,或者1.3333征冷,1.7777
- -croptop size 設(shè)置頂部切除帶大小 像素單位
- -cropbuttom size -cropleft size -cropright size 底部择膝,左邊,右邊切除帶大小
- -padtop size 設(shè)置頂部補齊的大小 像素單位
- -padbottom size -padleft size -padright size -padcolor color設(shè)置補齊條大小和顏色(hex检激,6個16進制的數(shù)肴捉,紅綠藍排列,比如000000代表黑色)
- -vn 不做視頻記錄
- -bt tolerance設(shè)置視頻碼率容忍度 kbit/s
- -maxrate bitrate 設(shè)置最大視頻碼率容忍度
- -minrate bitrate 設(shè)置最小視頻碼率容忍度
- -bufsize size 設(shè)置碼率控制緩沖區(qū)大小
- -vcodec codec 強制使用codec編解碼方式叔收,如果用copy表示原始編碼數(shù)據(jù)必須被拷貝
- -sameq 使用同樣視頻質(zhì)量作為源(VBR)
- -pass n 選擇處理遍數(shù)(1或2)兩遍編碼非常有用齿穗,第一遍生成統(tǒng)計信息,第二遍生成精確的請求的碼率
- -passlogfile file選擇兩遍的記錄文件名為file
2.2.3 高級視頻選項
- -g gop_size 設(shè)置圖像組大小
- -intra 僅適用幀內(nèi)編碼
- -qscale q 使用固定的視頻量化標度(VBR)
- -qmin q 最小視頻量化標度(VBR)
- -qmax q 最大視頻量化標度(VBR)
- -qdiff q 量化標度間最大偏差 (VBR)
- -qblur blur 視頻量化標度柔化(VBR)
- -qcomp compression 視頻量化標度壓縮(VBR)
- -rc_init_cplx complexity 一遍編碼的初始復(fù)雜度
- -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 設(shè)置碼率控制方程 默認 tex^qComp
- -rc_override override 特定間隔下的速率控制重載
- -me method 設(shè)置運動估計的方法 可用方法有 zero phods log x1 epzs(缺省) full
- -dct_algo algo 設(shè) 置 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 設(shè) 置 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 設(shè)置錯誤殘留為 n
1 | FF_ER_CAREFULL 缺省 |
---|---|
2 | FF_ER_COMPLIANT |
3 | FF_ER_AGGRESSIVE |
4 | FF_ER_VERY_AGGRESSIVE |
- -ec bit_mask 設(shè) 置 錯 誤 掩 蔽 為 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 使用數(shù)據(jù)劃分 僅用于 mpeg4
- -bug param 繞過沒有被自動監(jiān)測到編碼器的問題
- -strict strictness 跟標準的嚴格性
- -aic 使能高級幀內(nèi)編碼 h263+
- -umv 使能無限運動矢量 h263+
- -deinterlace 不采用交織方法
- -interlace 強迫交織法編碼 僅對 mpeg2 和 mpeg4 有效帖鸦。當你的輸入是交織的并且你 想要保持交織以最小圖像損失的時候采用該選項芝薇。 可選的方法是不交織胚嘲, 但是損失 更大
- -psnr 計算壓縮幀的 psnr
- -vstats 輸出視頻編碼統(tǒng)計到 vstats_hhmmss.log
- -vhook module 插入視頻處理模塊 module 包括了模塊名和參數(shù), 用空格分開
2.2.4音頻選項
- -ab bitrate 設(shè)置音頻碼率
- -ar freq 設(shè)置音頻采樣率
- -ac channels 設(shè)置通道 缺省為 1
- -an 不使能音頻紀錄
- -acodec codec 使用 codec 編解碼
2.2.5 音頻/視頻捕獲選項
- -vd device 設(shè)置視頻捕獲設(shè)備洛二。 比如/dev/video0
- -vc channel 設(shè)置視頻捕獲通道 DV1394 專用
- -tvstd standard 設(shè)置電視標準 NTSC PAL(SECAM)
- -dv1394 設(shè)置 DV1394 捕獲
- -av device 設(shè)置音頻設(shè)備 比如/dev/dsp
2.2.6 高級選項
- -map file:stream 設(shè)置輸入流映射
- -debug 打印特定調(diào)試信息
- -benchmark 為基準測試加入時間
- -hex 傾倒每一個輸入包
- -bitexact 僅使用位精確算法 用于編解碼測試
- -ps size 設(shè)置包大小馋劈, 以 bits 為單位
- -re 以本地幀頻讀數(shù)據(jù), 主要用于模擬捕獲設(shè)備
- -loop 循環(huán)輸入流晾嘶。 只工作于圖像流妓雾, 用于 ffserver 測試
2.2.7 FFmpeg 參數(shù)實例
以下面這個命令作為例子
./ffmpeg -y -i /rootVideoConverter/123.avi –s 480x350 /root/VideoConverter/234.flv
- -y (覆蓋輸出文件, 即如果 1.***文件已經(jīng)存在的話垒迂, 不經(jīng)提示就覆蓋掉了)
- -i "1.avi"(輸入文件是和 ffmpeg 在同一目錄下的 1.avi 文件械姻,可以自己加路徑,改名字)
- -s (輸出的分辨率机断, 注意片源一定要是 16:9 的不然會變形)
- -r (幀數(shù)楷拳, 一般就用這個吧)
- -b 1500(視頻數(shù)據(jù)流量,用-b xxxx 的指令則使用固定碼率吏奸,數(shù)字隨便改欢揖,1500 以 上沒效果;還可以用動態(tài)碼率如:-qscale 4 和-qscale 6奋蔚, 4 的質(zhì)量比 6 高)
- -acodec aac(音頻編碼用 AAC)
- -ac 2 (聲道數(shù) 1 或 2)
- -ar 24000(聲音的采樣頻率她混, 好像 PSP 只能支持 24000Hz)
- -ab 128 ( 音頻數(shù)據(jù)流量, 一般選擇 32泊碑、64坤按、96、128)
- -vol 200(200%的音量馒过, 自己改)
- -f psp (輸出 psp 專用格式)
- -muxvb 768(給 PSP 機器識別的碼率臭脓, 一般選擇 384、512 和
- -ab bitrate 設(shè)置音頻碼率
- -ar freq 設(shè)置音頻采樣率
- -ss 指定時間點開始轉(zhuǎn)換任務(wù)沉桌, (time_off set the start time offset)谢鹊, -ss 后跟的時間單位為秒 .
- -s 320x240 指定分辨率
- -r 29.97 楨速率
- -bitexact 使用標準比特率
- -vcodec xvid 使用 xvid 壓縮
寫在后面
如果對FFmpeg有需要更多了解的請訂閱我的專題:音視頻專輯