最近在用ffmpeg工具生成视频文件截图的时候,遇到一个问题。生成第3秒的截图很快,生成第30分钟的截图非常慢。同样的代码只是时间不同,为啥相差这多么呢?后来网上找了资料才解决这个问题,原来和参数顺序有关。
我们在拼接参数的时候,都习惯把-i放在最前面第一个参数,-ss这个参数是截取第几秒的视频图片。这2个参数互换下,把-ss放在首位,再生成会发现截取第30分钟和第3秒的耗时相差无几。
List<string> listP = new List<string>(); listP.Add("-ss"); listP.Add(timePoint.ToString()); listP.Add("-i"); listP.Add(@"""" + mediaFi.FullName + @""""); listP.Add("-f image2 -vframes 1"); listP.Add(@"""" + imageFile + @"""");
奇怪不?只是调整了参数顺序,性能就相差千里。合理的解释就是如果-i在前、-ss在后,相当于ffmpeg循环查找截屏时间点,找到了就截取,如果文件很大,有几个G就会很慢;如果-ss放在前面,直接告诉ffmpeg截屏时间点。
相关阅读
文章评论