10

如何在 javascript 中获取视频文件的第一帧作为图像?

4

5 回答 5

10

可以使用 HTML 5 视频和画布标签来完成:

HTML:

<input type="file" id="file" name="file">

<video id="main-video" controls>
   <source type="video/mp4">
</video>

<canvas id="video-canvas"></canvas>

Javascript:

var _CANVAS = document.querySelector("#video-canvas");
var _CTX = _CANVAS.getContext("2d");
var _VIDEO = document.querySelector("#main-video");

document.querySelector("#file").addEventListener('change', function() {

    // Object Url as the video source
    document.querySelector("#main-video source").setAttribute('src', URL.createObjectURL(document.querySelector("#file").files[0]));

    // Load the video and show it
    _VIDEO.load();

    // Load metadata of the video to get video duration and dimensions
    _VIDEO.addEventListener('loadedmetadata', function() {
        // Set canvas dimensions same as video dimensions
        _CANVAS.width = _VIDEO.videoWidth;
        _CANVAS.height = _VIDEO.videoHeight;
    });

    _VIDEO.addEventListener('canplay', function() {
        _CANVAS.style.display = 'inline';
        _CTX.drawImage(_VIDEO, 0, 0, _VIDEO.videoWidth, _VIDEO.videoHeight);
    });

});

查看演示

于 2019-04-16T09:14:24.390 回答
6

只需将视频标签添加到页面,无需控件,也无需自动播放。

<video width="96" height="54" class="clip-thumbnail"> ... </video>

缺点是用户可以通过右键单击缩略图并在上下文菜单中选择“播放”来播放视频。为避免这种情况,您需要一些 javascript 来监听点击事件并取消它们(从缩略图中删除上下文菜单)。

于 2013-11-29T00:34:22.437 回答
2

如前所述,Javascript 无法做到这一点。

如果您想为您的视频创建缩略图,您必须创建缩略图服务器端,然后像处理任何其他图像一样在客户端提供图像。

我选择的方法是ffmpeg解码器。它可以处理多种文件格式,并且能够做你想做的事。因此,如果您有一个名为 的视频hello.avi,您可能会这样做:

ffmpeg -itsoffset -1 -i /path/to/hello.avi -vcodec mjpeg -vframes 1 -an -f rawvideo -s 200x150 /path/to/hello.jpg

您可以使用您使用的任何服务器端语言运行此命令(修复路径和尺寸...),它将创建视频文件的缩略图。

于 2009-07-21T23:11:06.110 回答
2

Javascript 无法做到这一点。

于 2009-07-21T15:53:59.393 回答
0

如果视频是用户选择的文件<input type="file">,则可以使用 FileReader API 获取 base-64 视频数据:

https://developer.mozilla.org/en-US/docs/DOM/FileReader

从那里你只剩下解码视频并以某种方式在javascript中挑选和渲染单个帧的极其棘手的问题。或者,您可以将整个视频包含为“缩略图预览”(我认为这就是您这样做的原因?),如下所示:

http://hacks.mozilla.org/2009/12/file-drag-and-drop-in-firefox-3-6/

不确定最后一个示例的兼容性,或者它与更大的视频文件的兼容性如何(我听说你很容易遇到 URL 长度限制)

于 2012-09-15T15:46:38.453 回答