再長(zhǎng)的視頻一眼看完

前言

周末在家無事秒旋,室友在聚精會(huì)神的看綜藝節(jié)目,時(shí)不時(shí)還暫停記下筆記裳涛。

我就問她在干嘛木张,她說接了一個(gè)活,是要統(tǒng)計(jì)節(jié)目中某個(gè)廣告出現(xiàn)的次數(shù)和時(shí)間调违,最后匯總成一個(gè)表格窟哺。

我說這還不簡(jiǎn)單,把視頻每一幀都截圖下來技肩,直接對(duì)著看就可以了呀。

所以你看浮声,當(dāng)程序員的好處就是可以隨便的信口開河虚婿,壞處就是自己說的話還是要自己去圓。

雖然說話的時(shí)候我也不知道怎么做這樣的事情泳挥,不過有萬能的谷歌和github然痊,相信不是什么難事。

FFmpeg

一開始搜索的關(guān)鍵詞是“chrome 視頻 截圖”屉符,想法是通過chrome插件的形式完成截圖剧浸。找到了一些現(xiàn)成的插件,但是關(guān)于原理性的東西基本沒有查到矗钟,而且flash播放器的截圖也都十分麻煩唆香,看起來不像是只用js就搞得定的事情,于是想到曲線救國(guó)吨艇,先把視頻弄到本地躬它,然后對(duì)本地的視頻文件做解析。果然就找到了一個(gè)類庫:FFmpeg

維基百科百度百科可以看到一些關(guān)于FFmpeg這個(gè)項(xiàng)目的介紹东涡。這是一個(gè)非常古老的項(xiàng)目冯吓,幾乎覆蓋了視頻解碼所有的需求,很有意思的是疮跑,項(xiàng)目有一個(gè)恥辱柱(Hall Of Shame)组贺,點(diǎn)名批評(píng)了很多使用了改項(xiàng)目,但是沒有遵循其開源協(xié)議的軟件祖娘,很多大家耳熟能詳?shù)牟シ牌鞫济衅渲小?/p>

(Hall Of Shame)
FFmpeg被許多開源項(xiàng)目采用失尖,比如ffmpeg2theora,VLC, MPlayer, HandBrake, Blender, Google Chrome等。還有DirectShow/VFW的ffdshow(external project)和QuickTime的Perian (external project)也采用了FFmpeg。

由于FFmpeg是在LGPL/GPL協(xié)議下發(fā)布的(如果使用了其中一些使用GPL協(xié)議發(fā)布的模塊則必須使用GPL協(xié)議)雹仿,任何人都可以自由使用增热,但必須嚴(yán)格遵守LGPL/GPL協(xié)議。有很多播放軟件都使用了FFmpeg的代碼胧辽,但它們并沒有遵守LGPL/GPL協(xié)議峻仇,沒有公開任何源代碼。我們應(yīng)該對(duì)這種侵權(quán)行為表示恥辱邑商。

2009年加入FFmpeg的播放軟件:暴風(fēng)影音摄咆、QQ影音、KMP人断、GOM Player吭从、PotPlayer(2010)都在其列。

2009年2月恶迈,韓國(guó)名軟KMPlayer被FFmpeg開源項(xiàng)目發(fā)現(xiàn)使用了它們的代碼和二進(jìn)制文件涩金,但是沒有按照規(guī)定/慣例開放相應(yīng)說明/源碼。因此被人舉報(bào)暇仲,進(jìn)入了FFmpeg官網(wǎng)上的恥辱黑名單步做。

2009年5月,網(wǎng)友cehoyos下載了暴風(fēng)影音軟件奈附,解壓之后發(fā)現(xiàn)其安裝程序內(nèi)包含了大量的開源和私有解碼器:avcodec全度,avformat,avutil斥滤,x264将鸵,xvid,bass佑颇,wmvdmod等顶掉,之后暴風(fēng)影音被正式加入到FFmpeg恥辱名單。

2009年7月22日漩符,陳俊豪(格式工廠作者)因用到了ffmpeg和RMVB的編碼庫一喘,用到了FFmpeg的譯碼/編碼算法,違反FFmpeg的LGPL協(xié)議嗜暴,登上了2009年7月22日FFmpeg的“恥辱柱”上凸克。

2009年11月,網(wǎng)友roo_zhou向FFmpeg舉報(bào)闷沥,指出QQ影音的credit只給出了修改的FFmpeg源碼下載萎战,聲稱是LGPL許可證。但實(shí)際是修改過的ffdshow舆逃,采用的是GPL許可證蚂维,之后QQ影音被正式加入到FFmpeg恥辱名單之列戳粒。

Libav項(xiàng)目啟動(dòng)之后,F(xiàn)Fmpeg官方版本也仍然在一直維護(hù)中虫啥。FFmpeg與libav屬于獨(dú)立的兩個(gè)項(xiàng)目蔚约。

