因爲項目的需求, 我須要對單個視頻進行截圖. 之前我使用的ffmpeg命令是這樣的:服務器
ffmpeg -i input.mkv -ss 00:10:00 -f image2 output.jpg
可是這個命令會花費至關長的時間. 對一個清晰的或者較大的視頻文件進行操做, 會花費半分鐘以上. 截圖的時間越日後, 花費的時間也越長. 更爲悲劇的是, 個人Nginx服務器會在等待15s以後返回 "504 Bad Gateway" 的錯誤, 儘管後臺的截圖操做仍然在進行中! 這真的不能忍受, 並且會給用戶帶來很差的體驗. 試着上網搜了一下解決方案, 看到了博客 [1] . 大意是說, 出現這種狀況的緣由是因爲參數的位置放置不正確形成的 "-ss" 要放在第一個參數位置. 調整它們的位置以後我再次嘗試 ( test1.flv是一個h264編碼的高清視頻, 總時長爲"00:04:11.37", 命令中 "-ss 00:02:06" 至關於在總長度的一半處截圖) :編碼
$ time ffmpeg -ss 00:02:06 -i test1.flv -f image2 -y test1.jpg
奇蹟出現了, 這一次用時不超過一秒鐘:.net
real 0m0.595s user 0m0.416s sys 0m0.092s
真的是大大縮短了截圖時間!!. 視頻
至於緣由是什麼, 我也搞不懂, 也許是像 [1] 中所說的: "多是ffmpeg看到第一個參數爲 -ss的時候,立刻跳轉到時間線爲指定的地方而後再打開視頻文件進行處理,而若是最後看到的參數是-ss,先打開視頻,而後慢慢日後遍歷,直到遍歷到時間爲指定處. 經過觀察ffmpeg的輸出發現,實際處理的時候幾乎就是這樣。"blog
參考文獻:get
[1] http://blog.csdn.net/xiaochawan/article/details/8804789input