前言
Github地址:Github
簡書地址:簡書
專輯地址:FFplay專輯
6.編解碼器選項
libavcodec提供了一些通用的全局選項,可以在所有編碼器和解碼器上設(shè)置。 此外,每個編解碼器可以支持所謂的私有選項,這些選項特定于給定的編解碼器。
有時,全局選項可能只會影響特定類型的編解碼器,并且可能是荒謬的或被其他人忽略,因此需要了解指定選項的含義。 還有一些選項僅用于解碼或編碼。
可以通過在FFmpeg工具中指定-option值,或通過在AVCodecContext選項中顯式設(shè)置值或使用“l(fā)ibavutil / opt.h”API進行編程來設(shè)置選項。
支持的選項列表如下:
b integer (encoding,audio,video)
以bit/s為單位設(shè)置比特率。 默認(rèn)值為200K。
ab integer (encoding,audio)
設(shè)置音頻比特率(以位/秒為單位)。 默認(rèn)值為128K。
bt integer (encoding,video)
設(shè)置視頻比特率容差(以位/秒為單位)。 在1遍模式中,比特率容差指定速率控制愿意偏離目標(biāo)平均比特率值的程度。 這與最小/最大比特率無關(guān)。 降低公差太大會對質(zhì)量產(chǎn)生不利影響。
flags flags (decoding/encoding,audio,video,subtitles)
設(shè)置通用標(biāo)志。
可能的取值如下:
| ????值???? | 解釋 |
|---|---|
| mv4 | 按宏塊使用四個運動矢量(mpeg4) |
| qpel | 使用1/4像素運動補償 |
| loop | 使用循環(huán)過濾器 |
| qscale | 使用固定的qscale
|
| pass1 | 在第一次通過模式下使用內(nèi)部2pass速率控制 |
| pass2 | 在第二次通過模式下使用內(nèi)部2pass速率控制 |
| gray | 僅解碼/編碼灰度 |
| emu_edge | 不要描邊 |
| psnr | 在編碼期間設(shè)置error[?]變量 |
| truncated | |
| ildct | 使用隔行掃描DCT
|
| low_delay | 強制低延遲 |
| global_header | 將全局標(biāo)頭放在extradata而不是每個關(guān)鍵幀中 |
| bitexact | 僅編寫平臺,構(gòu)建和時間無關(guān)的數(shù)據(jù)。 (除了(I)DCT)。 這可確保文件和數(shù)據(jù)校驗和可重現(xiàn)并在平臺之間匹配。 它的主要用途是進行回歸測試 |
| aic | 應(yīng)用H263高級幀內(nèi)編碼/ mpeg4交流預(yù)測 |
| cbp | 不推薦使用,請改用mpegvideo私有選項 |
| qprd | 不推薦使用,請改用mpegvideo私有選項 |
| ilme | 應(yīng)用隔行掃描運動估計 |
| cgop | 使用封閉的gop
|
me_method integer (encoding,video)
設(shè)置運動估計方法。
可能的取值如下:
| ????值???? | 解釋 |
|---|---|
| zero | 零運動估計(最快) |
| full | 全運動估計(最慢) |
| epzs |
EPZS運動估計(默認(rèn)) |
| esa |
esa運動估計(別名為完整) |
| tesa | 德莎運動估計 |
| dia |
dia運動估計(epzs的別名) |
| log | 對數(shù)運動估計 |
| phods | phods運動估計 |
| x1 |
X1運動估計 |
| hex | 十六進制運動估計 |
| umh | umh運動估計 |
| iter |
iter運動估計 |
extradata_size integer
設(shè)置extradata大小。
time_base rational number
設(shè)置編解碼器時基。
它是表示幀時間戳的基本時間單位(以秒為單位)。 對于固定fps內(nèi)容,時基應(yīng)為1 / frame_rate,時間戳增量應(yīng)相同為1。
g integer (encoding,video)
設(shè)置圖片組(GOP)大小。 默認(rèn)值為12。
ar integer (decoding/encoding,audio)
設(shè)置音頻采樣率(Hz)。
ac integer (decoding/encoding,audio)
設(shè)置音頻通道數(shù)。
cutoff integer (encoding,audio)
設(shè)置截止帶寬。 (僅受選定編碼器支持,請參閱各自的文檔部分。)
frame_size integer (encoding,audio)
設(shè)置音頻幀大小。
除最后一個之外的每個提交的幀必須包含每個通道的frame_size樣本。 當(dāng)編解碼器設(shè)置了CODEC_CAP_VARIABLE_FRAME_SIZE時,可能為0,在這種情況下,幀大小不受限制。 它由一些解碼器設(shè)置以指示恒定的幀大小。
frame_number integer
設(shè)置幀編號。
delay integer
qcomp float (encoding,video)
設(shè)置視頻量化器比例壓縮(VBR)。 它在速率控制方程中用作常數(shù)。 默認(rèn)rc_eq的推薦范圍:0.0-1.0。
qblur float (encoding,video)
設(shè)置視頻量化器比例模糊(VBR)。
qmin integer (encoding,video)
設(shè)置最小視頻量化比例(VBR)。 必須包含在-1和69之間,默認(rèn)值為2。
qmax integer (encoding,video)
設(shè)置最大視頻量化器比例(VBR)。 必須包含在-1和1024之間,默認(rèn)值為31。
qdiff integer (encoding,video)
設(shè)置量化器標(biāo)度(VBR)之間的最大差異。
bf integer (encoding,video)
設(shè)置非B幀之間的最大B幀數(shù)。
必須是-1到16之間的整數(shù)。0表示禁用B幀。 如果使用值-1,它將根據(jù)編碼器選擇自動值。
默認(rèn)值為0。
b_qfactor float (encoding,video)
在P幀和B幀之間設(shè)置qp因子。
rc_strategy integer (encoding,video)
設(shè)置ratecontrol方法。
b_strategy integer (encoding,video)
設(shè)置策略以在I/P/B幀之間進行選擇。
ps integer (encoding,video)
以字節(jié)為單位設(shè)置RTP有效負(fù)載大小。
mv_bits integer
header_bits integer
i_tex_bits integer
p_tex_bits integer
i_count integer
p_count integer
skip_count integer
misc_bits integer
frame_bits integer
codec_tag integer
bug flags (decoding,video)
解決方法不自動檢測編碼器錯誤。
可能的取值:
| 值 | 解釋 |
|---|---|
| autodetect | |
| old_msmpeg4 | 一些舊的lavc生成了msmpeg4v3文件(沒有自動檢測) |
| xvid_ilace |
Xvid隔行掃描錯誤(如果fourcc == XVIX,則自動檢測) |
| ump4 | (如果fourcc == UMP4,則自動檢測) |
| no_padding | 填充錯誤(自動檢測) |
| amv | |
| ac_vlc | 非法vlc錯誤(每四個自動檢測) |
| qpel_chroma | |
| std_qpel | 舊標(biāo)準(zhǔn)qpel(每個四分之一版本自動檢測) |
| qpel_chroma2 | |
| direct_blocksize |
direct-qpel-blocksize bug(根據(jù)fourcc/version自動檢測) |
| edge | 邊緣填充錯誤(每個fourcc /版本自動檢測) |
| hpel_chroma | |
| dc_clip | |
| ms | 解決微軟破解解碼器中的各種錯誤。 |
| trunc | 截斷的幀 |
lelim integer (encoding,video)
設(shè)置亮度的單個系數(shù)消除閾值(負(fù)值也考慮DC系數(shù))。
celim integer (encoding,video)
設(shè)置色度的單個系數(shù)消除閾值(負(fù)值也考慮直流系數(shù))。
strict integer (decoding/encoding,audio,video)
指定嚴(yán)格遵守標(biāo)準(zhǔn)的程度。
可能的結(jié)果如下:
| ??值?? | 解釋 |
|---|---|
| very | 嚴(yán)格遵守較舊的更嚴(yán)格版本的規(guī)范或參考軟件 |
| strict | 無論后果如何,嚴(yán)格遵守規(guī)范中的所有內(nèi)容 |
| normal | |
| unofficial | 允許非官方擴展 |
| experimental | 允許非標(biāo)準(zhǔn)化的實驗性事物,實驗性(未完成/正在進行/未經(jīng)過充分測試)解碼器和編碼器。 注意:實驗解碼器可能會帶來安全風(fēng)險,請勿使用此解碼器來解碼不受信任的輸入 |
b_qoffset float (encoding,video)
設(shè)置P幀和B幀之間的QP偏移。
err_detect flags (decoding,audio,video)
設(shè)置錯誤檢測標(biāo)志。
可能的取值如下:
| 值 | 解釋 |
|---|---|
| crccheck | 驗證嵌入式CRC
|
| bitstream | 檢測比特流規(guī)范偏差 |
| buffer | 檢測不正確的比特流長度 |
| explode | 在小錯誤檢測中中止解碼 |
| ignore_err | 忽略解碼錯誤,并繼續(xù)解碼。 如果想分析視頻內(nèi)容并因此希望無論如何都要解碼所有內(nèi)容,這將非常有用。 如果出現(xiàn)錯誤,此選項不會產(chǎn)生令人滿意的視頻 |
| careful | 考慮違反規(guī)范的事情,并且沒有在野外看到錯誤 |
| compliant | 將所有規(guī)范非合規(guī)性視為錯誤 |
| aggressive | 考慮一個理智的編碼器不應(yīng)該做的錯誤 |
has_b_frames integer
block_align integer
mpeg_quant integer (encoding,video)
使用MPEG量化器代替H.263。
qsquish float (encoding,video)
如何在qmin和qmax之間保持量化器(0 =clip,1 =use differentiable function)。
rc_qmod_amp float (encoding,video)
設(shè)置實驗量化器調(diào)制。
rc_qmod_freq integer (encoding,video)
設(shè)置實驗量化器調(diào)制。
rc_override_count integer
rc_eq string (encoding,video)
設(shè)定速率控制方程。 在計算表達(dá)式時,除了“表達(dá)式評估”部分中定義的標(biāo)準(zhǔn)函數(shù)外,還提供以下函數(shù):bits2qp(bits),qp2bits(qp)。 此外,還有以下常量:iTex pTex tex mv fCode iCount mcVar var isI isP isB avgQP qComp avgIITex avgPITex avgPPTex avgBPTex avgTex。
maxrate integer (encoding,audio,video)
設(shè)置最大比特率容差(以位/秒為單位)。 需要設(shè)置bufsize。
minrate integer (encoding,audio,video)
設(shè)置最小比特率容差(以位/秒為單位)。 在設(shè)置CBR編碼時最有用。 它沒有什么用處。
bufsize integer (encoding,audio,video)
設(shè)置速率控制緩沖區(qū)大?。ㄒ晕粸閱挝唬?/p>
rc_buf_aggressivity float (encoding,video)
目前沒用。
i_qfactor float (encoding,video)
在P幀和I幀之間設(shè)置QP因子。
i_qoffset float (encoding,video)
設(shè)置P和I幀之間的QP偏移。
rc_init_cplx float (encoding,video)
設(shè)置1遍編碼的初始復(fù)雜度。
dct integer (encoding,video)
設(shè)置DCT算法。
可能的取值如下:
| 值 | 解釋 |
|---|---|
| auto | 自動選擇一個好的(默認(rèn)) |
| fastint | fast integer |
| int | 準(zhǔn)確的整數(shù) |
| mmx | |
| altivec | |
| faan | 浮點AAN DCT
|
lumi_mask float (encoding,video)
壓縮明亮區(qū)域比中等區(qū)域強。
tcplx_mask float (encoding,video)
設(shè)置時間復(fù)雜度掩蔽。
scplx_mask float (encoding,video)
設(shè)置空間復(fù)雜度掩蔽。
p_mask float (encoding,video)
設(shè)置屏蔽間隔。
dark_mask float (encoding,video)
壓縮比中等強度的黑暗區(qū)域。
idct integer (decoding/encoding,video)
選擇IDCT實施。
可能的取值如下:
| 值 | 解釋 |
|---|---|
| auto | |
| int | |
| simple | |
| simplemmx | |
| simpleauto | 自動選擇與簡單IDCT兼容的IDCT
|
| arm | |
| altivec | |
| sh4 | |
| simplearm | |
| simplearmv5te | |
| simplearmv6 | |
| simpleneon | |
| simplealpha | |
| ipp | |
| xvidmmx | |
| faani | 浮點AAN IDCT
|
slice_count integer
ec flags (decoding,video)
設(shè)置錯誤隱藏策略。
可能的取值如下:
| 值 | 解釋 |
|---|---|
| guess_mvs | 迭代運動矢量(MV)搜索(慢) |
| deblock | 使用強deblock過濾器來修復(fù)損壞的MB
|
| favor_inter | 傾向于從前一幀而不是當(dāng)前幀預(yù)測 |
bits_per_coded_sample integer
pred integer (encoding,video)
設(shè)定預(yù)測方法。
可能的取值如下:
| 值 |
|---|
| left |
| plane |
| median |
aspect rational number (encoding,video)
設(shè)置樣本寬高比。
sar rational number (encoding,video)
設(shè)置樣本寬高比。 方面的別名。
debug flags (decoding/encoding,audio,video,subtitles)
打印特定的調(diào)試信息。
可能的取值如下:
| 值 | 解釋 |
|---|---|
| pict | 圖片信息 |
| rc | 速率控制 |
| bitstream | |
| mb_type | 宏塊(MB)類型 |
| qp | 每塊量化參數(shù)(QP)
|
| dct_coeff | |
| green_metadata | 顯示即將到來的幀,GoP或給定持續(xù)時間的復(fù)雜性元數(shù)據(jù)。 |
| skip | |
| startcode | |
| er | 錯誤識別 |
| mmco | 內(nèi)存管理控制操作(H.264)
|
| bugs | |
| buffers | 圖片緩沖區(qū)分配 |
| thread_ops | 線程操作 |
| nomc | 跳過運動補償 |
cmp integer (encoding,video)
設(shè)置完全比較功能。
可能的取值如下:
| 值 | 解釋 |
|---|---|
| sad | 絕對差值之和,快速(默認(rèn)) |
| sse | 平方誤差之和 |
| satd | 絕對Hadamard的總和改變了差異 |
| dct | 絕對DCT轉(zhuǎn)換差異的總和 |
| psnr | 量化誤差平方和(avoid, low quality)
|
| bit | 塊所需的位數(shù) |
| rd | 速率失真最佳,速度慢 |
| zero | 0 |
| vsad | 絕對垂直差異之和 |
| vsse | 垂直差異的平方和 |
| nsse | 噪聲保持平方差的總和 |
| w53 |
5/3小波,僅用于snow場景 |
| w97 |
9/7小波,僅用于snow場景中 |
| dctmax | |
| chroma |