寫在前面
如果您對(duì)音視頻技術(shù)感興趣,可以訂閱我的專題:
音視頻專輯也可以關(guān)注我的簡(jiǎn)書賬戶:
張芳濤,我后期會(huì)發(fā)布更多的音視頻以及圖像處理方面的文章。
正文
隔行掃描是在單色模擬電視開(kāi)發(fā)過(guò)程中發(fā)明的技術(shù),可以消除舊CRT顯示器的閃爍。 視頻幀被水平劃分為規(guī)則線,然后劃分為2個(gè)場(chǎng),其中第一個(gè)場(chǎng)包含奇數(shù)行,第二個(gè)場(chǎng)包含偶數(shù)行。
NTSC, PAL和SECAM電視標(biāo)準(zhǔn)。
在NTSC標(biāo)準(zhǔn)中,幀有525行,其中483是可見(jiàn)的,其他幀用于同步,垂直回掃等。幀頻30fps意味著每秒60場(chǎng),這對(duì)應(yīng)于美國(guó)交流電60Hz頻率,并且防止 互調(diào),屏幕上滾動(dòng)條的可能來(lái)源。 由于120個(gè)國(guó)家的50赫茲電力頻率使用PAL或SECAM標(biāo)準(zhǔn)(非洲,阿根廷,亞洲,澳大利亞,巴西,歐洲等)。 這個(gè)標(biāo)準(zhǔn)使用25幀/秒的幀率,50場(chǎng)和更高的分辨率,625條掃描線。 表中描述了NTSC和PAL / SECAM標(biāo)準(zhǔn)的比較:
在電視標(biāo)準(zhǔn)中隔行掃描視頻幀
功能NTSCPAL, SECAM
掃描的行數(shù)525625
可見(jiàn)掃描行483576
每秒幀數(shù)3025
每秒場(chǎng)數(shù)6050
FFmpeg包含多個(gè)過(guò)濾器和選項(xiàng),可以更改幀類型和字段順序,將視頻從隔行轉(zhuǎn)換為漸進(jìn)等。
下圖說(shuō)明了NTSC,PAL和SECAM標(biāo)準(zhǔn)的全球使用情況,但近年來(lái)它們已被數(shù)字電視標(biāo)準(zhǔn)取代,詳情請(qǐng)參閱本章的最后一節(jié)。
隔行幀類型設(shè)置
當(dāng)使用本章描述的fieldorder和yadif過(guò)濾器時(shí),在使用多個(gè)過(guò)濾器進(jìn)行復(fù)雜轉(zhuǎn)碼時(shí),使用setfield過(guò)濾器設(shè)置輸出幀的字段類型可能很有用:
描述在輸出幀中標(biāo)記隔行場(chǎng)的類型,幀的內(nèi)容不變,只更新其屬性。 對(duì)于下一個(gè)使用fieldorder和yadif等過(guò)濾器進(jìn)行處理的過(guò)濾鏈非常有用。
語(yǔ)法setfield=type
類型的數(shù)值
auto不要標(biāo)記任何東西,默認(rèn)值
bff幀首先是底部的場(chǎng)
tff幀首先是頂部的場(chǎng)
prog幀是漸進(jìn)的
例如,要首先將字段類型設(shè)置為頂部字段,我們可以使用以下命令:
ffmpeg -i input.vob -vf setfield=tff output.mov
我的測(cè)試命令:
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf setfield=tff /Users/zhangfangtao/Desktop/test2.mp4
看不出來(lái)有啥不一樣。。。。。。
交錯(cuò)視頻的字段順序更改
以PAL DV格式編碼的視頻先與底部字段交錯(cuò),而字段順序?yàn)V鏡可以在從其他隔行格式轉(zhuǎn)碼或轉(zhuǎn)碼時(shí)改變它。
描述將隔行掃描視頻輸入的字段順序從底部字段首先改變?yōu)轫敳孔侄危粗嗳弧?變換將幀內(nèi)容向上或向下移動(dòng)1行,并用適當(dāng)?shù)膸瑑?nèi)容填充剩余的行。 該方法符合大多數(shù)廣播場(chǎng)序轉(zhuǎn)換器。 如果輸入不是交錯(cuò)的,或者其字段順序與命令中設(shè)置的相同,則輸入不會(huì)被更改。
語(yǔ)法fieldorder[=order_type]
order_type參數(shù)值
0 或者 bff底部區(qū)域優(yōu)先
1或者 tff頂部區(qū)域優(yōu)先,默認(rèn)值
例如,要將隔行視頻從DVD(VOB格式)轉(zhuǎn)換為DV(數(shù)字視頻)格式,我們可以使用以下命令:
ffmpeg -i dvd.vob -vf fieldorder=0 output.dv
我的測(cè)試命令:
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf fieldorder=0 /Users/zhangfangtao/Desktop/test2.mp4
去隔行
隔行掃描視頻是為模擬CRT顯示器開(kāi)發(fā)的,不能在像LCD,等離子顯示器等漸進(jìn)式數(shù)字顯示器上重現(xiàn)。必須使用某些硬件或軟件實(shí)用工具對(duì)其進(jìn)行去隔行掃描,這意味著將相應(yīng)的字段合并到完整的視頻幀中, 到輸出視頻流。
yadif過(guò)濾器
FFmpeg包含一個(gè)名為yadif的特殊濾波器(又一個(gè)去隔行濾波器),提供對(duì)輸入的隔行掃描,但是由于隔行掃描源無(wú)法完全恢復(fù),所以導(dǎo)致視頻質(zhì)量低于原始掃描。
描述yadif = Yet Another DeInterlacing Filter
語(yǔ)法yadif[=mode[:parity[:auto]]]
參數(shù)
mode隔行掃描模式下,有4個(gè)整數(shù)值可用:
0 - 每幀輸出1幀,默認(rèn)值
1 - 為每個(gè)字段輸出1幀
2 - 類似于0,但空間隔行掃描檢查被跳過(guò)
3 - 像1,但是空間隔行檢查被跳過(guò)
parity輸入隔行視頻的圖像場(chǎng)奇偶校驗(yàn),3個(gè)整數(shù)值可用:
0 - 頂部場(chǎng)優(yōu)先,如果交錯(cuò)未知,則為默認(rèn)值
1 - 底部區(qū)域優(yōu)先
-1 - 啟用自動(dòng)檢測(cè),默認(rèn)值
auto設(shè)置哪些幀是去隔行的,一個(gè)布爾值:
0 - 所有幀,默認(rèn)值
1 - 僅標(biāo)記為隔行的幀
例如,要對(duì)movie.avi文件進(jìn)行去隔行處理,我們可以使用以下命令:
ffmpeg -i movie.avi -vf yadif movie-progressive.mov
我的測(cè)試命令:
ffmpeg -i /Users/zhangfangtao/Desktop/test.mp4 -vf yadif /Users/zhangfangtao/Desktop/test2.mp4
反隔行選項(xiàng)
此選項(xiàng)沒(méi)有參數(shù)并提供視頻幀的解除隔行掃描,但由于質(zhì)量較差,建議使用yadif或其他反隔行掃描濾鏡。
從MPlayer項(xiàng)目中去隔行掃描
MPlayer項(xiàng)目包含多個(gè)設(shè)計(jì)用于解隔行的濾波器,包括detc,divtc,ivtc,mcdeint,pullup,softpulldown,softskip等。此濾波器使用mp濾波器的實(shí)驗(yàn)包裝,質(zhì)量并非總是最佳。 例如,要使用ivtc過(guò)濾器對(duì)輸入進(jìn)行隔行掃描,我們可以使用以下命令:
ffmpeg -i input.mpg -vf mp=ivtc output.mp4
我編譯的環(huán)境不支持mp這個(gè)參數(shù)
Pullup過(guò)濾器
MPlayer項(xiàng)目的pullup過(guò)濾器的設(shè)計(jì)要比detc或ivtc過(guò)濾器更健壯,因?yàn)樗昧宋磥?lái)的上下文來(lái)進(jìn)行決策。與ivtc一樣,pullup是無(wú)狀態(tài)的,因?yàn)樗鼪](méi)有鎖定一個(gè)模式來(lái)遵循,但是它期待著下面的字段來(lái)識(shí)別匹配和重建進(jìn)程框架。
描述第三代拉低反轉(zhuǎn)(反轉(zhuǎn)電視)過(guò)濾器,能夠處理混合的硬電視,24000/1001 fps的進(jìn)步,和30000/1001 fps的進(jìn)步內(nèi)容。在編碼時(shí),需要使用softskip過(guò)濾器,以確保pullup能夠看到每個(gè)幀。如果不這樣做,將導(dǎo)致錯(cuò)誤的輸出,并且通常會(huì)崩潰,這是由于編解碼器/過(guò)濾層的設(shè)計(jì)限制
語(yǔ)法mp=pullup[=jl:jr:jt:jb:sb:mp]
參數(shù)的描述
jt
jl jr
jb這些選項(xiàng)設(shè)置“垃圾”的數(shù)量分別在圖像的左邊、右邊、頂部和底部。左/右為8個(gè)像素單元,頂部/底部為2行單元。默認(rèn)值是每邊8個(gè)像素
sbStrick break選項(xiàng),將其設(shè)置為1將減少產(chǎn)生偶爾不匹配的幀的機(jī)會(huì),但是它也可能導(dǎo)致在高動(dòng)作序列中被丟棄的幀數(shù)過(guò)多。相反,將其設(shè)置為1將更容易地使pullup匹配字段。這可能有助于處理在字段之間有輕微模糊的視頻,但也可能導(dǎo)致輸出中有交錯(cuò)的幀
mpMetric平面選項(xiàng),它可以被設(shè)置為1或2,以使用色度平面而不是luma面來(lái)做拉升的計(jì)算。這可能提高非常清潔的源材料的準(zhǔn)確性,但更有可能降低準(zhǔn)確性,特別是如果有色度噪聲(彩虹效應(yīng))或任何灰度視頻。將mp設(shè)置為chroma平面的主要目的是減少CPU負(fù)載,并在慢速機(jī)器上實(shí)時(shí)地進(jìn)行拉升
輸入的高度必須能被4整除,建議使用setpts過(guò)濾器來(lái)更改表示時(shí)間戳。例如,在電影中,把一個(gè)電視電影的視頻從film.vob文件刪除,我們可以使用命令:
ffmpeg -i film.vob -qscale 2 -vf ^ mp=pullup=4:4:20:20:-1:0,mp=softskip,setpts=N/(24000/1001*TB) ^ -r 24001/1001 film.avi
交錯(cuò)的視頻和數(shù)字電視
近年來(lái),使用交錯(cuò)視頻格式的模擬電視廣播被采用一種漸進(jìn)格式的數(shù)字電視標(biāo)準(zhǔn)取代。數(shù)字電視提供更高的質(zhì)量,更多的頻道以相同的帶寬傳輸。雖然主要傳輸格式是MPEG傳輸流(MPEG-2第1部分中指定的容器),但在ATSC和DVB標(biāo)準(zhǔn)中仍然支持交錯(cuò)視頻。下一幅圖展示了2012年全球數(shù)碼電視的使用情況:
MPEG傳輸流(MPEG- ts)有一個(gè).ts文件擴(kuò)展名,它的格式(muxer)是mpegts,所以對(duì)于這種格式的多路輸出,我們可以使用以下命令:
ffmpeg -i input.avi -f mpegts output.ts