【问题标题】:Fastest way to extract a specific frame from a video (PHP/ffmpeg/anything)从视频中提取特定帧的最快方法(PHP/ffmpeg/anything)
【发布时间】:2013-09-03 07:07:46
【问题描述】:

我有一个网页,它(除其他外)需要从用户上传的视频中提取特定帧。用户在播放器中寻找 .mp4 的特定部分,然后单击一个按钮,然后一个 ajax 调用被触发到一个 php 脚本,该脚本获取 .mp4 和来自视频的确切时间,并使用它来提取“缩略图”框架。

我目前的解决方案是使用 php exec 命令:

exec("ffmpeg -i $videoPath -ss $timeOffset -vframes 1 $jpgOutputPath");

...效果很好,只是它像糖蜜一样慢。我的猜测是 ffmpeg 对这项工作来说有点太多了,我也许可以通过利用底层库或其他东西做得更好......但是我不知道如何做到这一点。

理想情况下,我不想安装任何需要真正“安装过程”的东西......即,将可执行文件放入我的网络应用程序的文件夹中很好,但我宁愿不必实际运行安装程序。另外,解决方案应该可以在mac、linux和windows上运行(虽然linux是最优先的)。

我可以做些什么来加快这个过程?

谢谢。

【问题讨论】:

  • 您可以将缩略图生成作业放在一个队列中,让用户继续处理其他内容,同时它是由他们不必等待的其他脚本生成的。
  • 好吧尝试玩ffmpeg c:\ffmpeg.exe -ic:\video\hello.mov – ss 10 – t 4 -f image2 – sameq -vcodec mjpeg img-%03d.jpg 它可能非常棘手,如果您只使用一些不同的属性,您可能会获得很大的性能提升......
  • @DusanPlavak -sameq does not mean "same quality" 并已从 ffmpeg 中删除。对于 jpg 输出,使用 -qscale:v,有效范围为 2(最高质量)到 31(最低质量)。
  • @GordonM:用户不必等待,缩略图出现只需要一段时间,特别是如果同时生成一些缩略图。这是我想要加速的实际缩略图生成工作。
  • @DusanPlavak 我很确定我设置它的方式应该是尽可能少地进行处理......不转换格式或任何东西。

标签: php video ffmpeg mp4 video-processing


【解决方案1】:

当然,您可以编写一些 C/C++ 代码并链接到 -lav*,基本上创建一个简化版本的 ffmpeg 仅用于提取帧,甚至可以将其作为 php 扩展(我也不会运行它)同一个用户,更不用说在同一个进程中了)。但结果不太可能更快,因为您只会避免一些分叉和设置开销,但您可能的问题实际上是解码,它仍然是相同的。

相反,您应该首先考虑在快速搜索模式(或快速/准确混合模式)下使用 ffmpeg。 Their wiki states关于快求:

-ss参数需要在-i之前指定

ffmpeg -ss 00:03:00 -i Underworld.Awakening.avi -frames:v 1 out1.jpg

此示例将在周围某处生成一个图像帧 (out1.jpg) 从电影开始的第三分钟。输入将是 使用关键帧进行解析,速度非常快。缺点是它 也将在某个关键帧完成搜索,不一定位于 在指定时间(00:03:00),因此搜索不会那么准确 正如预期的那样。

快速搜索不太准确,但要快得多,因为 ffmpeg 在搜索期间实际上不需要解码(大部分)电影,而快速/准确的混合模式是一个很好的折衷方案。阅读the wiki page 了解所有可用选项。

2010 年 6 月 14 日编辑

从 FFmpeg 2.1 开始,当使用 ffmpeg 进行转码(即不进行流复制)时,-ss 现在即使用作输入选项也是准确的。可以使用 -noaccurate_seek 选项恢复以前的行为。 (source)

因此,对于 2.1+,在重新编码时不再需要“混合”搜索以获得准确的结果(保存到 .jpeg 是重新编码)。进行通常的快速搜索 (-ss ... -i ...) 而不是慢速搜索 (-i ... -ss ...) 就足够了。

【讨论】:

  • 执行时间相差约 20 分钟(3GB 视频)。拯救了这一天。
  • 快速搜索似乎也适用于远程视频,例如通过 http 或 https。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 2022-01-03
  • 2015-11-06
  • 2021-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多