使用ffmpeg快速生成視頻截圖

原博客地址:http://www.cnblogs.com/wanghetao/p/3420788.html

由於項目的需求, 我需要對單個視頻進行截圖. 以前我使用的ffmpeg命令是這樣的:

1
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" 相當於在總長度的一半處截圖) :

1
time ffmpeg -ss 00:02:06 -i test1.flv -f image2 -y test1.jpg

 奇蹟出現了, 這一次用時不超過一秒鐘:

1
2
3
real    0m0.595s
user    0m0.416s
sys     0m0.092s

 真的是大大縮短了截圖時間!!.

至於原因是什麼, 我也搞不懂, 也許是像 [1] 中所說的: "可能是ffmpeg看到第一個參數爲 -ss的時候,馬上跳轉到時間線爲指定的地方然後再打開視頻文件進行處理,而如果最後看到的參數是-ss,先打開視頻,然後慢慢往後遍歷,直到遍歷到時間爲指定處. 通過觀察ffmpeg的輸出發現,實際處理的時候幾乎就是這樣。"

發佈了39 篇原創文章 · 獲贊 30 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章