我有一个用Ruby on Rails编写的Web应用程序,它使用某种形式将视频从用户上传到服务器(我实际上使用了一个直接上传到s3的jquery上载器,但是我认为这不相关)。
为了减少视频的上传时间,我想缩小视频的尺寸,例如如果视频大小为1000x2000像素,我想将其缩小为500x1000。在客户端上传视频时,有没有办法做到这一点?有没有可以做到这一点的javascript库?

最佳答案

重新压缩视频是一个很重要的问题,不会很快在浏览器中发生。

通过HTML5的更改,理论上可以克服以下几个问题:

  • 您将使用File API来读取用户使用<input type="file">元素选择的文件的内容。但是, FileReader 似乎将整个文件读入内存,然后再将其移交给您的代码,这恰恰是您在处理大型视频文件时所不想要的。不幸的是,这是您无能为力的问题。它可能仍然可以工作,但是对于超过10-20 MB的任何内容,性能可能都无法接受。
  • 一旦获得了文件的数据,就必须对其进行实际解释-通常通过demuxer将Continer(mpeg等)文件拆分为视频和音频流,以及使用codec将这些流解压缩为原始图像/音频数据来完成。您的OS带有多种编解码器实现,而JavaScript均无法访问其中的任何一种。有一些JS video and audio codec实现,但是它们是实验性的,非常缓慢。并且仅实现解压缩器,因此在创建输出时会陷入困境。
  • 音频和视频的解压缩,缩放和重新压缩是的,非常消耗的处理器,这恰好是JavaScript(通常是脚本语言)最糟糕的工作量。至少,您必须使用Web workers在单独的线程上运行代码。
  • 所有这些工作已经完成。您正在重新发明轮子。

  • 实际上,这是必须在服务器端完成的工作,即使那样也不是一件容易的事。

    如果您不顾一切,可以尝试处理压缩的插件/ActiveX控件之类的方法,但随后必须说服用户安装插件(yuck)。

    10-07 19:04
    查看更多