使用ffmpeg能夠很是方便的生成視頻截圖,命令行下的mplayer也能夠作視頻截圖,只不過mplayer在本質上仍是調用ffmpeg來實現。ffmpeg 經過指定 -vcodec 參數爲 mjpeg,或者指定 -f 參數爲 mjpeg時,能夠輸出 jpg截圖,指定 -vcodec參數爲png,或者指定輸出文件擴展名爲png,可輸出png截圖。若是參數指定不當,會致使ffmpeg處理速度很是緩慢,以我本機影片《Revolution OS》中文名《操做系統的革命》爲例。
截取視頻的第5秒。經過 -ss 參數指定 spa
# 輸出 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,大了不少倍,而質量上,並無太大的差異,因此我決定生成jpg格式。 操作系統
好如今抓取時間爲1分05秒處的圖片: 命令行
ffmpeg -i RevolutionOS.rmvb sample.jpg -ss 00:01:05 -r 1 -vframes 1 -an -vcodec mjpeg
幾乎等待了近10秒鐘,實際上,若是你抓取50分鐘處的圖像,可能要等上十幾分鍾,而不少網上通用的寫法都存在這個問題,因此有的人轉而採用mplayer來截屏,這個問題多是ffmpeg的一個bug,若是你夠聰明,調整一下參數 -ss,把這個參數放到第一個位置,立刻就能夠解決這個問題。 code
# 50分鐘處截屏 ffmpeg -ss 00:50:00 -i RevolutionOS.rmvb sample.jpg -r 1 -vframes 1 -an -vcodec mjpeg # 或者使用 -f 參數指定輸出的格式爲 mjpeg ,效果同樣 ffmpeg -ss 00:50:00 -i RevolutionOS.rmvb sample.jpg -r 1 -vframes 1 -an -f mjpeg
速度快的,幾乎不到1秒鐘。到底爲何會這樣?多是ffmpeg看到第一個參數爲 -ss的時候,立刻跳轉到時間線爲50分鐘處而後再打開視頻文件進行處理,而若是最後看到的參數是-ss,先打開視頻,而後慢慢日後遍歷,直到遍歷到時間爲50分鐘處,經過觀察ffmpeg的輸出發現,實際處理的時候幾乎就是這樣。 視頻