我在Android应用程序中遇到了FFmpeg的一些实际问题。我目前正在尝试拍摄从设备录制的视频,并在整个视频中平均提取视频中的帧。我用了这个blog post。最后一个公式:
ffmpeg -i input.avi -f image2 -ss 2 -r 0.05 frame-%05d.png
拥有自己的-ss
和自己的-r
值。
现在一切都很好。就像在博客中提到的那样,前两帧由于某种原因是相同的。所以我删除其中一个帧然后我觉得好像帧准确显示视频。在博客中它还说要删除一些我不这样做的最后一帧,因为那时我不会让帧到达整个视频的末尾。
在输出中,前两个图像应该被丢弃,接下来的6个图像(从第3个到第8个)将是我们要查找的图像。最有可能的是第9张图像也可以丢弃。您还可以添加-vframes 8选项(其中8是number_of_frames + 2)以跳过创建最后一个您不需要的图像。
这些帧的捕获准确度如何?因为我想为每个帧添加时间戳。 (FFProbe
不是一个选项,因为我使用的是Android应用程序,并且不想仅为此构建二进制文件。
例如,如果我有一个14秒长的视频,ffmpeg提取了11帧(我删除了第一个重复的一个,所以现在10帧)。如果我那么videoLength / number of frames * which frame I want to find
这是多么准确?所以:
14/10 * 1 = 1 so frame one goes from 0s - 1.4s
14/10 * 2 = 2.8 so frame two goes from 1.4s - 2.8s
14/10 * 3 = 4.2 so frame two goes from 2.8s - 4.2s
...
14/10 * 10 = 14 so frame two goes from 12.6s - 14s
这准确代表每一帧吗?
如果没有,someonne会给我一个更好的解决方案,谢谢。
我的想法是创建了一个带有recyclerview的视频裁剪器,这样我就可以用拖动工具“遍历”每一帧,计算框架覆盖的数量,然后找出该框架代表的范围,然后设置开始和结束时间的时间