需求

使用ffmpeg可以非常方便的生成視頻截圖,ffmpeg 通過(guò)指定 -vcodec 參數(shù)為 mjpeg,或者指定 -f 參數(shù)為 mjpeg時(shí),可以輸出 jpg截圖,指定 -vcodec參數(shù)為png,或者指定輸出文件擴(kuò)展名為png,可輸出png截圖。如果參數(shù)指定不當(dāng),會(huì)導(dǎo)致ffmpeg處理速度非常緩慢。

截取視頻的第幾秒。通過(guò) -ss 參數(shù)指定,但要注意看到最后的幾個(gè)例子,否者會(huì)很慢哦。

輸出 jpg

ffmpeg -i RevolutionOS.rmvb sample.jpg -ss 00:00:05  -r 1 -vframes 1 -an -vcodec mjpeg 

輸出 png

ffmpeg -i RevolutionOS.rmvb sample.png -ss 00:00:05  -r 1 -vframes 1 -an -vcodec mjpeg

大概等待1秒鐘,生成的jpg圖像為19K,而png格式的圖像為222k,大了很多倍,而質(zhì)量上,并沒(méi)有太大的差別,所以我決定生成jpg格式。

好現(xiàn)在抓取時(shí)間為1分05秒處的圖片:

ffmpeg -i RevolutionOS.rmvb sample.jpg -ss 00:01:05  -r 1 -vframes 1 -an -vcodec mjpeg

幾乎等待了近10秒鐘,實(shí)際上,如果你抓取50分鐘處的圖像,可能要等上十幾分鐘,而很多網(wǎng)上通用的寫(xiě)法都存在這個(gè)問(wèn)題,所以有的人轉(zhuǎn)而采用mplayer來(lái)截屏,這個(gè)問(wèn)題可能是ffmpeg的一個(gè)bug,如果你夠聰明,調(diào)整一下參數(shù) -ss,把這個(gè)參數(shù)放到第一個(gè)位置,馬上就可以解決這個(gè)問(wèn)題。

50分鐘處截屏

ffmpeg -ss 00:50:00  -i RevolutionOS.rmvb sample.jpg  -r 1 -vframes 1 -an -vcodec mjpeg 

或者使用 -f 參數(shù)指定輸出的格式為 mjpeg ,效果一樣

ffmpeg -ss 00:50:00  -i RevolutionOS.rmvb sample.jpg  -r 1 -vframes 1 -an -f mjpeg

速度快的,幾乎不到1秒鐘。到底為什么會(huì)這樣?可能是ffmpeg看到第一個(gè)參數(shù)為 -ss的時(shí)候,馬上跳轉(zhuǎn)到時(shí)間線為50分鐘處然后再打開(kāi)視頻文件進(jìn)行處理,而如果最后看到的參數(shù)是-ss,先打開(kāi)視頻,然后慢慢往后遍歷,直到遍歷到時(shí)間為50分鐘處,通過(guò)觀察ffmpeg的輸出發(fā)現(xiàn),實(shí)際處理的時(shí)候幾乎就是這樣。