- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用 OpenCV 在视频文件中寻找随机点似乎比在 Windows Media Player 或 VLC 等媒体播放器中慢得多。我正在尝试使用 VideoCapture
寻找以 H264(或 MPEG-4 AVC(第 10 部分))编码的视频文件的不同位置,寻找该位置所花费的时间似乎与帧成正比查询的号码。这是我正在尝试做的一个小代码示例:
import cv2
cap = cv2.VideoCapture('example_file')
frame_positions = [200, 400, 8000, 200000]
for frame_position in frame_positions:
cap.set(cv2.cv.CV_CAP_PROP_FRAMES, frame_position)
img = cap.read()
cv2.imshow('window', img)
cv2.waitKey(0)
从上方显示图像时的感知时间与帧数成正比。也就是说,帧数 200 和 400 几乎没有任何延迟,8000 有一些明显的延迟,但 200000 几乎需要半分钟。
为什么 OpenCV 不能像 Windows Media Player 那样“快速”地搜索?可能是 OpenCV 在搜索时没有正确使用 FFMPEG 编解码器吗?使用编解码器的一些替代配置从源代码构建 OpenCV 会有所帮助吗?如果是这样,有人可以告诉我配置是什么吗?
我只在 Windows 7 和 10 PC 上测试过这个,使用 OpenCV 二进制文件,系统路径中有相关的 FFMPEG DLL。
另一个观察结果:对于大于 2.4.9(示例 2.4.11、3.3.0)的 OpenCV(二进制文件)版本,第一个 seek 有效,但后续的无效。也就是说,它可以从上面的例子中寻找帧 200,而不是 400 和其余的;视频只是跳回到第 0 帧。但是因为它适用于 2.4.9,所以我现在很高兴。
最佳答案
GPU 加速对于搜索应该无关紧要,因为您不是在解码帧。此外,即使您正在解码帧,在 GPU 上这样做也会比在 CPU 上慢,因为现在的 CPU 将视频编解码器“焊接”到芯片中,这使得视频解码速度非常快,并且必须进行一些簿记才能将数据从主内存铲入 GPU。
听起来 OpenCV 实现了一种“安全”的搜索方式:视频文件可以包含流偏移量。例如,您的音频流可能会与您的视频流相冲突。再举一个例子,您可能剪掉了视频的开头并保存了结果。如果您的剪切没有恰好发生在关键帧上,则像 ffmpeg 这样的视频编辑软件会在输出文件中包含您剪切之前的少量帧,以便允许剪切发生的帧正确解码(之前的帧可能是必需的)。在这种情况下,也会有流偏移。
为了确保以正确的方式解释此类偏移量,即真正准确地击中相对于“时间 0”的所需帧,唯一“简单”但昂贵的方法是真正吃掉并解码所有视频帧。这显然就是 openCV 在这里所做的。您的视频播放器不会为此烦恼,因为日常用户不会注意到,而且 GUI 中的控件无论如何都不够精确。
我可能错了。但是对 other questions 的回答我为评估它们而进行的一些实验表明,只有“缓慢”的视频帧计数方法才能得出准确的结果。
关于python - 为什么使用 OpenCV 搜索随机视频很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48830865/
我有一个 view我拖了一个UITableView在里面,还有 2 UIImageView s(第一个显示背景图像,第二个只是在 View 顶部显示一个非常小的标题和图像)。 它们都设置为 weak特
我尝试用 C# 编写简单的 PostgreSQL 查询。第一个 connection.open() 需要 20 秒。其他连接立即执行。 PGAdmin 工作也很慢。如果我打开“查看所有行”,它也需要大
我制作了一个 html5 视频播放器,我注意到如果当前播放的视频有点大,搜索时间会异常地长。 越接近终点,寻找的时间越长;独立于我之前是否去过那里/与当前时间点的距离有多近,或者我是否缓冲了整个视频。
我正在使用 MaterialDatePicker,但速度很慢。 public class MainActivity extends AppCompatActivity { MaterialDa
我想知道为什么 MyBatis 是 慢 在我的应用程序中。 对于 SELECT COUNT(*) ,所用时间为: 20 秒 - 第一个请求 2-3 秒 - 后续请求 缓存很可能使后续请求更快。 配置
我已经安装了一个默认的开箱即用的 FreeSwitch 实例,但是当我尝试进行内部调用(分机到分机)时,大约需要 12 秒才能建立调用并且我可以听到铃声。 当我查看日志时,我几乎立即看到了连接请求,但
我已经放弃了让它跑得更快的实际尝试。 我最大的问题是,当我插入 html 时,应用程序会变慢到爬行。我有一个进度条,我正在调用 QCoreApplication.processEvents() (顺便
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
Doxygen 在我们的代码库上运行大约需要 12 个小时。这主要是因为有很多代码要处理(约 1.5M 行)。然而,它很快就会接近我们无法进行夜间文档更新的地步,因为它们需要太长时间。我们已经不得不减
我正在重写我的旧渲染管道。我根据自己的喜好创建了一个非常精简的原型(prototype),令我震惊的是,我原来相当复杂且优化不佳的管道与 super 简单的原型(prototype)具有完全相同的性能
我想为我的网站使用 Gridster,但我需要使用“add_widget”命令添加很多小部件。我做了一个测试,我认为“add_widget”功能存在问题:网格越来越慢并且存在内存泄漏。 您可以在此视频
我有一份包含图表和表格的报告。 我正在使用 html2canvas与 jsPDF将此报告导出为 PDF 文件。 但是这个过程耗时很长,超过11000ms。 我尝试更改格式和质量,但没有任何效果。 请看
我正在查询大于时间戳的类的所有修订,使用: AuditReaderFactory .get(emf.createEntityManager()) .createQuery().forR
我最近想加速一个加密系统。而在这个系统中,它将使用mysql,因此它包括文件。 而且我发现系统运行缓慢并不是因为加解密,而是因为处理一些sql语句。 它将在运行时使用内存数据库,并使用 中的 mys
谁能看出为什么这需要大约 20 秒?我正在运行下面的代码以将 JSON 请求发布到本地服务器 192.168.1.127。 curl -H "Content-type: application/jso
我有两个表:Posts 和Tags,其中存储了用户发布的文章以及他们为文章附加的标签。 PostTags 表用于表示文章 ID 和标签 ID 的关系。结构如下: 帖子: id | title | au
一个我应该能够自己回答但我没有,而且在谷歌中也找不到任何答案的问题: 我有一个表,其中包含具有以下结构的 500 万行: CREATE TABLE IF NOT EXISTS `files_histo
以下查询在具有大约 50 万行的表上执行需要 20 多秒: SELECT images.id, images.user_id, images_locale.filename, extension, s
我正在使用 $.getJSON 来提取对象 list (100 个项目,不是一个大集合),但 XHR 调用需要 8-10 秒。 想了解我是否缺少某些内容或我可以采取哪些措施来加快我的计划? 最佳答案
在这段代码中,我从网站获取一个字符串并将其显示在标签上。在标签上显示字符串真的很慢!大约 10 秒。但是在控制台 println (date) 上打印字符串时是立即的。我该如何解决这个问题?
我是一名优秀的程序员,十分优秀!