PHP-视频上传期间提取帧

PHP-视频上传期间提取帧,php,javascript,image,frame,Php,Javascript,Image,Frame,我有一个问题,如果这是可能的(没有任何信息可以找到)。 在视频上传过程中是否可以提取帧(缩略图)? 如果可以提取用户端,那么使用jscript提取也是一个选项 谢谢你的帮助 我认为在php中没有一个好的方法可以做到这一点。() 如果您租用的不仅仅是一些Web空间,而且有权在服务器上安装和运行其他软件,我建议您使用类似ffmpeg的东西,并使用system()、passthru()或exec()从php内部调用它提取所需内容,然后再次使用php进行其余处理 我正在运行一个浏览器游戏,它依赖于嵌入在

我有一个问题,如果这是可能的(没有任何信息可以找到)。 在视频上传过程中是否可以提取帧(缩略图)? 如果可以提取用户端,那么使用jscript提取也是一个选项


谢谢你的帮助

我认为在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加载到
    视频
    元素中
  • 将视频加载到内存后,在
    画布上绘制一帧
  • 现在将画布上渲染的帧导出到
    图像
    元素中(或者可以选择将该图像作为数据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>