ffmpeg提供了控制臺(tái)的版本,在官網(wǎng)提供下載涂籽,自然而然會(huì)想到苹祟,是不是有nodejs的版本,于是上npm搜索评雌,找到了幾個(gè)相關(guān)的類庫树枫,分別點(diǎn)進(jìn)github主頁,從中挑選了一個(gè)star數(shù)最多的項(xiàng)目node-fluent-ffmpeg(截止發(fā)文時(shí)景东,Star1543)

node-fluent-ffmpeg還是要依賴控制臺(tái)版的FFmpeg砂轻。

去官網(wǎng)下載一個(gè)build版的FFmpeg(以windows為例)
在打開的頁面中,選擇static版
添加解壓路徑到環(huán)境變量中

這時(shí)在cmd中輸入ffmpeg斤吐,應(yīng)該可以看到版本信息


在項(xiàng)目文件夾內(nèi)輸入npm i node-fluent-ffmpeg -save引入類庫搔涝,cd. >index.js創(chuàng)建新的腳本文件,準(zhǔn)備開工曲初。

腳本編寫

在FFmpeg的github項(xiàng)目頁有很詳細(xì)的文檔体谒,我們需要的是截屏功能,也就是screenshot臼婆,直接在頁內(nèi)搜索關(guān)鍵字,然后我們可以看到示例代碼如下:

獲取截屏

ffmpeg('/path/to/video.avi')
  .on('filenames', function(filenames) {
    console.log('Will generate ' + filenames.join(', '))
  })
  .on('end', function() {
    console.log('Screenshots taken');
  })
  .screenshots({
    // Will take screens at 20%, 40%, 60% and 80% of the video
    count: 4,
    folder: '/path/to/output'
  });

ffmpeg('/path/to/video.avi')
  .screenshots({
    timestamps: [30.5, '50%', '01:10.123'],
    filename: 'thumbnail-at-%s-seconds.png',
    folder: '/path/to/output',
    size: '320x240'
  });

可以看到幌绍,操作是流式的颁褂,截圖可以自定義時(shí)間,文件名傀广,輸出路徑和尺寸颁独。

我們的思路是,把截圖功能封裝成一個(gè)函數(shù)伪冰,把每一秒作為時(shí)間參數(shù)傳入誓酒,同時(shí)也把格式化后的時(shí)間作為文件名進(jìn)行保存。

獲取視頻信息

ffmpeg.ffprobe('VIDEO_NAME', function(err, metadata) {
    console.log(metadata);
    console.log(metadata.format.duration);
});

metadata可以拿到很多視頻相關(guān)的信息贮聂,我們目前就只需要視頻長(zhǎng)度

完整代碼的:傳送門

完成之后大概是這個(gè)效果


每一幀都是按時(shí)間命名的靠柑,可以方便的檢索到內(nèi)容。如果對(duì)時(shí)間精度要求比較高吓懈,F(xiàn)Fmpeg是支持到毫秒級(jí)的截圖歼冰。

結(jié)尾

這個(gè)東西除了給室友用來看廣告以外還能有什么用處呢,我大概想了幾個(gè)方向耻警。

比如可以把下載的教育視頻(真的是說教育視頻)截圖隔嫡,直接選取有PPT的幾頁保存下來甸怕,可以快速的得到課堂筆記。

或者做電影簡(jiǎn)介之類的文章腮恩,可以快速的找到關(guān)鍵劇情的截圖梢杭,拼接出文章。

其他的暫時(shí)就想不到什么更有意義的事情了秸滴。

閑來無事武契,我把下載下來的葫蘆娃跑了一下腳本。

發(fā)現(xiàn)真的是一部葫蘆娃缸榛。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末吝羞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子内颗,更是在濱河造成了極大的恐慌钧排,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件均澳,死亡現(xiàn)場(chǎng)離奇詭異恨溜,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)找前,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門糟袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人躺盛,你說我怎么就攤上這事项戴。” “怎么了槽惫?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵周叮,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我界斜,道長(zhǎng)仿耽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任各薇,我火速辦了婚禮项贺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峭判。我一直安慰自己开缎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布朝抖。 她就那樣靜靜地躺著啥箭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪治宣。 梳的紋絲不亂的頭發(fā)上急侥,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天砌滞,我揣著相機(jī)與錄音,去河邊找鬼坏怪。 笑死贝润,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铝宵。 我是一名探鬼主播打掘,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鹏秋!你這毒婦竟也來了尊蚁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤侣夷,失蹤者是張志新(化名)和其女友劉穎横朋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體百拓,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琴锭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衙传。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片决帖。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蓖捶,靈堂內(nèi)的尸體忽然破棺而出地回,到底是詐尸還是另有隱情,我是刑警寧澤俊鱼,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布落君,位于F島的核電站,受9級(jí)特大地震影響亭引,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜皮获,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一焙蚓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洒宝,春花似錦购公、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至靠瞎,卻和暖如春比庄,著一層夾襖步出監(jiān)牢的瞬間求妹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工佳窑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留制恍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓神凑,卻偏偏與公主長(zhǎng)得像净神,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子溉委,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容