寫(xiě)在前面
如果您對(duì)音視頻技術(shù)感興趣揍堰,可以訂閱我的專(zhuān)題:音視頻專(zhuān)輯
也可以關(guān)注我的簡(jiǎn)書(shū)賬戶(hù): 張芳濤踢匣,我后期會(huì)發(fā)布更多的音視頻以及圖像處理方面的文章势木。
正文
為了檢測(cè)錯(cuò)誤并測(cè)試各種輸入易猫,參數(shù)鄙煤,性能等晾匠,我們可以使用多個(gè)FFmpeg過(guò)濾器,選項(xiàng)和來(lái)源梯刚。 當(dāng)控制臺(tái)輸出很長(zhǎng)時(shí)混聊,-report選項(xiàng)會(huì)將測(cè)試結(jié)果保存到名為ffmpeg-yyyymmdd-hhmmss.log的文件中,其中斜體部分表示當(dāng)前日期和時(shí)間。
debug, debug_ts and fdebug選項(xiàng)
FFmpeg中的基本調(diào)試工具是一個(gè)-debug選項(xiàng)句喜,其中在下表中描述了17個(gè)可能值:
描述 | 打印關(guān)于所選音頻,字幕或視頻流的特定調(diào)試信息 |
---|---|
語(yǔ)法 | -debug[:stream_specifier] |
可用值的描述 | |
pict | 圖片信息 |
rc | 速率控制 |
bitstream | 比特流 |
mb_type | 宏塊(MB)類(lèi)型 |
qp | 每塊量化參數(shù)(QP) |
mv | 運(yùn)動(dòng)矢量 |
dct_coeff | DCT系數(shù) |
skip | 進(jìn)度跳躍 |
startcode | 起始碼 |
pts | 演示文稿時(shí)間戳 |
er | 錯(cuò)誤識(shí)別 |
mmco | 內(nèi)存管理控制操作(H.264) |
bugs | bugs(錯(cuò)誤) |
vis_qp | 可視化量化參數(shù)(QP)沟于,較低的QP是更綠色的 |
vis_mb_type | 可視化塊類(lèi)型 |
buffers | 圖片緩沖區(qū)分配 |
thread_ops | 線程操作 |
例如咳胃,我們將mptestsrc源的短輸出保存為具有mmco值的MP4(H.264)文件:
ffmpeg -debug mmco -f lavfi -i mptestsrc -t 0.5 output.mp4
向控制臺(tái)輸出添加了12行描述各個(gè)幀; 包含的術(shù)語(yǔ)說(shuō)明:
- QP - 量化參數(shù)
- NAL - 網(wǎng)絡(luò)抽象層單元
-
切片:B - 雙向預(yù)測(cè),I - 幀內(nèi)編碼旷太,P - 預(yù)測(cè)
另一個(gè)調(diào)試選項(xiàng)是-debug_ts展懈,它可以在處理期間打印時(shí)間戳信息,例如我們可以修改前面的示例并僅使用0.1秒(3幀):
ffmpeg -debug_ts -f lavfi -i mptestsrc -t 0.1 output.mp4
向控制臺(tái)輸出添加下一行:
選項(xiàng)-fdebug只有1個(gè)可能的值ts供璧,通常與-debug_ts選項(xiàng)一起用于各種測(cè)試存崖,例如調(diào)試DTS(解碼時(shí)間戳)和PTS(演示時(shí)間戳)關(guān)系。 使用上例中的修改后的命令睡毒,控制臺(tái)輸出顯示命令后列出的添加行:
ffmpeg -fdebug ts -f lavfi -i mptestsrc -t 0.1 output.mp4
用于錯(cuò)誤檢測(cè)的標(biāo)志
檢測(cè)ffmpeg處理中的錯(cuò)誤可以通過(guò)表中描述的-err_detect選項(xiàng)指定:
描述 | 檢測(cè)一個(gè)錯(cuò)誤来惧,該標(biāo)志指定了哪種類(lèi)型 |
---|---|
語(yǔ)法 | -err_detect[:stream_specifier] flag |
可用標(biāo)志的描述 | |
aggressive | 考慮一個(gè)理智的編碼器不應(yīng)該做的錯(cuò)誤 |
bitstream | 檢測(cè)比特流指定偏差 |
buffer | 檢測(cè)不合適的比特流長(zhǎng)度 |
careful | 考慮違反規(guī)范并且沒(méi)有被視為錯(cuò)誤的東西 |
compliant | 將所有規(guī)范不合規(guī)視為錯(cuò)誤 |
crccheck | 驗(yàn)證嵌入式CRC |
explode | 終止對(duì)較小錯(cuò)誤檢測(cè)的解碼 |
例如,要檢測(cè)不正確的比特流長(zhǎng)度演顾,我們可以使用以下命令:
ffmpeg -report -err_detect buffer -i input.avi output.mp4
日志記錄級(jí)別設(shè)置
日志記錄級(jí)別確定處理過(guò)程中控制臺(tái)輸出中顯示的內(nèi)容供搀,可用的修改值包括:安靜,恐慌钠至,致命葛虐,錯(cuò)誤,警告棉钧,信息屿脐,詳細(xì),調(diào)試宪卿。 要設(shè)置日志記錄級(jí)別的诵,我們可以使用選項(xiàng)-v或-loglevel選項(xiàng),例如對(duì)于詳細(xì)級(jí)別愧捕,我們可以使用以下命令:
ffmpeg -loglevel verbose -i input.avi output.mp4
時(shí)間基配置測(cè)試
過(guò)濾器asettb和settb用于測(cè)試時(shí)基配置奢驯,asettb用于音頻輸入并用于視頻輸入的建立。 兩個(gè)過(guò)濾器都具有相同的參數(shù)次绘,并在公共表中進(jìn)行了描述:
描述 | 兩個(gè)濾鏡都設(shè)置時(shí)基瘪阁,它將用于輸出幀時(shí)間戳。 此設(shè)置用于測(cè)試時(shí)基配置和類(lèi)似功能邮偎。 兩個(gè)過(guò)濾器的語(yǔ)法和參數(shù)都相同 |
---|---|
語(yǔ)法 | settb=expr expr的結(jié)果是一個(gè)有理數(shù)管跺,可以包含下面描述的變量 |
表達(dá)式中可用的變量 | |
AVTB | 設(shè)置默認(rèn)時(shí)基值(AVTB =默認(rèn)時(shí)基) |
intb | 輸入時(shí)基 |
sr | 采樣率,僅適用于asettb |
下面的例子設(shè)置時(shí)基禾进,第一個(gè)設(shè)置為AVTB豁跑,第二個(gè)設(shè)置為0.3,第三個(gè)設(shè)置為輸入時(shí)基的1.5倍泻云。
ffmpeg input.mpg -vf settb=AVTB output.mpg
ffmpeg input.mpg -vf settb=0.3 output.mpg
ffmpeg input.mpg -vf settb=1.5*intb output.mpg
測(cè)試編碼功能
要為離散余弦亮度艇拍,色度狐蜕,亮度和色度的頻率和幅度等生成各種測(cè)試圖案,我們可以使用MPlayer項(xiàng)目中的mptestsrc濾鏡卸夕,該濾鏡在表中描述:
描述 | 生成與色度层释,亮度和其他視頻屬性相關(guān)的各種測(cè)試。 如果沒(méi)有參數(shù)使用快集,則會(huì)執(zhí)行所有測(cè)試贡羔,直到用戶(hù)停止該過(guò)程 |
---|---|
語(yǔ)法 | mptestsrc[=t=test_type[:d=duration[:r=rate]]] |
參數(shù)的描述 | |
test, t | - 所選測(cè)試的名稱(chēng),可用測(cè)試為dc_luma个初,dc_chroma乖寒,freq_luma,freq_chroma院溺,amp_luma楣嘁,amp_chroma,cbp覆获,mv马澈,ring1,ring2 - 默認(rèn)值是"all" |
duration, d | 以秒為單位或HH:MM:SS格式的測(cè)試持續(xù)時(shí)間 |
r | 幀率弄息,默認(rèn)值是25 |
下表說(shuō)明了特定測(cè)試值的樣本痊班。
模式 | 句法 | 圖片 |
---|---|---|
DC亮度 | mptest=t=dc_luma | |
DC色度 | mptest=t=dc_chroma | |
亮度頻率 | mptest=t=freq_luma | |
色度頻率 | mptest=t=freq_chroma | |
亮度幅度 | mptest=t=amp_luma | |
色度幅度 | mptest=t=amp_chroma | |
編碼塊模式(CBP) | mptest=t=cbp | |
運(yùn)動(dòng)矢量(MV) | mptest=t=mv | |
test ring 1 | mptest=t=ring1 | |
test ring 2 | mptest=t=ring2 |
測(cè)試模式
檢測(cè)各種錯(cuò)誤并為視頻測(cè)試提供源FFmpeg包含下面列出的3個(gè)特殊視頻源。 除顏色參數(shù)外摹量,它們與“圖像處理”章節(jié)“創(chuàng)建圖像”一節(jié)中介紹的顏色來(lái)源共享相同的參數(shù)涤伐。
RGB測(cè)試模式
要測(cè)試可用的RGB和BGR色彩空間是名為rgbtestsrc的視頻源
ffplay -f lavfi -i rgbtestsrc
滾動(dòng)漸變和時(shí)間戳的顏色模式
要生成類(lèi)似于TV模式的視頻模式,可以使用testsrc視頻源與命令:
ffplay -f lavfi -i testsrc
SMPTE條形圖案模式
可以使用以下命令創(chuàng)建來(lái)自電影和電視工程師協(xié)會(huì)(SMPTE)的彩條圖案:
ffplay -f lavfi -i testsrc
簡(jiǎn)單的數(shù)據(jù)包轉(zhuǎn)儲(chǔ)或有效負(fù)載(十六進(jìn)制)
為了更精確的調(diào)試缨称,也可以使用-hex選項(xiàng)轉(zhuǎn)儲(chǔ)有效負(fù)載凝果,通常使用-report選項(xiàng)將結(jié)果保存到當(dāng)前目錄中的文件。 使用此選項(xiàng)睦尽,處理速度非常慢器净,報(bào)告文件更大。 該命令的示例是:
ffmpeg -dump -hex -report -i input.mpg output.flv
CPU使用時(shí)間和內(nèi)存消耗
要在處理過(guò)程中顯示使用的CPU時(shí)間和內(nèi)存消耗当凡,我們可以使用產(chǎn)生類(lèi)似輸出的-benchmark或-benchmark_all選項(xiàng):
-benchmark選項(xiàng)顯示編碼后的結(jié)果
-
-benchmark_all以各種步驟顯示編碼過(guò)程中的結(jié)果
不支持最大內(nèi)存消耗數(shù)據(jù)的計(jì)算機(jī)系統(tǒng)將顯示0而不是數(shù)值山害。 這兩個(gè)選項(xiàng)都是全局選項(xiàng),并在命令的開(kāi)頭輸入沿量,例如:ffmpeg -benchmark -i input.avi output.webm
在控制臺(tái)輸出的末尾添加一條從工作臺(tái)開(kāi)始的行:utime表示在處理過(guò)程中CPU(計(jì)算機(jī)的中央處理單元)使用的時(shí)間浪慌。 benchmark_all選項(xiàng)顯示處理過(guò)程中的結(jié)果,完成后的屏幕顯示在下圖中朴则。
ffmpeg -benchmark_all -i input.avi output.mpg