使用ffmpeg可以非常方便的生成視頻截圖,命令行下的mplayer也可以做視頻截圖,只不過mplayer在本質上還是調用ffmpeg來實現。ffmpeg 通過指定 -vcodec 參數為 mjpeg,或者指定 -f 參數為 mjpeg時,可以輸出 jpg截圖,指定 -vcodec參數為png,或者指定輸出文件擴展名為png,可輸出png截圖。如果參數指定不當,會導致ffmpeg處理速度非常緩慢,以我本機影片《Revolution OS》中文名《操作系統的革命》為例。
截取視頻的第5秒。通過 -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的輸出發現,實際處理的時候幾乎就是這樣。