大家好,我是波導(dǎo)終結(jié)者。
最近知乎又老是被推送到一堆MKV、FLV格式視頻的問(wèn)題,無(wú)外乎就是設(shè)備不兼容無(wú)法播放、非線編軟件(VEGAS、PR等)無(wú)法支持或者支持不完美之類的,今天就來(lái)跟大家聊一聊MKV(FLV同)轉(zhuǎn)MP4的無(wú)敵方法。
MKV和FLV之所以不受支持,核心原因還是格式特殊,要不然誰(shuí)不想支持。太過(guò)技術(shù)核心的東西不想在這里聊,簡(jiǎn)單來(lái)說(shuō),F(xiàn)LV為流媒體而優(yōu)化,與非線編的需求有點(diǎn)沖突;而MKV從結(jié)構(gòu)上更類似于壓縮包,這個(gè)就走得更遠(yuǎn)了。
由于容器結(jié)構(gòu)本質(zhì)的不同,播放器倒還好,能兼容的越來(lái)越多,而非線編軟件基本就是再見的節(jié)奏。VEGAS在最近幾個(gè)版本中引入了MKV Reader,可以直接使用MKV文件,但是本質(zhì)上,“壓縮包”要使用里面的內(nèi)容是必須要解壓的,這個(gè)功能只是在后臺(tái)先把MKV解包,再生成一個(gè)臨時(shí)文件檢索,不僅卡,而且有時(shí)候音畫不同步,所以意義不大。原則上,把MKV重封裝成MP4還是最好的辦法。
之前《FFmpeg高級(jí)技巧》一文里,跟大家分享過(guò)把多音軌、多字幕的MKV文件,精簡(jiǎn)到單音軌并重封裝進(jìn)MP4的方法,但是看起來(lái)有點(diǎn)復(fù)雜。這次再來(lái)一個(gè)實(shí)例,重封裝MKV文件。
事情的起因是這樣的:武林外傳被愛奇藝買斷,之前京東充PLUS會(huì)員綁了幾年愛奇藝會(huì)員,想看的時(shí)候都還能看到。但是上個(gè)月,會(huì)員到期了,我也不打算再續(xù)會(huì)員,原因大家都懂的:VIP會(huì)員還有四五種廣告輪番轟炸,那我要你這個(gè)會(huì)員干什么呢?找客服,客服說(shuō):“這不是廣告,這是VIP專屬推薦?!迸?,我還得謝謝你給我推薦各種XX玩意了?!是不是看了“專屬推薦”還要倒貼給你錢啊?謝謝你全家哦。
解決辦法也不難,自己找源下載到本地看唄。下載完我又被惡心了一遍:這視頻里竟然夾廣告的。
這時(shí)候,無(wú)非兩種情況:第一,這廣告是壓制到了視頻上面去的,這種情況只能另找源,或者強(qiáng)忍惡心。第二,這廣告是字幕文件,那就簡(jiǎn)單了,去掉即可。
初步判斷,情況二的可能性比較大。原因也很簡(jiǎn)單:壓到視頻上需要重編碼,極其耗時(shí),而字幕文件只需要重封裝,快得很。
判斷的方法很簡(jiǎn)單:視頻播放器取消字幕顯示,立馬可見。還好,這次這家伙比較懶,用的是重封裝的形式,省得我重新下載了。
知道了字幕文件可以剔除之后,我們便可以將字幕文件反選,然后再輸出新的MKV文件即可。不過(guò),MKVTool好像并不支持簡(jiǎn)單的批量操作(得一個(gè)一個(gè)手動(dòng)選,添加隊(duì)列,再批量處理),還是稍微有點(diǎn)麻煩。
用MKVExtract可以把里面的東西單獨(dú)提取出來(lái)(樓上那個(gè)MKVTool也能提,但是外面還會(huì)有一層MKV容器,因?yàn)楸举|(zhì)上它是用來(lái)把東西封進(jìn)MKV里的)。
提取出來(lái)的srt文件如上,哈哈,小樣兒,你也就這兩行的志氣。
上腳本,80集一共28G,光是復(fù)制就要花不少時(shí)間了,處理起來(lái)效果如何呢?
同盤輸入輸出,291倍速,不過(guò)由于是在機(jī)械硬盤里操作,感覺嚴(yán)重受到了機(jī)械硬盤性能的限制。
看一下任務(wù)管理器的性能監(jiān)控,確實(shí)是這樣,D盤占用已經(jīng)吃滿,而CPU基本閑著。
這次我手動(dòng)設(shè)置目錄,把D盤的源文件處理之后,輸出到C盤里,C盤是塊NVME盤,性能肯定高出不少。這次的速度升到了717倍,個(gè)人感覺還是被機(jī)械盤拖了后腿。
看看性能,果然還是。HDD讀取基本滿載,CPU單核(腳本也只能跑單核)跑了差不多一半,而nvme盤時(shí)不時(shí)的寫入,基本也是閑著。HDD的曲線和SSD不一樣,一直是頂滿的,說(shuō)明文件剛讀完,CPU處理完馬上寫入SSD然后就又開始讀下個(gè)文件了,可憐的機(jī)械盤都沒閑過(guò)。
如果用兩個(gè)SSD一進(jìn)一出的話,速度估計(jì)還能翻個(gè)倍(受限于單核CPU性能)。反正現(xiàn)在這樣也只花了3分多鐘就全部處理完了。
好了,大家最關(guān)心的腳本來(lái)了,跟上次處理多音軌文件其實(shí)差不多,這里加了一些改進(jìn)。按照123的順序來(lái)跟大家簡(jiǎn)單講解一下。
語(yǔ)法順序是先輸入源,再定義輸出。所以紅線處1指向的是MKV文件的0軌也即視頻,后面的copy就是不重新編碼,只復(fù)制流。藍(lán)線2處指向的是MKV文件的1軌也即音頻。3處的~ni表示只取文件名的前綴(只寫i的話會(huì)把.mkv也算進(jìn)去)。
有的朋友可能要問(wèn)了,為什么還要把前綴和后綴分開呢?那當(dāng)然不是多此一舉。
FFmpeg很智能的,你后綴是什么,就給你用什么封裝。假設(shè)現(xiàn)在,你想把MKV文件封裝成MP4文件,只要把set hz=.mkv,改成mp4即可,這樣輸出的就是與原文件名一樣的.mp4文件。如果不分開的話,后綴會(huì)變成.mkv.mp4……
同理,如果想把FLV封裝成mp4,這個(gè)腳本只要把(*.mkv)改成(*.flv),前面后綴改成.mp4即可,表示只讀取文件夾內(nèi)所有FLV文件。
這個(gè)方法只要文件有規(guī)律,來(lái)多少都是一個(gè)腳本的事兒,然后就坐著等就行。只要音頻和視頻流的格式受支持,想從什么容器轉(zhuǎn)成另一種容器都沒有問(wèn)題,只需要按需求改一下腳本細(xì)節(jié)即可。MKV轉(zhuǎn)MP4,F(xiàn)LV轉(zhuǎn)MP4,或者隨便互轉(zhuǎn)都不是問(wèn)題。
老是有小伙伴問(wèn)說(shuō)有沒有一鍵工具,但我一直希望分享解決思路給大家,因?yàn)樾枨蟾鞑幌嗤?,怎么可能有不付出任何勞?dòng),不做任何操作就能實(shí)現(xiàn)所有需求的方法呢?換個(gè)壁紙還得點(diǎn)幾下不是?
感謝大家觀看,如果對(duì)你有用,點(diǎn)個(gè)關(guān)注贊三連唄。如果還想了解其他內(nèi)容,也不妨評(píng)論交流。我們下期再見。