使用ffmpeg快速生成視頻截圖


由於項目的需求, 我需要對單個視頻進行截圖. 以前我使用的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

 奇跡出現了, 這一次用時不超過一秒鍾:

real    0m0.595s
user    0m0.416s
sys     0m0.092s

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

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

 

參考文獻:

[1] http://blog.csdn.net/xiaochawan/article/details/8804789


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM