如何从用户上传到我的服务器的视频中获取缩略图?

Posted

技术标签:

【中文标题】如何从用户上传到我的服务器的视频中获取缩略图?【英文标题】:How can I get a thumbnail from a video that a user has uploaded to my server? 【发布时间】:2013-12-13 00:04:34 【问题描述】:

我正在开发一个视频共享网站,人们可以在其中上传自己的视频,并且我希望在索引页面上显示最新上传的视频,但不是视频而是缩略图,这样当您点击在您进入视频页面的缩略图上。你们都知道 youtube 的索引的外观/工作方式——这就是我想要模拟的。 我阅读了有关 ffmpeg 的信息,但在我看来,只有在您的计算机上安装了 ffmpeg 时它才会起作用。我希望这是一个自动化的过程,尽管用户不必先在他们的电脑上安装一些东西。 有没有办法我可以编码?还是我必须使用某种框架或 CMS?是否可以通过简单地获取 ffmpeg 托管 (example) 来解决此问题? 如果在 php 中没有手动方法来执行此操作,有没有使用 python 的方法? 仅供参考,我的网站是用 php 编写的,我使用 jwplayer 流式传输视频。 请注意,我想从上传到我的服务器上的视频中获取缩略图,而不是 youtube 或 vimeo 缩略图。

【问题讨论】:

在我看来你误解了一些东西。需要在上传视频的服务器上安装 ffmpeg。当用户上传视频时,您可能会在数据库中创建一个条目并将文件移动到某处。在此过程中,您还可以调用 ffmpeg 为视频创建缩略图,无需用户安装任何东西。 啊,谢谢!是否可以在共享主机服务器上安装 ffmpeg? 这完全取决于提供者,但我不会指望它,除非它特别提供。 很多共享主机不允许这样做。 你可以简单地download a static binary of ffmpeg(无需安装)。 【参考方案1】:

我已经解决了这类问题,我确信用户不需要 ffmpeg 在电脑上而是你需要一个安装了 ffmpeg 的服务器。

要从视频创建缩略图,请尝试以下代码。

<?php
 $video = 'path/to/video.flv';
 $thumbnail = 'path/to/thumbnail.jpg';
 shell_exec("ffmpeg -i $video -deinterlace -an -ss 1 -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg $thumbnail 2>&1");
 ?>

【讨论】:

如果你想寻找视频流而不是抓住第一个“秒”,只需在-i选项之前添加-ss 00:10:00.1(例如)。

以上是关于如何从用户上传到我的服务器的视频中获取缩略图?的主要内容,如果未能解决你的问题,请参考以下文章

如何显示 youtube 视频缩略图

在ios中上传后如何从firebase获取缩略图?

如何从 JavaScript 应用程序中的视频创建缩略图 [关闭]

如何从嵌入式视频中获取缩略图?

如何在 ejabberd 中获取图像的缩略图

如何从 PHAsset 获取视频的缩略图?