在上传到远程网站期间缩小/调整video大小

我有一个用Ruby编写的web应用程序,它使用一个表单将video从用户上传到服务器(我实际上使用的jquery上传器直接上传到s3,但我不认为这是相关的)。
为了减少video的上传时间,我想缩小它,例如,如果video大小为1000×2000像素,我想将其缩小到500×1000。 在客户端上传video时,有没有办法这样做? 有没有可以做到这一点的JavaScript库?

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

随着HTML5的变化, 理论上如果你能克服几个问题是可能的:

  • 您可以使用File API来读取用户使用元素选择的内容。 但是,看起来FileReader会将整个文件入内存,然后再将其移交给您的代码,这正是您在处理大型video文件时所不想要的。 不幸的是,这是一个你无能为力的问题。 它可能仍然有效,但对于超过10-20 MB左右的任何东西,性能可能都是不可接受的。
  • 一旦你拥有了文件的数据,你就必须实际解释它 – 通常用分路器将continer(mpeg等)文件分成video和音频流,以及将这些流解压缩成原始图像/音频数据的编解码器 。 您的操作系统附带了几个编解码器实现,其中没有一个可以从JavaScript访问。 有一些JS video 和 音频 编解码器实现,但它们是实验性的,并且非常缓慢; 并且只实现解压缩程序 ,因此在创建输出时会遇到困难。
  • 解压缩,缩放和重新压缩音频和video是处理器密集型的,这是JavaScript(以及一般的脚本语言)最糟糕的工作量。 至少,您必须使用Web worker在单独的线程上运行代码。
  • 所有这些工作已经完成了好 几次 ; 你正在重新发明轮子。

实际上,这是必须在服务器端完成的事情,即便如此,这也不是一件微不足道的事情。

如果你是绝望的,你可以尝试像处理压缩的插件/ ActiveX控件,但是你必须说服用户安装插件(yuck)。

您可以使用像Carrierwave这样的gem(https://github.com/jnicklas/carrierwave)。 它具有在存储文件之前处理文件的能力。 即使您首先使用javascript将它们直接上传到S3,您也可以让Carrierwave检索文件,处理它并再次存储它。

否则你可能只是让Carrierwave从头开始处理该文件(除非您使用Heroku进行托管,并且需要通过直接转到S3来避免超时)。