由于項目的需求, 我需要對單個視頻進行截圖. 以前我使用的ffmpeg命令是這樣的:
1
ffmpeg -i input.mkv -ss 00:10:00 -f image2 output.jpg
但是這個命令會花費相當長的時間. 對一個清晰的或者較大的視頻文件進行操作, 會花費半分鐘以上. 截圖的時間越往后, 花費的時間也越長. 更為悲劇的是, 我的Nginx服務器會在等待15s之后返回 "504 Bad Gateway" 的錯誤, 盡管后臺的截圖操作仍然在進行中! 這真的不能忍受, 而且會給用戶帶來不好的體驗. 試著上網(wǎng)搜了一下解決方案, 看到了博客 [1] . 大意是說, 出現(xiàn)這種情況的原因是由于參數(shù)的位置放置不正確造成的 "-ss" 要放在第一個參數(shù)位置. 調(diào)整它們的位置之后我再次嘗試 (?test1.flv是一個h264編碼的高清視頻, 總時長為"00:04:11.37", 命令中 "-ss 00:02:06" 相當于在總長度的一半處截圖) :
1
$timeffmpeg -ss 00:02:06 -i test1.flv -f image2 -y test1.jpg
奇跡出現(xiàn)了, 這一次用時不超過一秒鐘:
1
2
3real??? 0m0.595s
user??? 0m0.416s
sys???? 0m0.092s
真的是大大縮短了截圖時間!!.
至于原因是什么, 我也搞不懂, 也許是像 [1] 中所說的: "可能是ffmpeg看到第一個參數(shù)為 -ss的時候,馬上跳轉(zhuǎn)到時間線為指定的地方然后再打開視頻文件進行處理坞嘀,而如果最后看到的參數(shù)是-ss随常,先打開視頻,然后慢慢往后遍歷恼琼,直到遍歷到時間為指定處. 通過觀察ffmpeg的輸出發(fā)現(xiàn)唠摹,實際處理的時候幾乎就是這樣魂务。"