失蹤人口迴歸!
最近在研究一個叫做視頻關鍵幀的東西,我現在鹹魚得不行,懶得寫那麼多東西。
再次強調,這篇博客是寫給自己看的,就比較糙了。
簡單來說關鍵幀就是一種很關鍵的幀,哈哈哈我開玩笑的。嚴肅一點,目前市場主流的視頻壓縮算法叫做H264編碼,這個編碼把幀分成三種:
Inter Frame(I幀)
P-Frame(P幀)
B-Frame(B幀)
其中呢,I幀也叫關鍵幀,它有完整的圖像,其他兩種幀沒有完整的圖像,都要依靠於它生成完成的圖像。
所以一個視頻的I幀越少,視頻就越小。
原理到此結束,下面介紹兩個東西FFmpeg讀取視頻關鍵幀和增加視頻關鍵幀。
先看看如何輸出一個視頻的關鍵幀數量,首先要去下載一個叫做ffmpeg的工具。
mac下命令行:
ffmpeg -i video_name_output.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 750*1334 -f image2 core-%02d.jpeg
上面要注意視頻路徑、文件名、分辨率都要對上。
然後再看看如何添加一個視頻的關鍵幀
mac下命令行:
ffmpeg -i "/path/mmp.mp4" -c:v libx264 -preset superfast -x264opts keyint=25 -acodec copy -f mp4 "/path/out.mp4"
如果是windows,那麼就在ffmpeg後面加上.exe
ffmpeg.exe -i "/path/mmp.mp4" -c:v libx264 -preset superfast -x264opts keyint=25 -acodec copy -f mp4 "/path/out.mp4"
一些後話:
爲什麼我會研究這個東西呢,因爲最近調試了ios和安卓的工程(輪子當然不是我造的,我這麼菜,就是簡單地修修改改),該工程能實現的需求很簡單,就是模仿一些小清新的app,把登錄頁背景從原來的靜態圖換成視頻。
但是發現後臺回前臺時,視頻會卡頓,不能接着上一幀視頻流暢地播放。爲什麼呢?問了一下大佬,大佬跟我說有個東西叫關鍵幀,自己去查吧。
原來,用視頻做登錄頁背景,然後後臺回前臺時,會自動定位到離剛剛離開時的幀最近的一個關鍵幀,所以視覺效果上會有卡頓的現象。
同理,在你看b站時,手動拉拽進度條,不一定能定位到你定位的那一秒,可能也是因爲那一秒沒有關鍵幀,所以跑去離那一秒最近的一個關鍵幀了,yeah。
參考文獻:
https://zhuanlan.zhihu.com/p/28369983
https://www.jianshu.com/p/f51b2febcfd2
https://maxwellqi.github.io/ios-h264-summ/
https://chuansongme.com/n/357427751042
https://blog.csdn.net/qq_32817785/article/details/87893334