首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript从视频url生成视频缩略图

javascript从视频url生成视频缩略图
EN

Stack Overflow用户
提问于 2016-10-20 09:16:48
回答 3查看 16.6K关注 0票数 7

我将从javascript中的视频url生成视频缩略图。我需要通过ajax完成这一点。因此,我遵循了这种方法。

代码语言:javascript
复制
var src = thumbnail; ///video url not youtube or vimeo,just video on server
var video = document.createElement('video');

video.src = src;

video.width = 360;
video.height = 240;

var canvas = document.createElement('canvas');
canvas.width = 360; 
canvas.height = 240;
var context = canvas.getContext('2d');

context.drawImage(video, 0, 0, canvas.width, canvas.height);
var dataURI = canvas.toDataURL('image/jpeg');
html += '<figure>';
html += '<img src="' + dataURI + '' + '" alt="' + item.description + '" />';
html += '<figurecaption>'+item.description+'</figurecaption>'
html += '</figure>';

但我得到的只是黑色图像。我猜这是因为加载问题,但找不到解决方案。期待您的回音。

致以问候。

EN

回答 3

Stack Overflow用户

发布于 2020-03-18 15:02:21

您可以安装npm:video-metadata-thumbnails,然后像这样使用它:

代码语言:javascript
复制
import { getMetadata, getThumbnails } from 'video-metadata-thumbnails';

const thumbnails = await getThumbnails(blob, {
  quality: 0.6
});
console.log('Thumbnails: ', thumbnails);
票数 2
EN

Stack Overflow用户

发布于 2020-04-18 20:30:05

我也遇到了同样的问题,我通过使用"loadeddata“事件解决了这个问题,但我还必须添加cors属性并播放/暂停视频:

代码语言:javascript
复制
var video = document.createElement('video');

var canvas = document.createElement('canvas');
var context = canvas.getContext('2d')
video.addEventListener('loadeddata', function() {
  context.drawImage(video, 0, 0, canvas.width, canvas.height);
  video.pause();

  var dataURI = canvas.toDataURL('image/jpeg');
  var img = document.createElement("img");
  img.src = dataURI;
  that.css('background-image', 'url(' + dataURI + ')');
}, false);

video.preload = 'metadata';
video.muted = true;
video.playsInline = true;
video.setAttribute('crossOrigin', 'anonymous');
video.src = $(this).data('src');
video.play();

票数 2
EN

Stack Overflow用户

发布于 2018-12-18 23:30:37

,但我得到的只是黑色图像。我猜这是因为加载问题,但找不到解决方案。期待您的回音。

这可能是因为在您调用的位置还没有加载任何框架:

代码语言:javascript
复制
context.drawImage(video, 0, 0, canvas.width, canvas.height);

你应该在得到一些"loadeddata“事件(检查https://developer.mozilla.org/en-US/docs/Web/Events/loadeddata)之后再这样做。

所以你的代码会变成:

代码语言:javascript
复制
var src = thumbnail; ///video url not youtube or vimeo,just video on server
var video = document.createElement('video');

video.src = src;

video.width = 360;
video.height = 240;

var canvas = document.createElement('canvas');
canvas.width = 360; 
canvas.height = 240;
var context = canvas.getContext('2d');

video.addEventListener('loadeddata', function() {
    context.drawImage(video, 0, 0, canvas.width, canvas.height);
    var dataURI = canvas.toDataURL('image/jpeg');
    html += '<figure>';
    html += '<img src="' + dataURI + '' + '" alt="' + item.description + '" />';
    html += '<figurecaption>'+item.description+'</figurecaption>'
    html += '</figure>';
});

请注意,这将是异步的,因此您可能必须更改对html变量的操作,改为设置image.src = dataURI;,将其image为对Image DOM节点(即您插入的节点)的引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40143958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档