#波導(dǎo)的效率私房# 10 最強MKV,F(xiàn)LV轉(zhuǎn)MP4方法

大家好,我是波導(dǎo)終結(jié)者。
最近知乎又老是被推送到一堆MKV、FLV格式視頻的問題,無外乎就是設(shè)備不兼容無法播放、非線編軟件(VEGAS、PR等)無法支持或者支持不完美之類的,今天就來跟大家聊一聊MKV(FLV同)轉(zhuǎn)MP4的無敵方法。
MKV和FLV之所以不受支持,核心原因還是格式特殊,要不然誰不想支持。太過技術(shù)核心的東西不想在這里聊,簡單來說,F(xiàn)LV為流媒體而優(yōu)化,與非線編的需求有點沖突;而MKV從結(jié)構(gòu)上更類似于壓縮包,這個就走得更遠了。

由于容器結(jié)構(gòu)本質(zhì)的不同,播放器倒還好,能兼容的越來越多,而非線編軟件基本就是再見的節(jié)奏。VEGAS在最近幾個版本中引入了MKV Reader,可以直接使用MKV文件,但是本質(zhì)上,“壓縮包”要使用里面的內(nèi)容是必須要解壓的,這個功能只是在后臺先把MKV解包,再生成一個臨時文件檢索,不僅卡,而且有時候音畫不同步,所以意義不大。原則上,把MKV重封裝成MP4還是最好的辦法。
之前《FFmpeg高級技巧》一文里,跟大家分享過把多音軌、多字幕的MKV文件,精簡到單音軌并重封裝進MP4的方法,但是看起來有點復(fù)雜。這次再來一個實例,重封裝MKV文件。

事情的起因是這樣的:武林外傳被愛奇藝買斷,之前京東充PLUS會員綁了幾年愛奇藝會員,想看的時候都還能看到。但是上個月,會員到期了,我也不打算再續(xù)會員,原因大家都懂的:VIP會員還有四五種廣告輪番轟炸,那我要你這個會員干什么呢?找客服,客服說:“這不是廣告,這是VIP專屬推薦。”哦,我還得謝謝你給我推薦各種XX玩意了?!是不是看了“專屬推薦”還要倒貼給你錢???謝謝你全家哦。
解決辦法也不難,自己找源下載到本地看唄。下載完我又被惡心了一遍:這視頻里竟然夾廣告的。
這時候,無非兩種情況:第一,這廣告是壓制到了視頻上面去的,這種情況只能另找源,或者強忍惡心。第二,這廣告是字幕文件,那就簡單了,去掉即可。
初步判斷,情況二的可能性比較大。原因也很簡單:壓到視頻上需要重編碼,極其耗時,而字幕文件只需要重封裝,快得很。

判斷的方法很簡單:視頻播放器取消字幕顯示,立馬可見。還好,這次這家伙比較懶,用的是重封裝的形式,省得我重新下載了。

知道了字幕文件可以剔除之后,我們便可以將字幕文件反選,然后再輸出新的MKV文件即可。不過,MKVTool好像并不支持簡單的批量操作(得一個一個手動選,添加隊列,再批量處理),還是稍微有點麻煩。

用MKVExtract可以把里面的東西單獨提取出來(樓上那個MKVTool也能提,但是外面還會有一層MKV容器,因為本質(zhì)上它是用來把東西封進MKV里的)。

提取出來的srt文件如上,哈哈,小樣兒,你也就這兩行的志氣。

上腳本,80集一共28G,光是復(fù)制就要花不少時間了,處理起來效果如何呢?

同盤輸入輸出,291倍速,不過由于是在機械硬盤里操作,感覺嚴重受到了機械硬盤性能的限制。

看一下任務(wù)管理器的性能監(jiān)控,確實是這樣,D盤占用已經(jīng)吃滿,而CPU基本閑著。

這次我手動設(shè)置目錄,把D盤的源文件處理之后,輸出到C盤里,C盤是塊NVME盤,性能肯定高出不少。這次的速度升到了717倍,個人感覺還是被機械盤拖了后腿。

看看性能,果然還是。HDD讀取基本滿載,CPU單核(腳本也只能跑單核)跑了差不多一半,而nvme盤時不時的寫入,基本也是閑著。HDD的曲線和SSD不一樣,一直是頂滿的,說明文件剛讀完,CPU處理完馬上寫入SSD然后就又開始讀下個文件了,可憐的機械盤都沒閑過。
如果用兩個SSD一進一出的話,速度估計還能翻個倍(受限于單核CPU性能)。反正現(xiàn)在這樣也只花了3分多鐘就全部處理完了。

好了,大家最關(guān)心的腳本來了,跟上次處理多音軌文件其實差不多,這里加了一些改進。按照123的順序來跟大家簡單講解一下。
語法順序是先輸入源,再定義輸出。所以紅線處1指向的是MKV文件的0軌也即視頻,后面的copy就是不重新編碼,只復(fù)制流。藍線2處指向的是MKV文件的1軌也即音頻。3處的~ni表示只取文件名的前綴(只寫i的話會把.mkv也算進去)。
有的朋友可能要問了,為什么還要把前綴和后綴分開呢?那當然不是多此一舉。
FFmpeg很智能的,你后綴是什么,就給你用什么封裝。假設(shè)現(xiàn)在,你想把MKV文件封裝成MP4文件,只要把set hz=.mkv,改成mp4即可,這樣輸出的就是與原文件名一樣的.mp4文件。如果不分開的話,后綴會變成.mkv.mp4……
同理,如果想把FLV封裝成mp4,這個腳本只要把(*.mkv)改成(*.flv),前面后綴改成.mp4即可,表示只讀取文件夾內(nèi)所有FLV文件。
這個方法只要文件有規(guī)律,來多少都是一個腳本的事兒,然后就坐著等就行。只要音頻和視頻流的格式受支持,想從什么容器轉(zhuǎn)成另一種容器都沒有問題,只需要按需求改一下腳本細節(jié)即可。MKV轉(zhuǎn)MP4,F(xiàn)LV轉(zhuǎn)MP4,或者隨便互轉(zhuǎn)都不是問題。
老是有小伙伴問說有沒有一鍵工具,但我一直希望分享解決思路給大家,因為需求各不相同,怎么可能有不付出任何勞動,不做任何操作就能實現(xiàn)所有需求的方法呢?換個壁紙還得點幾下不是?

感謝大家觀看,如果對你有用,點個關(guān)注贊三連唄。如果還想了解其他內(nèi)容,也不妨評論交流。我們下期再見。