2012-04-16 6 views
5

Tengo una aplicación web escrita en Ruby on rails que carga videos del usuario al servidor utilizando un formulario (de hecho utilizo un cargador de archivos jquery que carga directamente a s3, pero No creo que esto sea relevante).
Para disminuir el tiempo de carga de un video, quiero reducirlo, p. si el tamaño del video es de 1000x2000 píxeles, quiero reducirlo a 500x1000. ¿Hay alguna manera de hacerlo mientras el video se carga en el lado del cliente? ¿Hay una biblioteca de JavaScript que pueda hacer eso?Reducción del tamaño/cambio de tamaño de un video durante la carga en un sitio web remoto

+0

Ver la respuesta aquí: http: // stackoverflow.com/questions/31316791/compress-a-video-on-client-side-web –

Respuesta

1

Puede usar una gema como Carrierwave (https://github.com/jnicklas/carrierwave). Tiene la capacidad de procesar archivos antes de almacenarlos. Incluso si los sube directamente a S3 primero con javascript, puede hacer que Carrierwave recupere el archivo, lo procese y lo almacene de nuevo.

De lo contrario, podría hacer que Carrierwave se ocupe del archivo desde el principio (a menos que esté hospedando con Heroku y necesite evitar los tiempos de espera yendo directamente a S3).

+1

Gracias, pero eso solo ocurre después de que se carga la película. Básicamente, quiero hacerlo antes de que el archivo salga de la máquina del usuario, lo que significa que mientras se transmite al servidor o al equipo del cliente –

+0

sospecho que no es posible. No puedo imaginar que puedas hacerlo desde el lado del cliente y también me sorprendería si puedes hacerlo sin tener todo el archivo. Ciertamente podría estar equivocado, sin duda alguien aquí nos iluminará si es el caso. –

2

La recompresión de un video no es un problema trivial que no va a ocurrir en un navegador en el corto plazo.

Con los cambios en HTML 5, que es teóricamente posible si se puede superar varios problemas:

  • tendrá que utilizar el File API para leer el contenido de un archivo que el usuario selecciona un elemento utilizando <input type="file"> . Sin embargo, parece que FileReader lee el archivo completo en la memoria antes de entregárselo a su código, que es exactamente lo que no desea cuando se trata de archivos de video de gran tamaño. Desafortunadamente, este es un problema del que no puedes hacer nada. Todavía podría funcionar, pero el rendimiento probablemente sea inaceptable por algo más de 10-20 MB más o menos.
  • Una vez que tenga los datos del archivo, usted tiene que realmente interpretar que – algo logra generalmente con un demuxer dividir el continer (mpeg, etc) presentar en flujos de vídeo y audio, y una codec para descomprimir aquellas corrientes en crudo imagen/datos de audio. Su sistema operativo viene con varias implementaciones de códecs, ninguno de los cuales es accesible desde JavaScript. Existen algunas implementaciones de JS videoandcodec, pero son experimentales y extremadamente lentas; y solo implemente el descompresor , por lo que se quedaría atascado a la hora de crear resultados.
  • Decompressing, descamación y volver a comprimir audio y vídeo es extremadamente uso intensivo del procesador, que es exacty el tipo de carga de trabajo que JavaScript (y lenguajes de scripting en general) es el peor en. Como mínimo, debe usar Web workers para ejecutar su código en un hilo separado.
  • Todo este trabajo se ha realizado severaltimesover; estás reinventando la rueda.

Realista, esto es algo que tiene que hacerse en el servidor, y aun así no es una tarea trivial.

Si está desesperado, podría intentar algo como un complemento/control ActiveX que maneja la compresión, pero luego tiene que convencer a los usuarios para que instalen un complemento (yuck).

+0

Al principio pensé que no era posible, pero YouTube parece ser capaz de hacer esto cuando cargas el video, así que imagino que hay una manera. Actualmente estoy redimensionando y convirtiendo en el lado del servidor. Solo quiero poder hacerlo antes de la carga desde el cliente. –

+1

. Intenté subir a YouTube. Los datos enviados al servidor eran idénticos al archivo de video. mi disco duro, por lo que definitivamente no hay ninguna compresión del lado del cliente. – josh3736

Cuestiones relacionadas