需求

使用ffmpeg可以非常方便的生成視頻截圖,ffmpeg 通過指定 -vcodec 參數為 mjpeg,或者指定 -f 參數為 mjpeg時,可以輸出 jpg截圖,指定 -vcodec參數為png,或者指定輸出文件擴展名為png,可輸出png截圖。如果參數指定不當,會導致ffmpeg處理速度非常緩慢。

截取視頻的第幾秒。通過 -ss 參數指定,但要注意看到最后的幾個例子,否者會很慢哦。

輸出 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,把這個參數放到第一個位置,馬上就可以解決這個問題。

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的輸出發現,實際處理的時候幾乎就是這樣。