5

フォームを使用してユーザーからサーバーにビデオをアップロードする Ruby on rails で記述された Web アプリケーションがあります (実際には、s3 に直接アップロードする jquery アップローダーを使用していますが、これは関係ないと思います)。
ビデオのアップロード時間を短縮するために、ビデオのサイズを 1000x2000 ピクセルに縮小したい場合、500x1000 に縮小したいと考えています。ビデオがクライアント側にアップロードされている間にそうする方法はありますか? それを行うことができるjavascriptライブラリはありますか?

4

2 に答える 2

2

ビデオの再圧縮は重要な問題であり、ブラウザーですぐに発生することはありません。

HTML5 の変更により、いくつかの問題を克服できれば、理論的には可能です。

  • File APIを使用して、ユーザーが要素を使用して選択したファイルの内容を読み取ります<input type="file">ただし、ファイル全体をコードに渡す前にメモリにFileReader読み込むように見えます。これは、大きなビデオ ファイルを処理する場合に望ましくないことです。残念ながら、これはどうしようもない問題です。それでも動作する可能性はありますが、10 ~ 20 MB 程度を超えると、おそらくパフォーマンスが受け入れられなくなります。
  • ファイルのデータを取得したら、実際にそれを解釈する必要があります。これは通常、デマルチプレクサを使用してコンティナー (mpeg など) ファイルをビデオとオーディオ ストリームに分割し、コーデックを使用してこれらのストリームを生の画像/オーディオ データに解凍します。OS にはいくつかのコーデックが実装されていますが、JavaScript からアクセスできるものはありません。JSビデオ および オーディオ コーデックの実装がいくつかありますが、それらは実験的なものであり、非常に遅いです。decompressorのみを実装するため、出力の作成に関しては行き詰まります。
  • オーディオとビデオの解凍、スケーリング、および再圧縮は、プロセッサに非常に負荷がかかります。これはまさに、JavaScript (および一般的なスクリプト言語) が最も苦手とする種類のワークロードです。少なくとも、Web ワーカーを使用して別のスレッドでコードを実行する必要があります。
  • この作業はすべて、 にわたって行われました。あなたは車輪を再発明しています。

現実的には、これはサーバー側で行わなければならないことであり、その場合でも簡単な作業ではありません。

絶望的な場合は、圧縮を処理するプラグイン/ActiveX コントロールのようなものを試すことができますが、ユーザーにプラグインをインストールするよう説得する必要があります (yuck)。

于 2012-04-16T15:50:20.540 に答える
1

Carrierwave (https://github.com/jnicklas/carrierwave) のような宝石を使用できます。ファイルを保存する前に処理する機能があります。最初に JavaScript を使用して直接 S3 にアップロードした場合でも、Carrierwave でファイルを取得して処理し、再度保存することができます。

それ以外の場合は、Carrierwave に最初からファイルを処理させることができます (Heroku でホストしていて、S3 に直接移動してタイムアウトを回避する必要がある場合を除く)。

于 2012-04-16T14:19:22.120 に答える