PHP-视频上传期间提取帧
我有一个问题,如果这是可能的(没有任何信息可以找到)。 在视频上传过程中是否可以提取帧(缩略图)? 如果可以提取用户端,那么使用jscript提取也是一个选项PHP-视频上传期间提取帧,php,javascript,image,frame,Php,Javascript,Image,Frame,我有一个问题,如果这是可能的(没有任何信息可以找到)。 在视频上传过程中是否可以提取帧(缩略图)? 如果可以提取用户端,那么使用jscript提取也是一个选项 谢谢你的帮助 我认为在php中没有一个好的方法可以做到这一点。() 如果您租用的不仅仅是一些Web空间,而且有权在服务器上安装和运行其他软件,我建议您使用类似ffmpeg的东西,并使用system()、passthru()或exec()从php内部调用它提取所需内容,然后再次使用php进行其余处理 我正在运行一个浏览器游戏,它依赖于嵌入在
谢谢你的帮助 我认为在php中没有一个好的方法可以做到这一点。() 如果您租用的不仅仅是一些Web空间,而且有权在服务器上安装和运行其他软件,我建议您使用类似ffmpeg的东西,并使用system()、passthru()或exec()从php内部调用它提取所需内容,然后再次使用php进行其余处理 我正在运行一个浏览器游戏,它依赖于嵌入在xhtml中的svg图像,但是一些浏览器(尤其是移动浏览器)不支持完整的svg语法。在本例中,我使用这样一个system()调用,使用imagemagick的convert二进制进行svg到png的转换,并在我的页面上显示结果
system("echo '$svgString' | convert svg:- png:- | base64");
我想你必须回到类似的事情上去
以下是有关使用ffmpeg提取帧的一些信息:
Javascript:no
上传期间:否
一旦你上传了,是的
“Dev”在评论中提供了正确的链接,但是您应该做的是将视频保存到服务器,然后运行ffMpeg来获取图像。您可以在这里下载ffMPEG:(如果您对自己构建没有信心,请获取所需的构建—有Linux和Windows构建)
文档在这里:但是有一个更容易阅读的关于抓取图像的教程
注意:有一个PHP扩展clled“phpFFMPEG”,但我建议您不要使用它。只需通过PHP中的“exec()”运行所需的命令。检查错误返回值,因为每个CPU核心只能运行一次ffMPEG,因此如果同时尝试两次,可能会失败-将操作排队,或者在失败时重试。首先,您需要选择一个程序来提取帧。ffmpeg通常用于此目的。无论您选择什么,它都需要能够处理部分文件内容 php脚本直到整个文件上传完成后才开始执行,但php最近获得了一项功能,可以在文件上传过程中执行不同的php脚本,并且可以在上传脚本数据时获得(文件名是您感兴趣的东西)。 然后,基本上调用外部程序,使用上载处理脚本中上载的临时文件名,从监控脚本中提取帧 总结如下: 将文件上载到
upload.php
。
monitor.php
将获取上传到upload.php
中的临时文件名,并提取帧。这个问题发布近五年来,答案现在是是
如何使用JavaScript在视频上传期间提取帧
在显示代码之前,我们将执行以下操作:
URL
对象创建本地视频文件的URL视频元素中
画布上绘制一帧
图像
元素中(或者可以选择将该图像作为数据url发送到服务器)基本上,我接受了本帖中提供的rodrigo silveira答案,并对其进行了修改以供我使用,现在该解决方案就像一个魔咒。甚至我也尝试上传用户希望上传的视频缩略图/海报,并将视频和缩略图保存在文件夹中。另外,我不想使用ffmpeg 以下是我所做的:在名为“upload.php”的上传文件中,我对上面rodrigo silveira的解决方案进行了轻微修改,得到了以下代码: upload.php:
客户端是不可能的,但如果您已将视频上载到Youtube,这是可能的。@Amberlamps,它可能的客户端带有html5(您可以读取二进制文件内容),尽管您必须从头开始编写提取/转换代码:)在上载到Youtube的过程中,您可以预览缩略图。他们怎么做,如果这是不可能的,根据你?没有使用你管,我不能肯定地回答,但我想这将是使用闪光灯。Flash当然是一种选择。找到了答案:Silverlight用于IE,gears用于Chrome,两者都不是标准。但如果你想挑战,这绝对是一个选择。Flash和Java也可以做到这一点。
<input type="file" id="upload"/>
<img id="thumbnail"/>
<script>
var input = document.getElementById('upload');
var img = document.getElementById('thumbnail');
input.addEventListener('change', function(event){
var file = this.files[0];
var url = URL.createObjectURL(file);
var video = document.createElement('video');
video.src = url;
var snapshot = function(){
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
img.src = canvas.toDataURL('image/png');
video.removeEventListener('canplay', snapshot);
};
video.addEventListener('canplay', snapshot);
});
</script>