通过 HTTP 下载部分视频(用于远程缩略图)

Posted

技术标签:

【中文标题】通过 HTTP 下载部分视频(用于远程缩略图)【英文标题】:Download Partial Video via HTTP (for Remote Thumbnailing) 【发布时间】:2012-03-04 13:23:37 【问题描述】:

我在 Amazon S3 上托管了视频。我使用 Zencoder 对它们进行编码并存储视频的缩略图,然后使用 Zencoder。但是,我需要一种方法来在视频中的某些点(即 00:00:03、00:10:32、01:40:18)生成缩略图并将它们存储在 S3 或我的服务器上。

ffmpeg 允许远程缩略图,但是从文件中间获取缩略图需要很长时间(有时是几分钟)——我相信这是因为它会下载整个文件到该点以获取缩略图.

我的计划是通过 HTTP 字节范围请求以某种方式下载视频文件的标题,猜测我应该在其中查找缩略图的字节范围,通过 HTTP 字节从文件的该部分下载大约一秒钟的视频-range 请求,然后将标题和小视频保存在本地。我使用 ffmpeg 从中提取缩略图并删除临时视频。

我不知道这究竟是如何工作的(我相信我正在使用的 H.264 MP4 文件有一个动态长度标题,对于另一个问题)。 有什么建议或更好的想法吗?

编辑:澄清一下,Zencoder 缩略图很棒,但它们只允许缩略图创建与转码结合使用。我不想每次创建新缩略图时都对我的视频进行转码,所以我需要在没有 Zencoder 的情况下自行完成。

【问题讨论】:

【参考方案1】:

更新

正如预期的那样,通过 Zencoder documentation 快速搜索会发现那里也有类似的功能,请查看他们的 API 参考以获取 Thumbnails:

interval - 以均匀的间隔拍摄缩略图,以秒为单位。 Zencoder 将为文件的每 N 秒返回一个缩略图。 [...] interval_in_frames - 以均匀的间隔拍摄缩略图,以帧为单位。 Zencoder 将为文件的每 N 帧返回一个缩略图。 [...] times - 抓取缩略图的时间数组,以秒为单位。小数有效。因此,将时间设置为 [12.5, 25] 将抓取两个缩略图,一个在 12.5 秒,一个在 25 秒。 [...]

并且(类似于 Transloadit),Zencoder 似乎也支持从您的 Amazon S3 存储桶上传和下载文件,请参阅 @ 987654326@了解详情。

祝你好运!


由于您无论如何都在使用云编码服务,我将在这里接受“任何建议或更好的想法?”,并建议最终查看Transloadit,只要他们提供的服务包括您想要的功能(我实际上希望 Zencoder 也可以提供此功能 Zencoder 确实提供了类似的功能,请参阅上面的更新)-那里有几个demos 用于从视频中提取缩略图,例如Extract 8 thumbnails from an encoded video:

这是从视频编码中提取缩略图的最简单的演示。 默认情况下,它以相等的时间间隔提取 8 个缩略图,每个缩略图 具有与视频相同的尺寸。 » See full documentation

/video/thumbs robot 的 offset 参数允许您以文件持续时间的秒数或相应的百分比值来指定更细粒度的缩略图位置。

Transloadit 也支持 在 Amazon S3 中存储文件,参见例如演示 Encode a video, extract 8 thumbnails and store everything in your S3 bucket 用于解决您的用例的组合解决方案。

【讨论】:

感谢您的回答,但 Zencoder 缩略图的问题在于,您只能在对视频进行转码的同时生成一个 - 您不能在以后单独生成一个缩略图。我会看看 Transloadit,但我们现在切换服务并不合理。我非常感谢仅使用我自己服务器上的脚本来处理此问题的答案。

以上是关于通过 HTTP 下载部分视频(用于远程缩略图)的主要内容,如果未能解决你的问题,请参考以下文章

利用FFmpeg生成视频缩略图

Android - 从服务器检索视频的缩略图并显示在手机上

改进了从视频中提取缩略图

利用FFmpeg生成视频缩略图 2.3.1

利用FFmpeg生成视频缩略图 2.1.8

网站调用土豆视频时怎么抓取缩略图?(高分悬赏)