在上传到远程网站期间缩小/调整视频大小
Downscaling/resizing a video during upload to a remote website
我有一个用Ruby编写的Web应用程序,它使用表单将视频从用户上传到服务器(我实际上使用直接上传到s3的jquery上传器,但我认为这无关紧要)。
为了减少视频的上传时间,我想缩小它,例如,如果视频大小为 1000x2000 像素,我想将其缩小到 500x1000。有没有办法在客户端上传视频时这样做?有没有一个JavaScript库可以做到这一点?
重新压缩视频是一个不平凡的问题,不会很快在浏览器中发生。
随着HTML5的变化,理论上如果你能克服几个问题,这是可能的:
- 你将使用文件 API 读取用户使用
<input type="file">
元素选择的文件的内容。 但是,看起来FileReader
在将整个文件交给您的代码之前将整个文件读入内存,这正是您在处理大型视频文件时不想要的。 不幸的是,这是一个你无能为力的问题。 它可能仍然有效,但对于超过 10-20 MB 左右的任何内容,性能可能是不可接受的。 - 一旦你有了文件的数据,你必须实际解释它——这通常使用解复用器来完成,将连续器(mpeg 等)文件拆分为视频和音频流,以及编解码器将这些流解压缩为原始图像/音频数据。 您的操作系统附带了几种编解码器实现,其中没有一个可以从 JavaScript 访问。 有一些JS视频和音频编解码器实现,但它们是实验性的,而且速度非常慢;并且只实现解压缩器,所以在创建输出时你会陷入困境。
- 解压缩、缩放和重新压缩音频和视频是极其占用处理器的,这正是 JavaScript(以及一般的脚本语言)最糟糕的工作负载类型。 至少,您必须使用 Web worker 在单独的线程上运行代码。
- 所有这些工作已经完成了好几次;你正在重新发明轮子。
实际上,这是必须在服务器端完成的事情,即便如此,它也不是一件容易的事。
如果你绝望了,你可以尝试使用插件/ActiveX 控件来处理压缩,但你必须说服用户安装插件(yuck)。
你可以使用像 Carrierwave (https://github.com/jnicklas/carrierwave) 这样的宝石。 它能够在存储文件之前处理文件。 即使您先使用 javascript 将它们直接上传到 S3,您也可以让 Carrierwave 检索文件、处理并再次存储。
否则,您可以让 Carrierwave 从一开始就处理该文件(除非您使用 Heroku 托管并且需要通过直接转到 S3 来避免超时)。
相关文章:
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调整窗口大小时,可拖动的对象会出现在容器外部
- ExtJS——在展开/折叠时调整面板高度
- Chrome应用程序调整窗口大小保持纵横比
- 如何自动调整标签的高度以适应内容
- 导航栏没有调整到浏览器屏幕的大小
- 调整屏幕大小后不显示子菜单
- 使用JavaScript根据窗口/视口的高度动态调整图像大小
- 合并两个数组,重新调整循环js
- Morris.js折线图x轴标签在调整大小后消失
- 如何使可由用户调整大小的画布窗口在调整浏览器窗口大小时也缩小或缩小
- 在上传到远程网站期间缩小/调整视频大小
- 在不换行的情况下缩小浏览器页面时自动调整图片大小
- 当你缩小浏览器时,如何创建自动调整iframe大小
- 高图表:图表无法通过缩小屏幕来正确调整大小
- 如何在调整大小的DIV中居中并放大/缩小图像
- 在three.js中调整视图大小会缩小图像
- 如何在浏览器调整大小时触发缩小事件?
- CSS:当浏览器调整大小(缩小)时,垂直滚动条消失
- 调整大小